时间:2013-06-15 17:45:28

php header 重定向常出现功能(使用)漏洞

分享到:

 

php header函数功能强大,可以给用户发送各种header头信息,只要header头里面能够发送的内容,都可以通过header函数来完成。如发送302跳转,设置cookie,发送401认证,发现last-modify等等! HTTP/1.1 specification for more information on HTTP headers,都可以用该函数完成。总之一句话,任何服务区response应答的头信息几乎都可以用它来发送。如:

response 服务器响应头

这里我们经常用header发送302跳转,会发现一个问题。在走查代码时候,遇到很多同人会有类似操作代码,如:
1
2
3
4
<?php
header("Content-type: text/html; charset=utf-8");
 
//判断用户是否授权
1
2
3
4
5
6
7
if('用户未授权')
{
	header("location:forbidden.php");
}
 
///下面是进行摸个记录操作
//删除条记录,或者修改某条记录……
1
 

这类代码,在开发中很常见,我们会发现,一个没有权限用户,操作该记录,网页会跳转到未授权页面,但是:记录任然被修改了,问题我们找到了,一般操作人员,对于js跳转会知道是前端浏览器跳转的。但是对于php操作跳转,错误认为是服务器跳转,好像php以执行到location,然后就终止了下面运行。 其实,知道header函数真实意义就很容易理解了:header() is used to send a raw HTTP header!

header location 302实际上只是如下:

response 服务器302响应头
跟其它普通echo 函数没有多大区别,只是给header信息头,echo 一行而已。

屏蔽Bug方法:


知道了,发送header跳转,服务器不会终止程序,因此为了安全起见。header locaction后,最好加一句exit()函数。 这样,php解析引擎就会停止解析了!我们正确方法是封装个header_302方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/*header_302跳转*
 * *
 *@author http://blog.chacuo.net/
 * @param string $url 跳转url
 */
function  header_302($url)
{
	if(headers_sent())
	{
		exit('header 已经发送过!');
	}
	header("location:$url");
	exit();
}

后记:这类问题,不光出在php程序中,其它很多header loction跳转语言程序,原理相同。都有类似功能,很多时候。都是使用时候没有注意,造成的。 容易在代码走查中,遗漏掉!好了,先到这里,欢迎交流!

作者:程默的博客  QQ:8292669
原文网址:http://blog.chacuo.net/276.html
订阅保持关注:http://blog.chacuo.net/feed
本文版权归作者所有,欢迎转载,请务必添加原文链接。


 

留下评论

要发表评论,您必须先登录