PHP安全防范技巧分享


Posted in PHP onNovember 03, 2011

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元素如下:

程序代码

<pre lang="php"><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
Remote PHP Vulnerability Scanner(自动化 PHP页面缺陷分析, XSS检测功能较强)
PHPIDS - PHP 入侵检测系?

PHP 相关文章推荐
PhpMyAdmin中无法导入sql文件的解决办法
Jan 08 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
Jul 03 PHP
php一些错误处理的方法与技巧总结
Aug 10 PHP
PHP中copy on write写时复制机制介绍
May 13 PHP
PHP多进程编程实例
Oct 15 PHP
php中实现获取随机数组列表的自定义函数
Apr 02 PHP
php+ajax实现无刷新数据分页的办法
Nov 02 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
Zend Framework上传文件重命名的实现方法
Nov 25 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
PHP 爬取网页的主要方法
Jul 13 PHP
防止本地用户用fsockopen DDOS攻击对策
Nov 02 #PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
Nov 02 #PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
Nov 02 #PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
Nov 02 #PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 #PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 #PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
Nov 02 #PHP
You might like
使用PHP制作新闻系统的思路
2006/10/09 PHP
php实现使用正则将文本中的网址转换成链接标签
2014/12/03 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
Python 正则表达式操作指南
2009/05/04 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
python用match()函数爬数据方法详解
2019/07/23 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
python绘制动态曲线教程
2020/02/24 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
Python如何操作docker redis过程解析
2020/08/10 Python
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
最新奶茶店创业计划书
2014/01/25 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
会议室使用管理制度
2015/08/06 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
求职信如何撰写?
2019/05/22 职场文书
68句权威创业名言
2019/08/26 职场文书
分享Python异步爬取知乎热榜
2022/04/12 Python
深入理解 Golang 的字符串
2022/05/04 Golang