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中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
Oct 15 PHP
php短网址和数字之间相互转换的方法
Mar 13 PHP
浅析Yii2缓存的使用
May 10 PHP
PHP中Array相关函数简介
Jul 03 PHP
PHP实现添加购物车功能
Mar 06 PHP
laravel 中如何使用ajax和vue总结
Aug 16 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
PHP解析url并得到url参数方法总结
Oct 11 PHP
php操作redis数据库常见方法实例总结
Feb 20 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出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
基于php设计模式中工厂模式详细介绍
2013/05/15 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
用JQuery调用Session的实现代码
2010/10/29 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
jQuery用noConflict代替$的实现方法
2017/04/12 jQuery
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
vuex存储token示例
2019/11/11 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
Python argparse模块应用实例解析
2019/11/15 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
公务员爱岗敬业心得体会
2016/01/25 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书
无线电知识基础入门篇
2022/02/18 无线电