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 相关文章推荐
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
php 数组二分法查找函数代码
Feb 16 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 PHP
php中session_unset与session_destroy的区别分析
Jun 16 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
php数组函数array_key_exists()小结
Dec 10 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 PHP
详解PHP神奇又有用的Trait
Mar 25 PHP
tp5框架的增删改查操作示例
Oct 31 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学习的路线图
2013/07/10 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
2016/04/12 Javascript
Vue 进入/离开动画效果
2017/12/26 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
浅谈js闭包理解
2019/04/01 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
python获取linux系统信息的三种方法
2020/10/14 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
环保公益广告语
2014/03/13 职场文书
松材线虫病防治方案
2014/06/15 职场文书
公证书格式
2015/01/23 职场文书
房产证明范本
2015/06/19 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
利用Python多线程实现图片下载器
2022/03/25 Python