将值附加到Apache的SetEnvIfExpr中的环境变量

时间:2018-08-27 12:25:51

标签: apache

我的.htaccess中有这个

SetEnvIfExpr "env('USE_CSP') == 1"\
    "CSP_SCRIPT_SRC='self'"
Header always set Content-Security-Policy \
    "default-src 'self' ;\
    script-scr %{CSP_SCRIPT_SRC}e ;"

现在,当设置了环境变量data:时,我还希望在允许的CSP协议列表中也有POLYMER_CSP,所以我有:

SetEnvIfExpr "env('USE_CSP') == 1"\
    "CSP_SCRIPT_SRC='self'"
SetEnvIfExpr "env('POLYMER_CSP') == 1"\
    "CSP_SCRIPT_SRC='self' data:"
Header always set Content-Security-Policy \
    "default-src 'self' ;\
    script-scr %{CSP_SCRIPT_SRC}e ;"

但这意味着当我更改CSP_SCRIPT_SRC的第一个定义时,我必须更改第二个定义:

SetEnvIfExpr "env('USE_CSP') == 1"\
    "CSP_SCRIPT_SRC='self' https://*.my.web"
SetEnvIfExpr "env('POLYMER_CSP') == 1"\
    "CSP_SCRIPT_SRC='self' data:" # Here, the https://*.my.web has been forgotten
Header always set Content-Security-Policy \
    "default-src 'self' ;\
    script-scr %{CSP_SCRIPT_SRC}e ;"

所以这很难维护。因此,我想将data:附加到CSP_SCRIPT_SRC的现有值上,但是不能使用%{CSP_SCRIPT_SRC}%{ENV:CSP_SCRIPT_SRC}

Apache documentation for SetEnvIf

  

第三个("ENV=value")会将变量设置为value给定的文字值。 [...] Apache httpd将识别值中出现的$ 1 .. $ 9并用正则表达式的括号子表达式替换

所以我发现的唯一方法是:

SetEnvIfExpr "env('USE_CSP') == 1"\
    "CSP_SCRIPT_SRC='self' https://*.my.web"
SetEnvIfExpr "env('POLYMER_CSP') == 1 && env('CSP_SCRIPT_SRC') =~ /(^.*$)/"\
    "CSP_SCRIPT_SRC=$0 data:" 
Header always set Content-Security-Policy \
    "default-src 'self' ;\
    script-scr %{CSP_SCRIPT_SRC}e ;"

但是在SetEnvIfExpr中是否有一种“更漂亮”的方法来实现这种价值串联?

0 个答案:

没有答案