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将会员数据导入到ucenter的代码
Jul 18 PHP
php数组函数序列之array_search()- 按元素值返回键名
Nov 04 PHP
php常用的安全过滤函数集锦
Oct 09 PHP
Symfony页面的基本创建实例详解
Jan 26 PHP
php实现读取内存顺序号
Mar 29 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
YII Framework框架教程之安全方案详解
Mar 14 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
详细解读php的命名空间(一)
Feb 21 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
PHP simplexml_load_file()函数讲解
Feb 03 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 Hash算法:Times33算法代码实例
2015/05/13 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
php7 新增功能实例总结
2020/05/25 PHP
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
jQuery响应滚动条事件功能示例
2017/10/14 jQuery
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
vue组件的写法汇总
2018/04/12 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
Python多线程正确用法实例解析
2020/05/30 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
大学生的自我鉴定范文
2014/01/21 职场文书
三个儿子教学反思
2014/02/03 职场文书
大学生创业计划书
2014/08/14 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书
如何做好工作总结!
2019/04/10 职场文书