基于PHP开发中的安全防范知识详解

 更新时间:2013年06月06日 17:49:57   作者:  
本篇文章是对PHP开发中的安全防范知识进行了详细的分析介绍,需要的朋友参考下

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关联数组快速排序的方法

    这篇文章主要介绍了php关联数组快速排序的方法,涉及php数组排序的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • PHP常见的6个错误提示及解决方法

    PHP常见的6个错误提示及解决方法

    自学党们在自学php的时候,经常会发生一些小错误,这篇文章主要介绍了PHP常见的6个错误提示及解决方法,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Php Image Resize图片大小调整的函数代码

    Php Image Resize图片大小调整的函数代码

    php下可以将图片大小调整的函数代码,需要的朋友可以参考下。
    2011-01-01
  • IIS安装Apache伪静态插件的具体操作图文

    IIS安装Apache伪静态插件的具体操作图文

    本篇文章是对IIS安装Apache伪静态插件的具体操作进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • PHP编程实现计算抽奖概率算法完整实例

    PHP编程实现计算抽奖概率算法完整实例

    这篇文章主要介绍了PHP编程实现计算抽奖概率算法,结合完整实例形式分析了php随机数运算相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • php隐藏实际地址的文件下载方法

    php隐藏实际地址的文件下载方法

    这篇文章主要介绍了php隐藏实际地址的文件下载方法,涉及php中header与file_get_contents方法的相关使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • flash+php+mysql打造简单留言本教程

    flash+php+mysql打造简单留言本教程

    刚开始做这个留言本的时候,连mysql和php都没接触过。经过痛苦的查找资料和学习,郁闷了一个星期后完成了我的简单留言本
    2008-07-07
  • PHP获取文件相对路径的方法

    PHP获取文件相对路径的方法

    这篇文章主要介绍了PHP获取文件相对路径的方法,通过自定义函数实现获取文件相对路径的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • PHP简易延时队列的实现流程详解

    PHP简易延时队列的实现流程详解

    普通的队列是先进先出,但是延时队列并不是,而是加上了时间这一权重。希望到达时间点的先执行。从某种意义上来讲,延迟队列的结构并不像一个队列,而更像是一种以时间为权重的有序堆结构
    2022-11-11
  • thinkphp如何传递GET参数方法详解

    thinkphp如何传递GET参数方法详解

    这篇文章主要为大家介绍了thinkphp如何传递GET参数方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05

最新评论