HTTP Response 拆分
程序员文章站
2022-06-24 18:14:06
...
HTTP Response 拆分
译者注:原文拆分对应的单词为splitting
HTTP头 拆分是一种偷窃用户数据的一种攻击方法。可以用来执行跨平台的脚本攻击、偷取用户数据、破坏或篡改网站内容。
HTTP Response 拆分有多严重?
当浏览器请求一个页面的时候,页面将HTTP头的信息发送给浏览器。这些头信息告诉浏览器应该用什么语言来显示,都要采取什么动作,以及网站是怎么编写。下面是一个Google的头信息样例:
在开发程序时,你可能很想自己更新或者设置http header。例如,最常见的就是设置PHP的referer 头。下面展示一个response拆分的简单例子,假设你用URL中的一个get参数设置了http header:
这个代码将为页面设置一个Location header。不怀好意的黑客可能认识这个并试图修改页面发送的header。注意,Google的页面头信息中每一条都是新起一行。攻击者就可以聪明的修改这个URL来修改HEADER.
而这个还不是最糟糕的,识别header中的行分隔符,攻击者还可以将你的网站修改成:
这样就能插入一个新的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
译者注:原文拆分对应的单词为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
下一篇: CSS 带搜索导航栏的示例代码
推荐阅读
-
Node.js中的http请求客户端示例(request client)
-
怎样实现android http-post方法实例说明
-
HTTP响应头的管理 提升网站访问速度
-
rpc服务器不可用(rpc协议和http协议的区别)
-
从零开始一个http服务器-请求request解析(二)
-
Yii框架中用response保存cookie,用request读取cookie的原理解析
-
Tomcat配置https并访问http自动跳转至https
-
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
-
C#基于HttpWebRequest实现发送HTTP请求的方法分析
-
成功解决SyntaxError: Non-UTF-8 code starting with xc0 in file but no encoding declared; see http://p