基于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 相关文章推荐
关于BIG5-HKSCS的解决方法
Mar 20 PHP
动易数据转成dedecms的php程序
Apr 07 PHP
Discuz 模板引擎的封装类代码
Jul 18 PHP
PHP禁止页面缓存的代码
Oct 23 PHP
php函数serialize()与unserialize()用法实例
Nov 06 PHP
php给每个段落添加空格的方法
Mar 20 PHP
在Mac上编译安装PHP7的开发环境
Jul 28 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 PHP
laravel 解决强制跳转 https的问题
Oct 22 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自动重命名文件实现方法
2014/11/04 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
超级简单的图片防盗(HTML),好用
2007/04/08 Javascript
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
手写的一个兼容各种浏览器的javascript getStyle函数(获取元素的样式)
2014/06/06 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
用js编写留言板
2020/03/17 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
Python实现的快速排序算法详解
2017/08/01 Python
keras之权重初始化方式
2020/05/21 Python
最新创业融资计划书
2014/01/19 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
南京导游词
2015/02/03 职场文书
二十年同学聚会感言
2015/07/30 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
Python学习之异常中的finally使用详解
2022/03/16 Python
vue实现拖拽交换位置
2022/04/07 Vue.js
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js