我正在尝试为 Java Web 应用程序配置内容安全策略。
我目前正在重写 Webapplication 的 init 方法,如下所示:
最终 CSPHeaderConfiguration cspHeaderConfiguration = getCspSettings().blocking().unsafeInline();
我知道这不是最好的选择,但是,当我修改现有应用程序时,我只想集成一个不太安全的策略,然后随着时间的推移进行升级,因为更严格的选项会导致其他问题。
这工作得很好,生成的 CSP 标头如下所示:
内容安全策略:默认 src '无'; script-src 'self' '不安全内联' '不安全评估'; style-src 'self' '不安全内联'; img-src '自我';连接-src'自我';字体-src'自我';清单 src '自我'; child-src '自我';基本 uri '自我';框架-src'自我'
这工作正常,除非我尝试使用 microsoft Office uri 方案打开文件。更具体地说,我使用带有 webdav 的 iframe 打开一个 Word 文档。
我像这样设置 iframe 的 url:
$('body').append('<iframe class="open-direct-link-iframe" style="display:none"></iframe>');
$iframe = $('.open-direct-link-iframe');
iframe.attr('src',ms-word:ofe|u|https://localhost:8443/app/api/webdav/Asset/A3A2523A7FB23E650D1FD89BD5246F10-184/5/Word-document.docx'
如果没有 csp,这也可以正常工作。但是,我收到以下错误消息:
Content-Security-Policy:页面的设置阻止加载 ms-word:ofe|u|https://localhost:8443/app/api/webdav/Asset/A3A2523A7FB23E650D1FD89BD5246F10-184/5/Microsoft Word- 处的资源document.docx(“frame-src”)。
我不知道如何正确配置 csp。如果我对 iframe 使用正常的 url,例如 https://localhost:8443/app/home,则效果很好,所以我确信问题出在 word:ofe|u|
我得到的解决方案是这样的:
cspHeaderConfiguration.add(CSPDirective.FRAME_SRC, (settings, cycle) -> "ms-word:");
我不知道这在安全性方面有多正确,但它至少允许使用 unsafeinline 激活 CSP,这比没有好。