基于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中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
php 设计模式之 单例模式
Dec 19 PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
PHP缓存技术的使用说明
Aug 06 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 PHP
Yii使用migrate命令执行sql语句的方法
Mar 15 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
PHP生成随机数的方法总结
Mar 01 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
May 11 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
Aug 21 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实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
php微信开发之关注事件
2018/06/14 PHP
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
JQuery中html()方法使用不当带来的陷阱
2011/04/07 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
javascript表单正则应用
2017/02/04 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
python定时器使用示例分享
2014/02/16 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
世界上最大的街头服饰网站:Karmaloop
2017/02/04 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
接口中的方法可以是abstract的吗
2015/07/23 面试题
代办委托书怎么写
2014/08/01 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
给老婆的保证书
2015/01/16 职场文书
Python+Appium实现自动抢微信红包
2021/05/21 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python