【问题标题】:Apache CSP settingApache CSP 设置
【发布时间】:2021-05-28 17:30:17
【问题描述】:

我有一个 apache 2.4,就像反向代理一样。在将用户代理到目标服务器之前,我使用简单的表单登录对用户进行身份验证。

登录页面很简单:

<!doctype html>
<html lang="it">
<head><title>AUTENTICAZIONE</title>

</head>
<body>

<script type="text/javascript">
</script>

<form method="POST" action="/dologin2.html">
  Username: <input type="text" name="httpd_username" value="" />
  Password: <input type="password" name="httpd_password" value="" />
  <input type="submit" name="login" value="Login" />
  <input type="hidden" name="httpd_location" value="https://sgsvrsiimws11lx.sistemi.group/primoacc/sigma/app" />
</form>
</body>
</html>

我在这个页面上遇到了 Firefox 和 chrome 的问题:

拒绝执行内联脚本,因为它违反了以下内容 内容安全策略指令:“default-src 'self'”。无论是 'unsafe-inline' 关键字,一个哈希 ('sha256-AbpHGcgLb+kRsJGnwFEktk7uzpZOCcBY74+YBdrKVGs='),或随机数 ('nonce-...') 是启用内联执行所必需的。另请注意 'script-src' 没有明确设置,所以 'default-src' 被用作 后备。

在我的 httpd.conf 中我已经设置了这个:

标头集 Content-Security-Policy "frame-ancestors 'unsafe-inline' '自我' sgsvrsiimws11lx.sistemi.group;"

我已经设置了它,因为后端的一些角度对象没有加载。

我尝试了很多方式设置 Content-Security-Policy,但登录页面中的 javascript 总是出现错误。

即使我有那个错误我也可以用chrome登录,用firefox没有。

如何在 apache 中正确设置 Content-Security-Policy 标头以与我的登录页面正常工作?

谢谢

【问题讨论】:

    标签: apache google-chrome firefox content-security-policy


    【解决方案1】:

    Header set Content-Security-Policy "frame-ancestors 'unsafe-inline' 'self' sgsvrsiimws11lx.sistemi.group;" 不限制内联脚本的执行。
    并且您可以删除 'unsafe-inline' 令牌,因为 frame-ancestors 指令不支持它。

    看起来您的“目标服务器”发送了一个登录页面,其中包含具有 default-src 'self' 规则的自己的内容安全策略。

    在开发工具中检查您在浏览器中真正拥有的 CSP 标头,here 是教程。
    如果您的“目标服务器”发布了自己的 CSP,则必须将 'unsafe-inline' 添加到其中,而不是添加到反向代理配置中。 'unsafe-inline' 令牌应插入到 script-src 指令中(如果不使用 script-src,则应插入 default-src)。

    注意:我希望您知道'unsafe-inline' 会降低CSP 保护的能力。您可以使用 'nonce-value''sha256-AbpHGcgLb+kRsJGnwFEktk7uzpZOCcBY74+YBdrKVGs='(取自 Chrome 的警告)来安全地允许内联脚本。

    【讨论】:

    • 感谢您的回复。登录页面位于 apache 文档根目录而不是目标服务器上。我之前在目标服务器上出现过这个错误,因为之前使用登录名进行身份验证。
    • 看看你在浏览器中有哪个CSP。 default-src 'self' 发布在某处,可能在 .htaccess 中。或者您的登录页面中有第三方 iframe?
    • 我正在为我的配置和反向代理使用包含文件,我发现在 httpd.conf 中有 default-src 'self' 并且我在浏览器中检查了调试模式login.html 带有 CSP 标头 default-src 'self'。现在如何覆盖单个登录页面的 httpd.conf 设置?或者我如何更改 httpd.conf 中的 CSP 以允许 javascript?谢谢!
    • 奇怪的是,我在反向代理中检索的资源带有我在包含文件中设置的 CSP 标头......所以后端中的所有资源都通过反向代理具有我在包含文件中设置的 CSP 标头,位于反向代理上的 login.html 使用 httpd.conf 配置...
    • 要允许内联脚本,您必须使用default-src 'self' 'unsafe-inline'default-src 'self'; script-src 'self' 'unsafe-inline';Header set replacing 任何具有此名称的先前标头,因此只有最后一个在起作用。要获得一些逻辑,您可以使用Header setifempty Content-Security-Policy 或使用Header always set。在最后一种情况下,您将同时发布并不总是合适的 CSP 标头。
    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2020-10-13
    • 2023-03-20
    • 2021-04-01
    • 2012-06-30
    相关资源
    最近更新 更多