每个页面使用 CSP 规则

问题描述 投票:0回答:2

按照 https://nightlies.apache.org/wicket/guide/9.x/single.html#_content_security_policy_csp 中的描述,所有 CSP 规则均通过应用程序设置(类

ContentSecurityPolicySettings
)进行管理。这意味着无法动态地将其他规则动态添加到内容安全设置类。例如,如果 Wicket 应用程序中的特定页面想要将其自己的特定 URL 添加到白名单中,则必须在应用程序的初始化阶段完成此操作。 有没有办法向每个组件或页面的 CSP 指令(类
CSPHeaderConfiguration
)列表贡献或添加规则? 这样做的首选方式是什么? 谢谢你。

wicket content-security-policy
2个回答
0
投票

您可以查找CSPHeaderConfiguration并修改它:

WebApplication.get().getCspSettings().getConfiguration().get(...).add(key, value)

设置是动态评估的,因此您可以随时添加/删除。


0
投票

从文档中不清楚您可以使用哪个 Wicket 版本,但您可以使用

ContentSecurityPolicySettings.setProtectedFilter(...)
来排除页面设置全局 CSP。

修改 Wicket Web 应用程序类的

init()

@Override
protected void init() {
    super.init();

    getCspSettings().setProtectedFilter(requestHandler ->
            requestHandler instanceof RenderPageRequestHandler
                    && !PageWithOwnContentSecurityPolicy.class.equals(
                    ((RenderPageRequestHandler) requestHandler).getPageClass()));
}

然后,您可以通过在页面类中覆盖

Content-Security-Policy
 来添加 
WebPage.setHeaders(...)
标头。

© www.soinside.com 2019 - 2024. All rights reserved.