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 字符串分割和比较
Oct 06 PHP
discuz的php防止sql注入函数
Jan 17 PHP
php判断手机访问还是电脑访问示例分享
Jan 20 PHP
php从完整文件路径中分离文件目录和文件名的方法
Mar 13 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
使用php-timeit估计php函数的执行时间
Sep 06 PHP
php实现网站文件批量压缩下载功能
Oct 28 PHP
PHP如何通过AJAX方式实现登录功能
Nov 23 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
Python中使用django form表单验证的方法
Jan 16 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
Centos7安装swoole扩展操作示例
Mar 26 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
去除php注释和去除空格函数分享
2014/03/13 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
Javascript基础教程之switch语句
2015/01/18 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
2017/01/16 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
常见python正则用法的简单实例
2016/06/21 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
python如何读写csv数据
2018/03/21 Python
python3去掉string中的标点符号方法
2019/01/22 Python
python中删除某个元素的方法解析
2019/11/05 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
python 用struct模块解决黏包问题
2020/11/07 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
英语系毕业生自荐信
2013/10/31 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
医学生职业规划范文
2014/01/05 职场文书
学期自我评价
2014/01/27 职场文书
员工保密承诺书
2014/05/28 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android