`
ultrang
  • 浏览: 57796 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
HTTP Response 拆分
译者注:原文拆分对应的单词为splitting
HTTP头 拆分是一种偷窃用户数据的一种攻击方法。可以用来执行跨平台的脚本攻击、偷取用户数据、破坏或篡改网站内容。
HTTP Response 拆分有多严重?
当浏览器请求一个页面的时候,页面将HTTP头的信息发送给浏览器。这些头信息告诉浏览器应该用什么语言来显示,都要采取什么动作,以及网站是怎么编写。下面是一个Google的头信息样例:
http://www.google.com/
GET / HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive

在开发程序时,你可能很想自己更新或者设置http header。例如,最常见的就是设置PHP的referer 头。下面展示一个response拆分的简单例子,假设你用URL中的一个get参数设置了http header:
<?php
header("Location: ".$GET['redirect']);
?>

这个代码将为页面设置一个Location header。不怀好意的黑客可能认识这个并试图修改页面发送的header。注意,Google的页面头信息中每一条都是新起一行。攻击者就可以聪明的修改这个URL来修改HEADER.
www.mysite.com/page1.php?redirect="www.a badsite.com"

而这个还不是最糟糕的,识别header中的行分隔符,攻击者还可以将你的网站修改成:
www.mysite.com/page1.php?redirect=\r\nContent-type:text/html\r\n<html>new site!</html>

这样就能插入一个新的header或者其他HTML。这些HTML将会显示在网页的顶上。尽管上面的URL还不是一个完整的攻击(还需要更多的header信息),但是已经告诉我们攻击是如何发起的。
这会对网站安全造成什么影响?
header拆分和偷取用户数据的其他攻击一样危险。
诱导用户点击这些经过特殊伪造的链接并不困难,攻击者可以将这些链接发布在比较热门的消息版,隐藏在<img>标签内等其他方式。
因此,header拆分要和其他跨站脚本攻击一样重视。
防止Response拆分
和其他攻击一样,这也是基于用户传递的数据,或者用户修改的数据。一旦你在程序中设置了header,保证这个数据不能被用户修改,或者进行了完整的校验。可以通过检查输入是否修改,输入的长度来确保header信息的正确。
如同所有的数据检查,没有一个通用的解决方案来防止每一个可能的攻击,但是做一个白名单是一个很好的实践——删除掉与回车换行有关的字符(\r ,LF ,\n ,CR等).
最后,保证web服务器和脚本代码都是最新的。PHP 5.1.2增加了header拆分的预防机制。保持服务器的各个组件都及时更新可以防止大部分的攻击。

原文地址:http://www.golemtechnologies.com/articles/http-response-splitting
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics