前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >防XSS的利器,什么是内容安全策略(CSP)?

防XSS的利器,什么是内容安全策略(CSP)?

作者头像
房东的狗丶
发布2023-02-17 14:58:04
1.8K0
发布2023-02-17 14:58:04
举报
文章被收录于专栏:友人a的笔记丶友人a的笔记丶

内容安全策略(CSP)

1.什么是CSP

内容安全策略(CSP),是一种安全策略,其原理是当浏览器请求某一个网站时,告诉该浏览器申明文件可以执行,什么不可以执行。CSP是专门解决XSS攻击而生的神器。 CSP的引入会使得我们的引入扩展程序更加安全,并且可以由开发者指定可以加载扩展程序的类型,避免恶意的脚本在浏览器中执行,造成信息泄露问题。

CSP是防XSS的利器,可以把其理解为白名单,开发者通过设置CSP的内容,来规定浏览器可以加载的资源,CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。

2.CSP分类

2.1 Content-Security-Policy

配置好并启用后,不符合CSP的外部资源就会被阻止加载。

2.2 Content-Security-Policy-Report-Only

表示不执行限制选项,只是记录违反限制的行为。它必须与resport-uri选项配合使用

3.CSP使用

3.1 在HTTP Header上使用(首选)
代码语言:javascript
复制
"Content-Security-Policy":策略
"Content-Security-Policy-Only":策略
3.2 在HTML上使用

Meta标签与HTTP头只是形式不同而已,但是表示的作用都是一致的,如果HTTP头与Meta定义同时存在,则优先采用HTTP中的定义 如果用户浏览器已经为当前文档执行了一个CSP的策略,则会跳过Meta标签的定义。如果Meta标签缺少content属性的时候也同样会跳过。

4.CSP策略

代码语言:javascript
复制
# 限制所有的外部资源,只能从当前域中加载。
Content-Security-policy:default-src "self"
# default-src是csp指令,多个指令之间使用;来隔离,多个指令值之间使用空格来分离。
Content-Security-policy:default-src https://host1.com https://host2.com; frame-src "none"; object-src "none"
# 错误写法,这样写第二个script-src指令将会被忽略
Content-Security-Policy: script-src https://host1.com; script-src https://host2.com
# 正确写法
Content-Security-Policy: script-src https://host1.com https://host2.com
# report-uri指令表示浏览器发送JSON格式的拦截报告到某一个地址。
Content-Security-Policy: default-src "self"; report-uri /my_amazing_csp_report_parser; 

5.CSP指令

5.1 常用的CSP指令

以下按照 指令 指令示例(指令、指令值)进行编排:

  • default-src, “self” “cdn.guangzhul.com”, 默认加载策略
  • script-src, “self” “js.guangzhul.com” ,对javascript的加载策略
  • style-src, “self” “css.guangzhul.com” ,对样式的加载策略
  • img-src, “self” “img.guangzhul.com” ,对图片的加载策略
  • content-src ,“self” ,对ajax,websocket请求的加载策略。不允许的情况下浏览器会模拟一个状态为400的相应
  • font-src ,“font.cdn.guangzhul.com” ,针对webFont的加载策略
  • object-src, “self” ,指针或标签引入flash等插件的加载策略
  • media-src, media.cdn.guangzhul.com ,针对媒体引入的HTML多媒体的加载策略
  • frame-src ,“self” ,针对frame的加载策略
  • report-uri, /report-uri ,告诉浏览器如果请求的资源不被策略允许时,往哪个地址提交日志信息。 特别的:如果想让浏览器只汇报日志,不阻止任何内容,可以改用 Content-Security-Policy-Report-Only 头
5.2 其他的CSP指令
  • sandbox 设置沙盒环境
  • child-src 主要防御 frame,iframe
  • form-action 主要防御 form
  • frame-ancestors 主要防御 frame,iframe,object,embed,applet
  • plugin-types 主要防御 object,embed,applet
5.3 CSP指令值

以下按照 指令值  指令值示例(指令、指令值)进行编排:

  • * img-src * 允许任何内容
  • “none” img-src “none” 不允许任何内容
  • “self” img-src “self” 允许来自相同的来源的内容(相同的协议,域名和端口)
  • data: img-src data: 允许data协议(如base64编码的图片)
  • www.guangzhul.com img-src img.guangzhul.com 允许加载指定域名下的资源
  • *.guangzhulcom img-src: *.guangzhul.com 允许加载guangzhul.com任何子域下面的资源
  • “unsafe-inline” script-src “unsafe-inline” 允许加载inline的资源 例如常见的 style 属性,onclick,inline js 和 inline css 等等
  • “unsafe-eval” script-src “unsafe-eval” 允许加载动态js代码,例如eval()

参考文章

https://blog.csdn.net/weixin_47450807/article/details/123224654

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内容安全策略(CSP)
    • 1.什么是CSP
      • 2.CSP分类
        • 2.1 Content-Security-Policy
        • 2.2 Content-Security-Policy-Report-Only
      • 3.CSP使用
        • 3.1 在HTTP Header上使用(首选)
        • 3.2 在HTML上使用
      • 4.CSP策略
        • 5.CSP指令
          • 5.1 常用的CSP指令
          • 5.2 其他的CSP指令
          • 5.3 CSP指令值
      相关产品与服务
      应用安全开发
      应用安全开发(Application Security Development,下文中也叫 Xcheck)为您提供优质的代码分析服务。Xcheck 凭借优秀的算法和工程实现,能在极低的误报率和漏报率前提下,以极快的速度发现代码中存在的安全漏洞。Xcheck 采用私有化部署的模式,所以产品使用的整个生命周期,源码都不会流出公司网络,杜绝源码泄露风险。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档