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

如何优雅的处理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);
    }
}

原文地址:https://cloud.tencent.com/developer/article/1888626

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

相关推荐