首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何优雅的处理CSP问题

如何优雅的处理CSP问题

原创
作者头像
西门呀在吹雪
修改2021-10-13 18:05:10
8.2K1
修改2021-10-13 18:05:10
举报
文章被收录于专栏:架构之巅架构之巅

内容安全策略(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);
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常用CSP限制项
  • 常用配置含义
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档