基于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语言流程控制中的主动与被动
Nov 05 PHP
基于PHP 面向对象之成员方法详解
May 04 PHP
php实现图片添加水印功能
Feb 13 PHP
浅析PHP编程中10个最常见的错误
Aug 08 PHP
PHP根据两点间的经纬度计算距离
Oct 31 PHP
php禁止浏览器使用缓存页面的方法
Nov 07 PHP
详解WordPress中简码格式标签编写的基本方法
Dec 22 PHP
详细解读php的命名空间(一)
Feb 21 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 PHP
Yii 实现数据加密和解密
Mar 09 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
php代码把全角数字转为半角数字
2007/12/10 PHP
php框架Phpbean说明
2008/01/10 PHP
php图片加水印原理(超简单的实例代码)
2013/01/18 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
js读取cookie方法总结
2014/10/31 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
python实现发送邮件功能
2017/07/22 Python
python实现电子产品商店
2019/02/26 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
python实现用户名密码校验
2020/03/18 Python
pandas数据拼接的实现示例
2020/04/16 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
中等生评语大全
2014/05/04 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
教师个人年终总结
2015/02/11 职场文书
无工作证明怎么写
2015/06/15 职场文书
感恩主题班会教案
2015/08/12 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书