如何设置Http头X-XSS-Protection

32

我尝试过把这个代码放进来:

   <meta http-equiv="X-XSS-Protection" content="0">

我正在尝试在<head>标签中执行代码,但一直没有成功。我想要解决IE浏览器限制跨站点脚本的问题。


3
尝试将其作为HTTP标头发送,也许可以? - Christian Joudrey
我该怎么做?抱歉,我对设置头部还不熟悉。 - Aly
6个回答

46

我怀疑它只作为元标记(meta tag)行不通。你可能需要告诉你的Web服务器将其发送为真正的头部(header)。

在PHP中,您可以这样做:

header("X-XSS-Protection: 0");
在ASP.net中:
Response.AppendHeader("X-XSS-Protection","0")
在Apache的配置文件中:
Header set  X-XSS-Protection  0

在IIS中,属性中有一个额外标头的部分。通常已经设置了“X-Powered-By: ASP.NET”;您只需将“X-XSS-Protection: 0”添加到同一位置即可。


1
正确的,它不支持作为HTTP头部。 - EricLaw
我已经在Coldfusion中尝试过这个方法:<cfheader name="X-XSS-Protection" value="0"> 但是它对我没有起作用。你有关于Coldfusion的任何想法吗? - Adil Malik
你如何在ASP Classic中设置这个头部? - Hernaldo Gonzalez
@cHao,我正在使用ASP Web表单,我应该在哪里添加X-XSS-Protection - Sachith Wickramaarachchi
@Sachith:以前,你可以在IIS站点的属性中设置它...如果我没记错的话,有一个内容设置选项卡。也许还有一种方法可以在web.config中实现,但我不知道。如果你想的话,从编码上来说,你可能可以直接在页面的Load处理程序中添加它。 - cHao
显示剩余3条评论

24

如果您正在使用.Net MVC,您可以通过Web.Config中的customHeaders进行配置。

要添加这些标头,请转到httpprotocol节点,并将这些标头添加到customHeaders节点内部。

<httpprotocol> 
    <customheaders> 
        <remove name="X-Powered-By"> 
           <add name="X-XSS-Protection" value="1; mode=block"></add>
        </remove>
    </customheaders> 
</httpprotocol>

我强烈推荐这个链接,它讲解了如何在ASP.NET MVC中配置安全的IIS响应标头: http://insiderattack.blogspot.com/2014/04/configuring-secure-iis-response-headers.html


8
标签关闭有误,您需要将这两行代码放在customheaders标签内。 <remove name="X-Powered-By" /> <add name="X-XSS-Protection" value="1; mode=block" /> - Shady Mohamed Sherif
@shadyshrif,代码中的标签关闭是正确的。看一下:</add></remove> - equiman
@mahmoud-samy请停止错误地编辑此答案。自动关闭标签不是解决方案,您需要在添加之前关闭删除标签,这是错误的。请查看我发布的链接。您是否测试过您尝试编辑的解决方案? - equiman
@Equiman 我在尝试了现有的答案后进行了更改。建议的更改现在实际上正在生产中运行。 - Mahmoud Samy
@mahmoud-samy 我也是,正在生产环境上运行。如果有其他备选答案,请将其添加为评论或另一个答案。 - equiman
3
暗黑警长建议的更改是正确的,否则会显示错误。 - Ashutosh B Bodake

5

在Apache中,您需要编辑配置文件,该文件可能是:

/etc/apache2/apache2.conf

/etc/apache2/httpd.conf

在文件末尾添加以下行以启用HTTP标头XSS保护:

<IfModule mod_headers.c>
    Header set X-XSS-Protection: "1; mode=block"
</IfModule>

注意:如果mod_headers是独立于主要的Apache核心(未编译进入Apache)的外部模块,那么您应该使用.so而不是.c——即:<IfModule mod_headers.so> 之后,保存更改,并使用以下命令重新启动 Apache:
sudo service apache2 restart
或者
sudo service httpd restart
希望这可以帮到您! :)

我知道这是很久以前的事情了,但我在搜索时遇到了它,我认为如果您将其放在 .htaccess 文件中,您没有在“Protection”后面放置“:”,对吗? - GµårÐïåñ

3
ASP Classic 中,可以使用以下标签实现此功能:
<% Response.AddHeader "X-XSS-Protection", "1" %>

我正在使用ASP Web Forms,我应该在哪里添加这个? - Sachith Wickramaarachchi

2
在某些情况下,如果您使用.htaccess,则需要使用双引号:
Header set x-xss-protection "1; mode=block"

0
# Turn on IE8-IE9 XSS prevention tools
Header set X-XSS-Protection "1; mode=block"

这个头部信息只适用于Internet Explorer 8和9,它可以打开IE 8和IE 9中的跨站脚本保护功能,该功能默认情况下是关闭的,因为它可能会破坏一些网站。要打开XSS过滤器,请使用头部X-XSS-Protection“1; mode=block”。如果您希望防止此过滤器在您的网站上被打开,请将头部值设置为“0”;

http://stopmalvertising.com/security/securing-your-website-with-.htaccess/.htaccess-http-headers.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接