缺少 X-Frame-Options HTTP 标头¶
ID: cs/web/missing-x-frame-options
Kind: problem
Security severity: 7.5
Severity: error
Precision: high
Tags:
- security
- external/cwe/cwe-451
- external/cwe/cwe-829
Query suites:
- csharp-code-scanning.qls
- csharp-security-extended.qls
- csharp-security-and-quality.qls
未指定 X-Frame-Options
HTTP 标头的网站可能容易受到 UI 伪装攻击(“点击劫持”)。在这些攻击中,易受攻击的网站会在攻击者控制的网站上的框架中加载,该网站使用不透明或透明层来欺骗用户无意中点击易受攻击网站上的按钮或链接。
建议¶
将 X-Frame-Options
HTTP 标头设置为 DENY
,以指示 Web 浏览器阻止在框架中加载该网站的尝试。或者,如果在某些情况下需要框架,请指定 SAMEORIGIN
或 ALLOW FROM: ...
以将构建该网站框架的能力限制为来自相同来源或来自受信任域的允许白名单的页面。
对于 ASP.NET Web 应用程序,可以使用 <customHeaders>
标记在 Web.config
文件中指定标头,也可以使用 HttpResponse.AddHeader
方法在应用程序的源代码中指定标头。通常,更建议在 Web.config
文件中指定标头,以确保将其添加到所有请求中。如果要将其添加到源代码中,请确保将其无条件地添加到所有请求中。例如,在 global.asax
文件的 Application_BeginRequest
方法中添加标头。
示例¶
以下示例显示了如何在 ASP.NET 的 Web.config
文件中指定 X-Frame-Options
标头
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
</system.web>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
下一个示例显示了如何在 ASP.NET 应用程序的 global.asax
文件中指定 X-Frame-Options
标头
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("X-Frame-Options", "DENY");
}
参考资料¶
OWASP:点击劫持防御备忘单。
Mozilla:X-Frame-Options
常见弱点枚举:CWE-451。
常见弱点枚举:CWE-829。