У меня есть это в моем .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 ;"
Но это означает, что когда я изменяю 1-е определение CSP_SCRIPT_SRC
, тогда мне приходится менять 2-е:
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 для SetEnvIf
говорит
третий ("ENV=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
?