使用HTTP Headers 防御WEB攻击(二)

2015-05-12 10:00 稿源:freebuf  0条评论

在前一篇文章《使用HTTP Headers防御WEB攻击(一)》中我们了解到如何使用X-Frame选项防御点击劫持攻击。在本文中我们将会讨论另外一个HTTP Header选项,X-XSS-Protection。和前一篇文章类似,我们会先看看漏洞网页然后再使用这个HTTP头选项来防御。

从源码分析

设置与前一篇文章类似,用户成功登录之后会出现一个控制台界面,这里可以进行搜索,如下代码即实现代码:

<?php
session_start();
session_regenerate_id();
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="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="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响应头信息中看到应用程序没有任何额外的保护机制。

HTTP/1.1 200 OK
Date: Sun, 12 Apr 2015 14:53:37 GMT
Server: Apache/2.2.29 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.8 PHP/5.6.2 mod_ssl/2.2.29 OpenSSL/0.9.8y DAV/2 mod_perl/2.0.8 Perl/v5.20.0
 
X-Powered-By: PHP/5.6.2
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=f94dc2ac2aa5763c636f9e75365102b5; path=/
Content-Length: 820
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

测试进行时

在搜索框执行一个简单的JavaScript脚本,看看是否成功执行

好吧,我承认这看起来似乎没有成功执行,那就打开控制台看看错误信息吧。

从控制台信息中可以看到谷歌Chrome阻止了这个脚本。另外,错误提示信息中指出服务器没有启用X-XSS-Protection或者Content-Security-Policy头。

我们可以通过启用X-XSS-Protection或者Content-Security-Policy头进行过滤。

使用如下代码禁用保护

  • header("X-XSS-Protection: 0");

将上面的代码添加进源码

<?php
session_start();
session_regenerate_id();
 
header("X-XSS-Protection: 0");
 
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="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="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>

有好的文章希望站长之家帮助分享推广,猛戳这里我要投稿

相关文章

相关热点

查看更多