PHP常见漏洞攻击分析(4)

另外,攻击者可以任意指定"session id"(例如"hello"),然后用这个"session id"创建一个session文件(例如"/tmp/sess_hello"),但是"session id"只能是字母和数字组合。

如何通过数据类型进行攻击?

PHP具有比较松散的数据类型,变量的类型依赖于它们所处的上下文环境。例如:"$hello"开始是字符串变量,值为"",但是在求值时,就变成了整形变量"0",这有时可能会导致一些意想不到的结果。如果"$hello"的值为"000"还是为"0"是不同的,empty()返回的结果也不会为真。

PHP中的数组是关联数组,也就是说,数组的索引是字符串型的。这意味着"$hello["000"]"和"$hello[0]"也是不同的。

开发程序的时候应该仔细地考虑上面的问题,例如,我们不应该在一个地方测试某个变量是否为"0",而在另外的地方使用empty()来验证。

如何通过容易出错的函数进行攻击?下面是一份比较详细的容易出错的函数列表:

<PHP代码执行>

require():读取指定文件的内容并且作为PHP代码解释
include():同上
eval():把给定的字符串作为PHP代码执行
preg_replace():当与"/e"开关一起使用时,替换字符串将被解释为PHP代码

<命令执行>

exec():执行指定的命令,返回执行结果的最后一行
passthru():执行指定命令,返回所有结果到客户浏览器
``:执行指定命令,返回所有结果到一个数组
system():同passthru(),但是不处理二进制数据
popen():执行指定的命令,把输入或输出连接到PHP文件描述符

<文件泄露>

fopen():打开文件,并对应一个PHP文件描述符
readfile():读取文件的内容,然后输出到客户浏览器
file():把整个文件内容读到一个数组中
如何增强PHP的安全性?

我们在上面介绍的所有攻击对于缺省安装的PHP4都可以很好的实现,但是PHP的配置非常灵活,通过配置一些PHP选项,我们完全可能抵抗其中的一些攻击。下面我们按照实现的难度对一些配置进行了分类:

*低难度
**中低难度
***中高难度
****高难度

如果你使用了PHP提供的所有选项的话,那么你的PHP将是很安全的,即使是第三方的代码也是如此,因为其中很多功能已经不能使用。

**** 设置"register_globals"为"off"
这个选项会禁止PHP为用户输入创建全局变量,也就是说,如果用户提交表单变量"hello",PHP不会创建"$ hello",而只会创建"HTTP_GET/POST_VARS[''hello'']"。这是PHP中一个极其重要的选项,关闭这个选项,会给编程带来很大的不便。

*** 设置"safe_mode"为"on"

打开这个选项,会增加如下限制:

1. 限制哪个命令可以被执行
2. 限制哪个函数可以被使用
3. 基于脚本所有权和目标文件所有权的文件访问限制
4. 禁止文件上载功能

这对于ISP来说是一个"伟大"的选项,同时它也能极大地改进PHP的安全性。

** 设置"open_basedir"

这个选项可以禁止指定目录之外的文件操作,有效地消除了本地文件或者是远程文件被include()的攻击,但是仍需要注意文件上载和session文件的攻击。

** 设置"display_errors"为"off",设置"log_errors"为"on"

这个选项禁止把错误信息显示在网页中,而是记录到日志文件中,这可以有效的抵制攻击者对目标脚本中函数的探测。

* 设置"allow_url_fopen"为"off"

这个选项可以禁止远程文件功能。

以上内容是小编给大家介绍的php常见漏洞攻击分析,希望对大家有所帮助!

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/294a4f57a5750d9672ffd6ead203c21d.html