欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【使用HTTP Headers 防御WEB攻击(一)】,下面是详细的分享!
使用HTTP Headers 防御WEB攻击(一)
得到如下头信息

如果你注意到,在响应信息中出现了一个X-Frame-Options
现在我们重新加载iframe,是得不到任何显示的

使用Chrome的开发者模式,我们来看看背后隐藏的秘密。

在Firefox中使用开发者模式

在Firefox中加载iframe.html页面,下面是控制台提示的错误信息

X-Frame-Options: SAMEORIGIN
有可能存在需要使用框架的情景。在此类情况下,就可以使用SAMEORIGIN值
打开home.php文件并添加如下代码
- header(“X-Frame-Options: sameorigin”);\
修改后代码如下
<?php
session_start();
session_regenerate_id();
header("X-Frame-Options: sameorigin");
if(!isset($_SESSION['admin_loggedin']))
{
header('Location: index.php');
}
if(isset($_GET['search']))
{
if(!empty($_GET['search']))
{
$text=$_GET['search'];
}
else
{
$text="No text Entered";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Admin Home</title>
<link rel="stylesheet" href="http://www.chinaz.com/program/2015/0512/styles.css">
</head>
<body>
<div id="home"><center>
</br><legend><text id=text><text id="text2">Welcome to Dashboard...</text>
</br></br> You are logged in as: <?php echo $_SESSION['admin_loggedin']; ?>
<a href="http://www.chinaz.com/program/2015/0512/logout.php">[logout]</a></text></legend></br>
<form action="" method="GET">
<div id="search">
<text id="text">Search Values</text><input type="text" name="search" id="textbox"></br></br>
<input type="submit" value="Search" name="Search" id="but"/>
<div id="error"><text id="text2">You Entered:</text><?php echo $text; ?></div>
</div>
</form></center>
</div>
</body>
</html>
从网页退出后重新登录,注意观察HTTP头信息

接下来,看看他们不同的工作原理
第一步加载相同的iframe.html,从下图中可以看出加载没有问题

我使用虚拟机打开Kali Linux并把文件放入其中,然后加载这个URL(http://localhost/sample/home.php)

当我们打开iframe.html文件时,由于跨域限制而不能正常加载

在浏览器的错误信息中可以看到

错误信息表明了,不允许进行跨域。
X-Frame-Options: ALLOW-FROM http://www.site.com
X-Frame-Options: ALLOW_FROM选项,表示该页面可以在指定来源的 frame 中展示,该选项只适用于IE,Firefox浏览器。
首先打开home.php文件添加如下代码
- header(“X-Frame-Options: ALLOW-FROM http://localhost”);
修改后代码如下:
<?php
session_start();
session_regenerate_id();
header("X-Frame-Options: ALLOW-FROM http://localhost");
if(!isset($_SESSION['admin_loggedin']))
{
header('Location: index.php');
}
if(isset($_GET['search']))
{
if(!empty($_GET['search']))
{
$text=$_GET['search'];
}
else
{
$text="No text Entered";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Admin Home</title>
<link rel="stylesheet" href="http://www.chinaz.com/program/2015/0512/styles.css">
</head>
<body>
<div id="home"><center>
</br><legend><text id=text><text id="text2">Welcome to Dashboard...</text>
</br></br> You are logged in as:
<?php echo $_SESSION['admin_loggedin']; ?>
<a href="http://www.chinaz.com/program/2015/0512/logout.php">[logout]</a></text></legend></br>
<form action="" method="GET">
<div id="search">
<text id="text">Search Values</text><input type="text" name="search" id="textbox">
</br></br>
<input type="submit" value="Search" name="Search" id="but"/>
<div id="error"><text id="text2">You Entered:</text><?php echo $text; ?></div>
</div>
</form></center>
</div>
</body>
</html>
退出网页,重新登录,观察HTTP头

如果我们现在尝试从同一个服务器加载iframe,网页不会出现任何错误

这是因为服务器允许加载http://localhost 这个地址
现在我们修改HTTP头,再加载
在home.php文件中添加
- header(“X-Frame-Options: ALLOW-FROM http://www.androidpentesting.com”);
修改后代码如下
<?php
session_start();
session_regenerate_id();
header("X-Frame-Options: ALLOW-FROM http://www.androidpentesting.com");
if(!isset($_SESSION['admin_loggedin']))
{
header('Location: index.php');
}
if(isset($_GET['search']))
{
if(!empty($_GET['search']))
{
$text=$_GET['search'];
}
else
{
$text="No text Entered";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Admin Home</title>
<link rel="stylesheet" href="http://www.chinaz.com/program/2015/0512/styles.css">
</head>
<body>
<div id="home"><center>
</br><legend><text id=text><text id="text2">Welcome to Dashboard...</text>
</br></br> You are logged in as: <?php echo $_SESSION['admin_loggedin']; ?>
<a href="http://www.chinaz.com/program/2015/0512/logout.php">[logout]</a></text></legend></br>
<form action="" method="GET">
<div id="search">
<text id="text">Search Values</text><input type="text" name="search" id="textbox"></br></br>
<input type="submit" value="Search" name="Search" id="but"/>
<div id="error"><text id="text2">You Entered:</text><?php echo $text; ?></div>
</div>
</form></center>
</div>
</body>
</html>
以下为抓包获取的HTTP头信息

刷新之前的页面,不会加载iframe了

以下为返回的错误信息

很明显http://localhost 是没有获取许可的
总结
在本文中,介绍了使用HTTP响应头来防止Web攻击。在下一篇文章中会继续介绍其他HTTP响应头在Web攻击中的应用。
延伸阅读:
- 使用HTTP Headers 防御WEB攻击(二)
- 使用HTTP Headers防御WEB攻击(三)
以上所分享的是关于使用HTTP Headers 防御WEB攻击(一),下面是编辑为你推荐的有价值的用户互动:
相关问题:HttpWebRequest.Headers.Add出错 指定的值含有无效...
答:header里不是所有字符都可以放的, 如果低字节为 01111111 则是被留作控制字节. 不允许低字节为01111111的字符放入header, 在中文里有少数字 比如 布, 合, 板 等字都最后一个字节是01111111, 这些字不能进入header. 其他语言也有这类字符,所以最... >>详细
相关问题:java web中获取头信息response.getLastHeader和res...
答:http://www.blogjava.net/stevenjohn/archive/2012/09/26/388603.html 上面介绍的很详细,看能不能帮到你。 >>详细
相关问题:什么是HTTP Headers
答:第一行被称为“Request Line” 它描述的是这个请求的基本信息,剩下的就是HTTP headers了。 请求完成之后,你的浏览器可能会收到如下的HTTP响应: HTTP/1.x 200 OK Transfer-Encoding: chunked Date: Sat, 28 Nov 2009 04:36:25 GMT Server: LiteS... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
