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动态生成VRML网页
Oct 09 PHP
随时给自己贴的图片加文字的php水印
Mar 16 PHP
PHP 编写的 25个游戏脚本
May 11 PHP
PHP 文件缓存的性能测试
Apr 25 PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
Zend Framework前端控制器用法示例
Dec 11 PHP
PHP调用Mailgun发送邮件的方法
May 04 PHP
php基于自定义函数记录log日志方法
Jul 21 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观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
Python随机生成数模块random使用实例
2015/04/13 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
python 画函数曲线示例
2019/12/04 Python
Python requests模块cookie实例解析
2020/04/14 Python
Python如何实现FTP功能
2020/05/28 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
4S店售后客服自我评价
2014/04/09 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
最常使用的求职信
2014/05/25 职场文书
老龄工作先进事迹
2014/08/15 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
导游词之山东八大关
2019/12/18 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS