是否可以在nginx配置中的add_header中添加换行符?

时间:2018-04-25 09:38:58

标签: nginx

我已经搜索了这个主题,并且无法在nginx配置中找到任何内容,如果这是" ok"不是吗?

除了搞乱vim中的语法高亮显示外,这似乎工作正常:

add_header Content-Security-Policy "default-src 'self' *.google-analytics.com;
                                     object-src 'none';
                                     report-uri /csp-report;";

但它实际上有效吗?我依靠浏览器了解CSP中的换行符,还是nginx在服务之前将其渲染成一行? Fiddler似乎把它显示为一行,但我再也不知道nginx是否正在服务它,或者如果Fiddler正在解释它。

(这显然是我真正的CSP的一个非常简化的版本,这当然非常长,我认为将它分成多行是有益于我的理智!)

2 个答案:

答案 0 :(得分:14)

您可以像这样使用变量嵌套,最后仍会创建一个内衬:

set $SCRIPT "script-src 'self'";
set $SCRIPT "${SCRIPT} https://www.a.com"; # comment each line if you like
set $SCRIPT "${SCRIPT} https://b.com";
set $STYLE "style-src 'self'";
set $STYLE "${STYLE} https://a.com";
set $IMG "img-src 'self' data:";
set $IMG "${IMG} https://a.com";
set $IMG "${IMG} https://www.b.com";
set $FONT "font-src 'self' data:";
set $FONT "${FONT} https://a.com";
set $DEFAULT "default-src 'self'";
set $CONNECT "connect-src 'self'";
set $CONNECT "${CONNECT} https://www.a.com";
set $CONNECT "${CONNECT} https://www.b.com";
set $FRAME "frame-src 'self'";
set $FRAME "${FRAME} https://a.com";
set $FRAME "${FRAME} https://b.com";
add_header Content-Security-Policy "${SCRIPT}; ${STYLE}; ${IMG}; ${FONT}; ${DEFAULT}; ${CONNECT}; ${FRAME}";

答案 1 :(得分:4)

不幸的是,nginx按字面意思处理引号之间的空格,因此只要您使用空格或制表符开头每个新行,标题就会保持有效。

但是,可以创建无效的标头。例如,这会产生无效的标题:

add_header Content-Security-Policy "default-src 'self' *.google-analytics.com;
object-src 'none';
report-uri /csp-report;";

RFC 7230中不推荐支持拆分标题行:

来自RFC 7230 section 3.2.4

  

历史上,HTTP头字段值可以扩展到
  通过在每个额外线之前具有至少一个空间的多条线   或水平标签(obs-fold)。该规范不赞成这样的   折叠除了消息/ http媒体类型

之外的行折叠

最安全的解决方案是接受配置文件中的某些行可能比您想要的长得多。