欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HTTP Response 拆分

程序员文章站 2022-06-24 18:14:06
...
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