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 相关文章推荐
dede3.1分页文字采集过滤规则详说(图文教程)
Apr 03 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
PHP的简易冒泡法代码分享
Aug 28 PHP
php读取EXCEL文件 php excelreader读取excel文件
Dec 06 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
Drupal7中常用的数据库操作实例
Mar 02 PHP
php转换颜色为其反色的方法
Apr 27 PHP
php准确获取文件MIME类型的方法
Jun 17 PHP
PHP+redis实现添加处理投票的方法
Nov 14 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
php生出随机字符串
Jul 06 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 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 日常开发小技巧
2009/09/23 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
js常见遍历操作小结
2019/06/06 Javascript
angular组件间通讯的实现方法示例
2020/05/07 Javascript
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python实现决策树C4.5算法的示例
2018/05/30 Python
python实现简单登陆系统
2018/10/18 Python
django之自定义软删除Model的方法
2019/08/14 Python
python用requests实现http请求代码实例
2019/10/31 Python
pytorch中图像的数据格式实例
2020/02/11 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
退休感言
2014/01/28 职场文书
公务员培训自我鉴定
2014/02/01 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
幼儿教师个人总结
2015/02/05 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技