基于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写MySQL数据 实现代码
Jun 15 PHP
PHP CKEditor 上传图片实现代码
Nov 06 PHP
ThinkPHP实现多数据库连接的解决方法
Jul 01 PHP
PHP以mysqli方式连接类完整代码实例
Jul 15 PHP
PHP中模拟处理HTTP PUT请求的例子
Jul 22 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 PHP
PHP addAttribute()函数讲解
Feb 03 PHP
php弹出提示框的是实例写法
Sep 26 PHP
laravel 框架执行流程与原理简单分析
Feb 01 PHP
PHP7 整型处理机制修改
Mar 09 PHP
php去除数组中为0的元素的实例分析
Nov 17 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中实现精确设置session过期时间的方法
2014/07/17 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
jquery获取一组checkbox的值(实例代码)
2013/11/04 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
js实现input框文字动态变换显示效果
2015/08/19 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
2016/01/10 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
Three.js快速入门教程
2016/09/09 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Python网络爬虫实例讲解
2016/04/28 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
python如何保证输入键入数字的方法
2019/08/23 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
Python中格式化字符串的四种实现
2020/05/26 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
职业生涯规划怎么写
2013/12/29 职场文书
小学新教师培训方案
2014/02/03 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
六五普法心得体会2016
2016/01/21 职场文书
python面向对象版学生信息管理系统
2021/06/24 Python