`
ultrang
  • 浏览: 59132 次
  • 性别: 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
分享到:
评论

相关推荐

    getOutputStream() has already been called for this response 错误解决

    4. **分离HTTP请求**:如果混合内容无法合并,考虑将它们拆分为两个不同的HTTP请求,每个请求对应一种类型的输出。 5. **利用HTTP的Multipart Response**:HTTP允许在单个请求中发送多个部分的数据,但是这通常需要...

    gRPC windows VS2019 C++ 拆分服务端和客户端

    在IT领域,gRPC是一个高性能、开源且与语言无关的RPC(远程过程调用)框架,它基于HTTP/2协议并使用 Protobuf (Protocol Buffers) 作为接口定义语言。本教程将详细介绍如何在Windows环境下,使用Visual Studio 2019...

    PHP漏洞全解

    9、HTTP 响应拆分攻击(HTTP Response Splitting) 10、文件上传漏洞(File Upload Attack) 11、目录穿越漏洞(Directory Traversal) 12、远程文件包含攻击(Remote Inclusion) 13、动态函数注入攻击(Dynamic Variable ...

    php漏洞大全

     9.HTTP响应拆分攻击(HTTP Response Splitting)  10.文件上传漏洞(File Upload Attack)  11.目录穿越漏洞(Directory Traversal)  12.远程文件包含攻击(Remote Inclusion)  13.动态函数注入攻击(Dynamic ...

    github-webhook:Github Webhook 拆分主仓库

    http_response_code(200); echo json_encode(['status' =&gt; 'success']); ?&gt; ``` 这个脚本会监听`push`事件,并根据接收到的数据执行相应的任务。在实际应用中,你可能需要根据项目需求进行更复杂的逻辑处理。 总结...

    前端axios请求封装

    对于复杂的应用,可以进一步将API模块拆分为多个子模块,每个子模块负责特定的业务领域。 总之,对axios进行封装,创建API模块是前端开发中提高效率和代码质量的重要步骤。它使得接口调用更加规范,降低了维护成本...

    pythonurllib2模块实例简介.pdf

    ### Python urllib2 模块详解 ...尽管 `urllib2` 在 Python 3.x 中已被拆分为 `urllib.request` 和 `urllib.error` 等多个模块,但其核心思想和用法仍然一致。希望本文能够帮助读者更好地理解和使用 `urllib2`。

    C#如何解析http报文

    上述代码示例提供了一个简单的HTTP报文解析器的起点,但它可能并不完整或完全符合所有标准,实际项目中应考虑使用更成熟的库,如`System.Net.Http.Headers.HttpResponseHeaders`,它提供了更强大且健壮的报头解析...

    FindBugs错误码对照表

    此错误表明代码将HTTP请求参数直接写入HTTP头,可能会导致HTTP响应拆分漏洞。攻击者可能利用此漏洞注入额外的HTTP响应部分,破坏响应结构。 5. SQL: Nonconstant string passed to execute method on an SQL ...

    FindBugs规则整理_中文版.pdf

    将HTTP参数直接写入HTTP头部可能会导致HTTP响应拆分漏洞,攻击者可以通过控制输入数据操纵响应。应使用安全的方式处理HTTP响应头,避免用户输入直接影响响应结构。 - SQL: Nonconstant string passed to execute ...

    java c++ 通信之间的乱码解决方法

    3. `out.print(new String(test.getBytes("GBK"), "GBK"))`虽然进行了GBK到GBK的转换,但底层仍然会将字符串拆分为字节数组,与直接以UTF-8发送效果相同。 解决跨语言通信的乱码问题,关键在于识别两端的编码方式,...

    FindBugs规则(中文版111).doc

    这个规则提醒开发者,直接将HTTP参数写入HTTP头可能导致HTTP响应拆分漏洞。这允许攻击者控制HTTP响应的结构,执行跨站脚本(XSS)攻击或其他恶意操作。应过滤或转义用户输入,避免直接放入HTTP头。 5. SQL: ...

    Python-ruia基于asyncio的异步Python36网页抓取微框架

    5. **模块化设计**:ruia将爬虫的各个组件如请求、解析、存储等拆分成独立的模块,便于理解和维护。 ### 安装ruia 在开始使用ruia之前,首先需要确保你的Python环境是3.6或更高版本,然后通过pip进行安装: ```...

    .NET的SQL防注入

    System.Web.HttpContext.Current.Response.Write("&lt;scriptLanguage=JavaScript&gt;alert('ASP.NET(C#版)检测到非法操作\\n\\nBlog:http://hi.baidu.com/ahhacker86\\n\\nBy:aa&&JK1986');&lt;/"+"script&gt;"); System.Web....

    究竟啥才是互联网架构“高并发”

    1. **响应时间(Response Time)**:指的是系统处理一个请求所需要的时间。例如,一个HTTP请求被系统处理并返回结果的时间。 2. **吞吐量(Throughput)**:单位时间内系统能处理的请求数量,通常用每秒处理的请求数...

    Python3如何对urllib和urllib2进行重构

    - `urllib.response`:处理HTTP响应,虽然不常直接使用,但它是处理响应数据的重要组成部分。 2. **API更改**: - `urllib2.urlopen()`:在Python 3中,这个函数被移动到了`urllib.request`模块,新的调用方式为`...

    php识别地址,实现地址自动识别实例(PHP)

    2. **正则匹配**:使用正则表达式对地址进行拆分。由于中国地址结构较为固定,我们可以编写特定的正则来匹配各个部分。例如,对于上述地址,我们可以尝试以下模式: ```php preg_match('/^(\w+市)\s+(\w+区)\s+(\w+...

    ios通过HTTP调用获取返回值

    然后,将`postBody`设为请求体,并通过`NSURLConnection`的`sendSynchronousRequest:returningResponse:error:`方法发送请求,获取返回的数据。如果请求成功,解析返回的JSON数据;否则,打印错误信息。 在服务器端...

Global site tag (gtag.js) - Google Analytics