【问题标题】:HTML5 meta tags: if you remove a security meta tag, does the browser update accordingly?HTML5 元标记:如果您删除安全元标记,浏览器是否会相应更新?
【发布时间】:2017-07-10 12:24:46
【问题描述】:

如果我有一个 CSP 元标记(而不是使用 HTTP 标头),如下所示:

<meta http-equiv="Content-Security-Policy" content="default-src https://cdn.example.net; child-src 'none'; object-src 'none'">

...然后我进入开发人员工具并删除该节点,浏览器是否会表现得好像从未提供过它,或者无论如何添加它的事实是否会持续存在?

我问是因为我想知道是否应该使用 HTTP 标头(无法修改),或者仅使用此元标记是否安全。

【问题讨论】:

  • HTTP标头不能修改是什么意思?
  • @KayakinKoder 特别是在您加载页面后。当您检查网络选项卡时,请求标头是只读的。
  • 啊,所以你想知道安全方面,例如检查页面并编辑 CSP 的用户?如果用户这样做,他们显然是在尝试做一些恶意的事情,你可能不会在乎他们是否让自己容易受到 XSS 的影响 :) 黑帽黑客拥有完全定制的浏览器,可以编辑任何浏览器-侧面,所以这不是我担心的事情。
  • 其实我想自己添加标题,但我知道我也可以添加元标记。元标记更容易添加,因为它不需要服务器端代码来向响应编写器添加标头,但我只是想知道使用元标记是否安全。
  • 有道理。当您不想或不能使用服务器端代码 imo 时,更好的选择是使用您的服务器本身来添加标头。当然,最初在服务器上添加标头比插入简单的元标记要困难一些,但特别是如果您使用 Google 提出的严格 CSP,您的 CSP 永远不会真正改变。如果您碰巧使用 Apache,这里有一个如何创建标头以及如何生成随机数的示例:stackoverflow.com/questions/43948335/…

标签: html security


【解决方案1】:

我绝对不会把它放在 html 中。即使你告诉浏览器永远不要缓存东西 X,有些人最终会搞砸并缓存东西 X 以“有帮助”。假设您希望将来将 CDN 从 example.net 更改为 differentcdn.com;如果任何浏览器缓存了您的 CSP,您的网站将被破坏。或者更糟糕的是,您不小心将 CSP CDN 部分编辑为“exEmple.net”并进行部署;浏览器缓存这个,你的网站完全坏了。我们已经让一些用户浏览器缓存了 302(临时..)重定向,这些重定向被笨拙地放在 .htaccess 文件中,而不是完全由服务器控制的 http.conf,真是一场噩梦;我不相信浏览器会在任何会破坏我们应用程序的极其重要的事情上做他们应该做的事情。

据我所知,标题永远不会被缓存。

最后,我建议查看 Google 严格的 CSP 3:https://csp.withgoogle.com/docs/strict-csp.html

【讨论】:

    【解决方案2】:

    看起来这个Content-Security-Policy 元标记是“受保护的”,即即使通过开发工具将其删除,浏览器也会记住它的值。

    您可以通过这个简单的示例简单地尝试一下: index.html

    <!DOCTYPE html>
    <html lang="en">
    
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="Content-Security-Policy" content="default-src self;">
    

    然后打开开发工具并输入:

    fetch('http://example.com')
    

    你会看到类似的东西:

    VM345:1 Refused to connect to 'http://example.com/' because it violates the following Content Security Policy directive: "default-src self 'mocky.io'". Note that 'connect-src' was not explicitly set, so 'default-src' is used as a fallback.
    

    让我们尝试删除特定的元标记

    document.querySelector("[http-equiv='Content-Security-Policy']").remove()
    fetch('http://example.com')
    

    你仍然会看到同样的错误。

    我在 chrome 和 firefox 的最新版本中进行了尝试。也许一些鲜为人知的浏览器或较低版本会做出不同的反应。不幸的是,我找不到有关它的更多信息,但我没有看到任何不使用它的特殊原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-11
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 2011-06-14
      • 2013-01-18
      相关资源
      最近更新 更多