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获取网卡地址的代码
Apr 09 PHP
php 显示指定路径下的图片
Oct 29 PHP
PHP 正则表达式常用函数
Aug 17 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
Aug 23 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
PHP不使用内置函数实现字符串转整型的方法示例
Jul 03 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
php格式文件打开的四种方法
Feb 24 PHP
PHP使用pdo实现事务处理操作示例
Sep 05 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批量生成随机用户名
2008/07/10 PHP
MSN消息提示类
2006/09/05 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
详解AngularJS1.x学习directive 中‘&amp; ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
python实现删除文件与目录的方法
2014/11/10 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
详解C++编程中一元运算符的重载
2016/01/19 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
用Python逐行分析文件方法
2019/01/28 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
运动会广播稿200字
2014/01/15 职场文书
作风转变心得体会
2014/09/02 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
工程质量保证书
2015/05/09 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书