如何优雅的处理CSP问题

内容安全策略(Content Security Policy下面简称CSP)是一种声明的安全机制,我们可以通过设置CSP来控制浏览器的一些行为,从而达到防止页面被攻击的目的。比如通过禁止内联的JavaScript脚本,来控制页面的脚本注入攻击。

CSP 的实质就是白名单制度,启用 CSP即开发者通过配置告诉客户端,哪些外部资源可以加载和执行,等同于对可使用资源设置白名单。具体的实现和执行全部由浏览器完成,开发者只需提供配置。

常用CSP限制项

  • script-src:外部脚本
  • style-src:样式表
  • img-src:图像
  • media-src:媒体文件(音频和视频)
  • font-src:字体文件
  • object-src:插件(比如 Flash)
  • child-src:框架
  • frame-ancestors:嵌入的外部资源(比如frame和iframe)
  • frame-src:控制iframe资源引入
  • connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource等)
  • worker-src:worker脚本
  • manifest-src:manifest 文件
  • base-uri:限制base的href
  • form-action:限制form的action
  • block-all-mixed-content:HTTPS 网页不得加载 HTTP 资源(浏览器已经认开启)
  • upgrade-insecure-requests:自动将网页上所有加载外部资源的 HTTP 链接换成 HTTPS 协议
  • plugin-types:限制可以使用的插件格式
  • sandBox:浏览器行为的限制,比如不能有弹出窗口等。

常用配置含义

  • *:允许任意地址的url,但是不包括 blob: filesystem: schemes.
  • 'none':所有地址的咨询都不允许加载.
  • 'self':同源策略,即允许同域名同端口下,同协议下的请求.
  • data::允许通过data来请求咨询 (比如用Base64 编码过的图片)..
  • domain.example.com:允许特性的域名请求资源.
  • *.example.com:允许从 example.com下的任意子域名加载资源.
  • https://example.com: 仅仅允许通过https协议来从指定域名下加载资源.
  • https::只允许通过https协议加载资源.
  • 'unsafe-inline':允许行内代码执行.
  • 'unsafe-eval':允许不安全的动态代码执行,比如 JavaScript的 eval()方法

java中如何优雅的实现csp的控制呢?

@Configuration
public class ProtectRequestFilter extends OncePerRequestFilter {


    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws servletexception, IOException {
        // 通过此过滤器,可以对请求的header的值进行判断
        response.setHeader("Content-Security-Policy", "default-src 'self';img-src * 'self' blob: data: ; font-src * data:;style-src * 'unsafe-inline';script-src 'self' ");//img-src 'self' blob: data: ;
        // report-uri /cspReports");
        response.setHeader("X-Content-Type-Options", "nosniff");
        response.setHeader("X-XSS-Protection", "1");
        filterChain.doFilter(request, response);
    }
}

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...