【问题标题】:Modify Apache header using edit and perl regex使用 edit 和 perl regex 修改 Apache 标头
【发布时间】:2017-05-19 23:22:48
【问题描述】:

我在使用 perl 正则表达式时需要一些帮助。

我想修改我的 apache 网络服务器的 content-security-policy (csp) 标头。标题实际上已经由我的 nextcloud 实例设置,但我对其中的内容不满意。所以我决定修改(而不是替换)标题。 到目前为止,我尝试在我的 apache 配置中使用以下内容:

Header edit Content-Security-Policy ^default-src\s'self'* "default-scr 'self' 'test'"

到目前为止,一切都很好。不幸的是,这仅在我想替换我的 csp 的第一个条目时才有效,但我想要做的是更改第二个条目

default-src 'self'; script-src 'self' 'unsafe-eval' 'nonce-abc...'

应该变成

default-src 'self'; script-src 'self' 'unsafe-inline' 'nonce-abc...'

根据documentation我是使用perl风格的正则表达式。我不知道这些是如何工作的,尝试类似 vim 的语法并没有帮助。所以请帮我把命令弄好。非常感谢!

编辑: 为了提供更多信息,我的标题看起来像

content-security-policy: default-src 'self'; script-src 'self' 'unsafe-eval' 'nonce-SU5kR1FZUGU5UW9jY2toRFh6VGR5a0hGMTFCY3ltL2d4RkN1QlFKaXJzST06U0w4MUJkZVJ4eUZaV1gwUGNGMkZoZ3UwbUdacG5oblFnbnZZWmxzUHpKTT0='; style-src 'self' 'unsafe-inline'; frame-src *; img-src * data: blob:; font-src 'self' data:; media-src *; connect-src *

nonce 在每个连接上都会发生变化,因此对标头进行硬编码是行不通的。

【问题讨论】:

  • 您的问题没有 Perl 编程内容。相应地重新标记。
  • 谢谢,我不知道pcre标签,所以我一开始就放了perl。

标签: regex apache configuration pcre


【解决方案1】:

假设您的示例更改是正确的,而不是示例编辑行:

Header edit Content-Security-Policy "^(script-src.*? )'unsafe-eval'" "\1'unsafe-inline`"

【讨论】:

  • 感谢您的回复。不幸的是,它不起作用。将您的行更改为 Header edit Content-Security-Policy "^(default-src.*? )'unsafe-eval'" "\1'unsafe-inline"` 是否将结果更改为 1'unsafe-inline 'nonce-abc...'` 我不知道错误在哪里,但我调整了我的示例,也许我不清楚我的想要。
  • 我认为对第一组 \1 的反向引用没有通过。你可以试试两个反斜杠。
  • \1 添加另一个反斜杠没有帮助......但我找到了解决方案。因为我只有一个unsafe-eval(因此想替换所有出现的情况),所以我使用了Header edit Content-Security-Policy "(unsafe-eval)" "unsafe-inline"。它给出了预期的结果,但使站点无法使用。似乎 nextcloud 依赖于unsafe-eval
  • Apache 使用 $1 而不是 \1。我花了一些时间才弄清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
相关资源
最近更新 更多