微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 Spring Security 的 Content-Security-Policy 不起作用

如何解决通过 Spring Security 的 Content-Security-Policy 不起作用

今天我尝试用 spring security 和 spring boot 来实现 Content-Security-Policy。 以下是作为 spring 安全性一部分的配置。

        http
        .cors().and()
        .csrf().disable()
        .headers()
        .addHeaderWriter(new StaticHeadersWriter("Content-Security-Policy","script-src none; style-src none;"))
        .and()
        .sessionManagement()
        .sessionAuthenticationStrategy(sessionAuthenticationStrategy())
        .and()
        .addFilterBefore(keycloakPreAuthActionsFilter(),logoutFilter.class)
        .addFilterBefore(keycloakAuthenticationProcessingFilter(),logoutFilter.class)
        .addFilterafter(keycloakSecurityContextRequestFilter(),SecurityContextHolderAwareRequestFilter.class)
        .addFilterafter(keycloakAuthenticatedActionsRequestFilter(),KeycloakSecurityContextRequestFilter.class)
        .exceptionHandling().authenticationEntryPoint(authenticationEntryPoint())
        .and()
        .logout()
        .addlogoutHandler(keycloaklogoutHandler())
        .logoutUrl("/sso/logout").permitAll()
        .logoutSuccessUrl("/").and()
        .antMatcher("/**")
        .authorizeRequests()
        .antMatchers("/swagger-ui.html").permitAll()
        .antMatchers("/swagger-ui/**").permitAll()
        .antMatchers("/v3/api-docs/**").permitAll()
        .antMatchers("/token").permitAll()
        .antMatchers("/app/**").permitAll()
        .antMatchers("/ignore/**").permitAll()
        .anyRequest().authenticated();
    }

根据代码 Content-Security-Policy 属性添加到响应中,如下所示

HTTP/1.1 200
vary: Origin
vary: Access-Control-Request-Method
vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: http://localhost:4200
Access-Control-Allow-Credentials: true
Set-Cookie: JSESSIONID=DE7BF66B7B8EE56A863XXXXXXXXXXX; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache,no-store,max-age=0,must-revalidate
Pragma: no-cache
Expires: 0
x-frame-options: DENY
Content-Security-Policy: script-src none;style-src none;
Content-Type: application/json
transfer-encoding: chunked
Date: Thu,03 Jun 2021 20:46:05 GMT
Keep-Alive: timeout=60
Connection: keep-alive

虽然策略已正确添加到响应中,但我已给出 script-src none; style-src none; 但整个应用程序加载仍然没有任何问题,也没有出现任何错误

我什至尝试过:

.headers().contentSecurityPolicy("script-src 'none';")
.headers().contentSecurityPolicy("script-src 'self';")

尽管浏览器中有多个试验响应体的事件显示了 Content-Security-Policy 属性,但它没有按预期工作。

如果我遗漏了什么,请提出建议。

提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。