CodeQL 文档

缺少 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

点击查看 CodeQL 代码库中的查询

未指定 X-Frame-Options HTTP 标头的网站可能容易受到 UI 伪装攻击(“点击劫持”)。在这些攻击中,易受攻击的网站会在攻击者控制的网站上的框架中加载,该网站使用不透明或透明层来欺骗用户无意中点击易受攻击网站上的按钮或链接。

建议

X-Frame-Options HTTP 标头设置为 DENY,以指示 Web 浏览器阻止在框架中加载该网站的尝试。或者,如果在某些情况下需要框架,请指定 SAMEORIGINALLOW 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");
}

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私