如何对PHP程序中的常见漏洞进行攻击(上).pdf 立即下载
2024-09-12
约5千字
约6页
0
96KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

如何对PHP程序中的常见漏洞进行攻击(上).pdf

如何对PHP程序中的常见漏洞进行攻击(上).pdf

预览

免费试读已结束,剩余 1 页请下载文档后查看

15 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

如何对PHP程序中的常见漏洞进行攻击(上)

翻译:analysist(分析家)

来源:http://www.china4lert.org


如何对PHP程序中的常见漏洞进行攻击(上)


原著:ShaunClowes

翻译:analysist


之所以翻译这篇文章,是因为目前关于CGI安全性的文章都是拿Perl作为例子,而专门介
绍ASP,PHP或者JSP安全性的文章则很少。ShaunClowes的这篇文章比较全面地介绍了PHP
的安全问题,原文可以在http://www.securereality.com.au/studyinscarlet.txt找到。


由于原文比较长,而且有相当一部分是介绍文章的背景或PHP的基础知识,没有涉及到PHP
安全方面的内容,因此我没有翻译。如果你想了解这方面的知识,请参考原文。


文章主要从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错
的函数这几个方面分析了PHP的安全性,并且对如何增强PHP的安全性提出了一些有用的建
议。

好了,废话少说,我们言归正传!


[全局变量]
PHP中的变量不需要事先声明,它们会在第一次使用时自动创建,它们的类型也不需要指定,
它们会根据上下文环境自动确定。从程序员的角度来看,这无疑是一种极其方便的处理方法。
很显然,这也是快速开发语言的一个很有用的特点。一旦一个变量被创建了,就可以在程序
中的任何地方使用。这个特点导致的结果就是程序员很少初始化变量,毕竟,当它们第一次
创建时,他们是空的。


很显然,基于PHP的应用程序的主函数一般都是接受用户的输入(主要是表单变量,上载文
件和Cookie等),然后对输入数据进行处理,然后把结果返回到客户端浏览器。为了使PHP
代码访问用户的输入尽可能容易,实际上PHP是把这些输入数据看作全局变量来处理的。
例如:


很显然,这会显示一个文本框和提交按钮。当用户点击提交按钮时,“test.php”会处理用
户的输入,当“test.php”运行时,“$hello”会包含用户在文本框输入的数据。从这里我
们应该看出,攻击者可以按照自己的意愿创建任意的全局变量。如果攻击者不是通过表单输
入来调用“test.php”,而是直接在浏览器地址栏输入
http://server/test.php?hello=hi&setup=no,那么,不止是“$hello”被创建,“$setup”
也被创建了。


译者注:这两种方法也就是我们通常说的“POST”和“GET”方法。

下面的用户认证代码暴露了PHP的全局变量所导致的安全问题:


if($pass=="hello")

$auth=1;

...

if($auth==1)

echo"someimportantinformation";

?>

上面的代码首先检查用户的密码是否为“hello”,如果匹配的话,设置“$auth”为“1”,
即通过认证。之后如果“$suth”为“1”的话,就会显示一些重要信息。


表面看起来是正确的,而且我们中有相当一部分人是这样做的,但是这段代码犯了想当然的
错误,它假定“$auth”在没有设置值的时候是空的,却没有想到攻击者可以创建任何全局
变量并赋值,通过类似“http://server/test.php?auth=1”的方法,我们完全可以欺骗这
段代码,使它相信我们是已经认证过的。


因此,为了提高PHP程序的安全性,我们不能相信任何没有明确定义的变量。如果程序中的
变量很多的话,这可是一项非常艰巨的任务。
一种常用的保护方式就是检查数组HTTP_GET[]或POST_VARS[]中的变量,这依赖于我们的提
交方式(GET或POST)。当PHP配置为打开“track_vars”选项的话(这是缺省值),用户提
交的变量就可以在全局变量和上面提到的数组中获得。


但是值得说明的是,PHP有四个不同的数组变量用来处理用户的输入。HTTP_GET_VARS数组
用来处理GET方式提交的变量,HTTP_POST_VARS数组用于处理POST方式提交的变量,
HTTP_COOKIE_VARS数组用于处理作为cookie头提交的变量,而对于HTTP_POST_FILES数组
(比较新的PHP才提供),则完全是用户用来提交变量的一种可选方式。用户的一个请求可
以很容易的把变量存在这四个数组中,因此一个安全的PHP程序应该检查这四个数组。
[远程文件]

PHP是一种具有丰富特性的语言,提供了大量的函数,使编程者实现某个功能很容易。但是
从安全的角度来看,功能越多,要保证它的安全性就越难,远程文件就是说明这个问题的一
个很好的例子:


if(!($fd=fopen("$filename","r")
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

如何对PHP程序中的常见漏洞进行攻击(上)

文档大小:96KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用