PHP四大安全策略


Posted in PHP onMarch 12, 2014

一、文件系统安全
php如果具有root权限,且在脚本中允许用户删除文件,那么用户提交数据,不进行过滤,就非常有可能删除系统文件

<?php
// 从用户目录中删除指定的文件
$username = $_POST['user_submitted_name'];
$userfile = $_POST['user_submitted_filename'];
$homedir = "/home/$username";
unlink ("$homedir/$userfile");
echo "The file has been deleted!";
?>
上面的代码,假设用户提交的$userfile值是 ../etc/,那么/etc目录就会被删除
防范文件系统攻击,策略如下

只给php有限的权限
用户提交上来的变量要监测和过滤,不能包含文件路径等特殊字符
尽量避免使用PHP操作文件(删除),如果有这方面的需求,那用户可删除文件也必须是系统生成的随机名称,不可被用户控制
二、数据库安全
数据库安全主要防范的是sql injection,即sql注入攻击,提升数据库安全的策略如下:

不用使用root帐号或者数据库所有者帐号连接数据库,连接数据库限定连接用户的ip
使用php的pdo扩展,有效防止sql注入,除了安全方面的优势,php的pdo扩展在性能方面有有很大优势
请参看 http://php.net/manual/en/pdo.prepared-statements.php
对一些敏感信息进行加密,常见的比如对密码进行加密
三、用户数据过滤
对用户数据过滤,可以防范XSS和CSRF攻击

使用白名单(用户输入是固定模式)的方式
比如用户名只能使用数字字母,那么可以使用函数ctype_alnum判断
对用户输入使用函数 htmlentities或者htmlspecialchars进行处理,输入url不允许传入非http协议
用户身份验证使用令牌 token(csrf)
http://htmlpurifier.org/ HTML Purifier 是开源的防范xss攻击的有效解决方案,
四、其他安全策略
线上环境关闭错误报告(error_reporting,dislay_erros,可在php.ini中配置error_log路径,记录错误信息,这样有助于发现可能的用户攻击)
Register Globals,弃用(移除)的特性,不要使用
魔术引号特性,不要开启,在PHP-5.4中已经被移除
尽量使用PHP的最新版本,最新版本修复了已知的很多安全漏洞和bug
代码中严格遵守上述策略,基本能保证代码不会有太多的安全漏洞,能防范常见攻击。

PHP 相关文章推荐
php日期转时间戳,指定日期转换成时间戳
Jul 17 PHP
php设计模式小结
Feb 15 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
php cookie中点号(句号)自动转为下划线问题
Oct 21 PHP
php自动获取关键字的方法
Jan 06 PHP
CentOS安装php v8js教程
Feb 26 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
PHP异常处理Exception类
Dec 11 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
Sep 04 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 #PHP
php使用websocket示例详解
Mar 12 #PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 #PHP
php实现快速排序的三种方法分享
Mar 12 #PHP
php二分查找二种实现示例
Mar 12 #PHP
php遍历文件夹和文件列表示例分享
Mar 11 #PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 #PHP
You might like
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
关于tensorflow的几种参数初始化方法小结
2020/01/04 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
小学少先队活动方案
2014/02/18 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
租赁协议书
2015/01/27 职场文书
公务员个人总结
2015/02/12 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
Go语言并发编程 sync.Once
2021/10/16 Golang
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python