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初学者们头痛的十四个问题
Jan 15 PHP
php下mysql数据库操作类(改自discuz)
Jul 03 PHP
PHP之数组学习
May 29 PHP
php学习之运算符相关概念
Jun 09 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
PHP微信支付实例解析
Jul 22 PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 PHP
PHP集成环境XAMPP的安装与配置
Nov 13 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 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
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
python爬取网站数据保存使用的方法
2013/11/20 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
Python实现破解猜数游戏算法示例
2017/09/25 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
python pandas 组内排序、单组排序、标号的实例
2018/04/12 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
Python如何在windows环境安装pip及rarfile
2020/06/15 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
用python读取xlsx文件
2020/12/17 Python
三个Unix的命令面试题
2015/04/12 面试题
会计电算化专业应届大学生求职信
2013/10/22 职场文书
营业员个人总结的自我评价
2013/10/25 职场文书
高三政治教学反思
2014/02/06 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
意向书范本
2014/07/29 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
十二生肖观后感
2015/06/12 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
资产移交协议书
2016/03/24 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers