基于PHP开发中的安全防范知识详解


Posted in PHP onJune 06, 2013

PHP代码安全和XSS,SQL注入等对于各类网站的安全非常中用,尤其是UGC(User Generated Content)网站,论坛和电子商务网站,常常是XSS和SQL注入的重灾区。这里简单介绍一些基本编程要点, 相对系统安全来说,php安全防范更多要求编程人员对用户输入的各种参数能更细心.

php编译过程中的安全

建议安装Suhosin补丁,必装安全补丁
php.ini安全设置

register_global = off
magic_quotes_gpc = off
display_error = off
log_error = on
# allow_url_fopen = off
expose_php = off
open_basedir =
safe_mode = on
disable_function = exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl,popen,show_source,get_cfg_var
safe_mode_include_dir =

DB SQL预处理
mysql_real_escape_string (很多PHPer仍在依靠addslashes防止SQL注入,但是这种方式对中文编码仍然是有问题的。addslashes的问题在于黑客可以用 0xbf27来代替单引号,GBK编码中0xbf27不是一个合法字符,因此addslashes只是将0xbf5c27,成为一个有效的多字节字符,其 中的0xbf5c仍会被看作是单引号,具体见这篇文章)。用mysql_real_escape_string函数也需要指定正确的字符集,否则依然可能 有问题。

prepare + execute(PDO)
ZendFramework可以用DB类的quote或者quoteInto, 这两个方法是根据各种数据库实施不用方法的,不会像mysql_real_escape_string只能用于mysql

用户输入的处理
无需保留HTML标签的可以用以下方法
strip_tags, 删除string中所有html标签
htmlspecialchars,只对”<”,”>”,”;”,”'”字符进行转义
htmlentities,对所有html进行转义
必须保留HTML标签情况下可以考虑以下工具:

HTML Purifier: HTML Purifier is a standards-compliant HTML filter library written in PHP.
PHP HTML Sanitizer: Remove unsafe tags and attributes from HTML code
htmLawed: PHP code to purify & filter HTML

上传文件
用is_uploaded_file和move_uploaded_file函数,使用HTTP_POST_FILES[]数组。并通过去掉上传目录的PHP解释功能来防止用户上传php脚本。
ZF框架下可以考虑使用File_upload模块
Session,Cookie和Form的安全处理
不要依赖Cookie进行核心验证,重要信息需要加密, Form Post之前对传输数据进行哈希, 例如你发出去的form元素如下:

<input type="hidden" name="H[name]" value="<?php echo $Oname?>"/> <input type="hidden" name="H[age]" value="<?php echo $Oage?>"/> <?php $sign = md5('name'.$Oname.'age'.$Oage.$secret); ?> <input type="hidden" name="hash" value="<?php echo $sign?>"" />
POST回来之后对参数进行验证
$str = "";
foreach($_POST['H'] as $key=>$value) {
$str .= $key.$value;
}
if($_POST['hash'] != md5($str.$secret)) {
echo "Hidden form data modified"; exit;
}

PHP安全检测工具(XSS和SQL Insertion)
Wapiti - Web application security auditor(Wapiti - 小巧的站点漏洞检测工具) (SQL injection/XSS攻击检查工具)

安?/使用方法:
apt-get install libtidy-0.99-0 python-ctypes python-utidylib
python wapiti.py http://Your Website URL/ -m GET_XSS
Pixy: XSS and SQLI Scanner for PHP( Pixy - PHP 源码缺陷分析工具)
安?: apt-get install default-jdk

PHP 相关文章推荐
php数字转汉字代码(算法)
Oct 08 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
Composer设置忽略版本匹配的方法
Apr 27 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 PHP
PHP实现表单提交时去除斜杠的方法
Dec 26 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
PHP反射实际应用示例
Apr 03 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
Apr 23 PHP
PHP7生产环境队列Beanstalkd用法详解
May 19 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 #PHP
一些php项目中比较通用的php自建函数的详解
Jun 06 #PHP
强烈声明: 不要使用(include/require)_once
Jun 06 #PHP
探讨PHP调用时间格式的参数详解
Jun 06 #PHP
探讨多键值cookie(php中cookie存取数组)的详解
Jun 06 #PHP
深入密码加salt原理的分析
Jun 06 #PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 #PHP
You might like
多重?l件?合查?(二)
2006/10/09 PHP
利用PHP和AJAX创建RSS聚合器的代码
2007/03/13 PHP
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
jquery 问答知识整理
2010/02/11 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
Python的面向对象思想分析
2015/01/14 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
Python urls.py的三种配置写法实例详解
2017/04/28 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
python实现剪切功能
2019/01/23 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
Python如何输出百分比
2020/07/31 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
C语言面试题
2015/10/30 面试题
超市促销活动方案
2014/03/05 职场文书
综合办公室岗位职责
2015/04/11 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
python pyhs2 的安装操作
2021/04/07 Python
go语言map与string的相互转换的实现
2021/04/07 Golang