HTTP Response Spliting 防范策略研究
目录
0x1:HTTP请求的格式
0x2:HTTP请求的方法
0x3:HTTP响应的格式
0x4:HTTP响应拆分攻击
0x5:防范的方法
HTTP请求的格式
客户端所提出的HTTP请求包含下列信息:
(1)请求信息
(2)表头
(3)一行空白行
(4)信息正文(可有可无)
例如:发送HTTP请求给服务器www.baidu.com:
GET /index.html HTTP/1.1 //请求信息
Host: www.baidu.com //表头
//空隔行
//回车
HTTP请求的方法
HTTP定义了8种方法来发送请求
(1)GET:请求响应,这是最常使用的方法
(2)HEAD:与GET相同的响应,是只要求响应的表头信息
(3)POST:发送数据给服务器处理,数据包含在HTTP信息正文中
(4)PUT:上传文件
(5)DELETE:删除文件
(6)TRACE:追踪所收到的请求
(7)OPTIONS:返回服务器所支持的HTTP请求的方法
(8)CONNECT:将HTTP请求的连接转换成透明的TCP/IP通道
HTTP响应的格式
服务器在处理完客户端所提出的HTTP请求后,会发送下列响应
(1)第一行是状态码
(2)第二行开始是其他信息
HTTP响应拆分攻击
HTTP响应拆分攻击是由于黑客发送一个经过设计的HTTP请求给服务器,但是目标用户收到的却是两个HTTP响应。第一个HTTP响应并不重要,黑客所在意的是目标用户收到的第二个HTTP响应。第二个HTTP响应是由黑客编写的,并不是来自服务器的真正响应。
可能遭受HTTP响应拆分攻击的函数包括以下几个:
header();
setcookie();
session_id();
setrawcookie();
HTTP响应拆分攻击通常发生在如下两个地方:
(1)Location响应表头:将使用者的数据写入重定向的URL地址内
(2)Set-Cookie响应表头:将使用者的数据写入cookie内
注:Location响应表头用来跳转目前浏览的地址。
攻击实例说明:跳转地址
例如:jump.php
<?php
if($_GET["login"])
{
header("Location:http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]);
}
?>
//这是在单击[登陆]按钮后,就重新执行jump.php文件
$_SERVER["HTTP_HOST"]变量的值等于:localhost
$_SERVER["PHP_SELF"]变量的值等于:/jump.php
attack.php:
<?php
header("Location:"."http://localhost/jump.php/%0d%0aLocation:%20http://baidu.com/?login=1");
?>
当黑客使用attack.php文件来执行HTTP响应拆分攻击时,$_SERVER["HTTP_SELF"]变量的值会等于:
/jump.php/ Location: http://baidu.com/
所以$_SERVER["PHP_SELF"]被插入了HTTP响应拆分的程序代码,这个程序代码将地址跳转到[百度]首页。
当执行attack.php文件后,就会跳转到百度首页去
防范的方法
HTTP响应拆分攻击是因为目标用户在HTTP请求中被插入了换行字符,以及加上了Location或Set-Cookie等响应表头来设置地址或cookie值。
所以防范的方法就是将header函数内的参数去掉换行字符CR/LF或是"\r\n"。
例如:
<?php
if($_GET["login"])
{
header("Location: http://".$SERVER["HTTP_HOST"].strtr($SERVER["HTTP_SELF"],array("\r"=>"","\n"=>"")));
}
?>
注:strtr函数介绍:
string strtr(string str, array replace_pairs)
//str是要转换的字符串,replace_pairs是要转换字符的数组
1.将session.use_only_cookies设置为1
例如:
<?php
//将session.use_only_cookies设置为1
int_set("session.use_only_cookies", 1);
//启动Session
session_start();
?>
// 将session.use_only_cookies设置为1,这表明不使用cookie以外的方法来存放session_id,这可以避免session固定攻击
2.使用最新版的PHP
//在最新版的PHP中,已经不允许在HTTP表头内出现换行字符。因此,将你的PHP更新到最新版本,就可以避免手动将换行字符"\r\n"转换为空字符串的问题,当然就可以避免HTTP响应拆分攻击。
3.隐藏HTTP响应表头
//如果不想要显示服务器信息的Server响应表头,也可以打开下列文件:
C:\AppServ\Apache2.2\conf\httpd.conf
进行修改
将ServerTokens设置为Prod
如果不想显示服务器信息的X-Powered-By表头,可以打开下列文件:
C:\Windows\php.ini
进行修改
将expose_php设置为Off
重启Apache即可完成
HTTP Response Spliting 防范策略研究的更多相关文章
- CSRF防范策略研究
目录 0x1:检查网页的来源 0x2:检查内置的隐藏变量 0x3:用POST不用GET 检查网页的来源应该怎么做呢?首先我们应该检查$_SERVER[“HTTP_REFERER”]的值与来源网页的网址 ...
- sip协议注册时response值的计算方法
sip注册时有四个步骤, 1.客户端向服务端发送不带Authorization字段的注册请求 2.服务端回401,在回复消息头中带WWW_Authorization 3.客户端向服务端发送带Autho ...
- 来自内部的XSS攻击的防范
来自内部的XSS攻击的防范 引入:前面我们分2篇文章分别探讨了来自外部的XSS攻击和来自内部的XSS攻击,现在我们来专门探讨如何防范来自内部的XSS攻击. 实践:其实从 http://www.2cto ...
- SQL数据库注入防范 ASP.NET Globle警告
在项目中的Global.asax页面代码中加下面的代码,就可以有效的防范简单的SQL注入. protected void Application_BeginRequest(Object sender, ...
- XSS研究2-来自内部的XSS攻击的防范
引入: 前面我们分2篇文章分别探讨了来自外部的XSS攻击和来自内部的XSS攻击,现在我们来专门探讨如何防范来自内部的XSS攻击. 实践: http://www.cnblogs.com/crazy ...
- php防范
针对 PHP 的网站主要存在下面几种攻击方式: 1.命令注入(Command Injection) 2.eval 注入(Eval Injection) 3.客户端脚本攻击(Script Inserti ...
- CC攻击原理及防范方法和如何防范CC攻击
一. CC攻击的原理: CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃.CC主要是用来消耗服务器资源的,每个人都有这样的体验:当一个网页访问的人数 ...
- CC攻击原理及防范方法
一. CC攻击的原理: CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃.CC主要是用来消耗服务器资源的,每个人都有这样的体验:当一个网页访问的人数 ...
- XSS攻击原理、示例和防范措施
XSS攻击 XSS(Cross-Site Scripting,跨站脚本)攻击历史悠久,是危害范围非常广的攻击方式. Cross-Site Stripting的缩写本应该是CSS,但是为了避免和Casc ...
随机推荐
- Java内存溢出示例
按照java内存的结构,发生内存溢出的地方常在于堆.栈.方法区.直接内存. 一.堆溢出 堆溢出原因莫过于对象太多导致,看代码: /** * java 堆溢出 * VM Args:-Xms20m -Xm ...
- 关于 I/O Wait
I/O wait is a per-CPU performance metric showing time spent idle, when there are threads on the CPU ...
- Hadoop源代码分析
http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...
- 20160504-hibernate入门
关系型数据库与面向对象 模型不匹配(阻抗不匹配) Java面向对象语言,对象模型,其主要概念有:继承.关联.多态等:数据库是关系模型,其主要概念有:表.主键.外键等. 解决办法: 1使用JDBC手工转 ...
- Android调用系统相机以及自定义相机
0.综述 自定义相机,此处展示简单的相机功能,官方文档中还有相应关于视频拍摄的内容,此处不提 1.添加权限 <!--相机权限,数据存储--> <uses-permission and ...
- Java内存溢出的详细解决方案
本文介绍了Java内存溢出的详细解决方案.本文总结内存溢出主要有两种情况,而JVM经常调用垃圾回收器解决内存堆不足的问题,但是有时仍会有内存不足的错误.作者分析了JVM内存区域组成及JVM设置虚拟内存 ...
- warning
warning:statement has no effect [-Wunused-value]| 未能赋值,常见错误:m==1/for(i=0;i++;i<m)/
- Java 与 Python 的对比
最近在学习Python, 现在写一个Python程序和Java程序进行对一下比,以此展示各自不同的特点.这个程序的功能是计算([n, m) )之间的闰年. Python程序如下: def fu ...
- windows phone 操作 http异步返回结果
wp中为了提升用户体验,砍掉了http的同步操作,仅支持http异步请求,那么该如何及时处理异步操作返回的结果.纠结了很久,终于在技术群中好友的帮助下解决了问题,借助事件,将异步编程模型模式简单的处理 ...
- http数据包解析碰到gzip压缩格式的解压
其中在做http数据包临控时碰到gzip压缩格式,在网友发布的一些技术文章基础上,经过一段时间的研究.调试,终于解析成功.现将核心代码公布于此,希望能够和大家一起共同学习交流.注:以下代码需要依赖zl ...