Whittney He

清风自来,浅笑安然

  • 主页
所有文章 友链 关于我

Whittney He

清风自来,浅笑安然

  • 主页

CSP内容安全策略

2019-07-06

前言

从搜索如何预防xss脚本攻击,了解到CSP。

CSP全称Content Security Policy (内容安全策略),是为了页面内容安全而制定的一系列防护策略。通过CSP所约束的的规责指定可信的内容来源(这里的内容可以指脚本、图片、iframe、fton、style等等可能的远程的资源)。通过CSP协定,让WEB处于一个安全的运行环境中。

以下是常用的指令说明:

指令名 demo 说明
default-src ‘self’ cdn.example.com 默认策略,可以应用于js文件/图片/css/ajax请求等所有访问
script-src ‘self’ js.example.com 定义js文件的过滤策略
style-src ‘self’ css.example.com 定义css文件的过滤策略
img-src ‘self’ img.example.com 定义图片文件的过滤策略
connect-src ‘self’ 定义请求连接文件的过滤策略
font-src font.example.com 定义字体文件的过滤策略
object-src ‘self’ 定义页面插件的过滤策略,如 , 或者等元素
media-src media.example.com 定义媒体的过滤策略,如 HTML6的 , 等元素
frame-src ‘self’ 定义加载子frmae的策略
sandbox allow-forms allow-scripts 沙盒模式,会阻止页面弹窗/js执行等,你可以通过添加allow-forms allow-same-origin allow-scripts allow-popups, allow-modals, allow-orientation-lock, allow-pointer-lock, allow-presentation, allow-popups-to-escape-sandbox, and allow-top-navigation 策略来放开相应的操作
report-uri /some-report-uri

指令值

所有以-src结尾的指令都可以用一下的值来定义过滤规则,多个规则之间可以用空格来隔开

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

示例

1
<meta http-equiv="Content-Security-Policy" content="script-src 'self';">

注意:我们知道js的引入方式有3种,上面这种写法只能用于外链引入js文件,行内以及内嵌script标签的方式都会报错。

1
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';">

加上’unsafe-inline’,上面这种写法就3种引入方式都可以了。

允许特性的域名请求资源,这里以code.jquery.com为例

1
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline' code.jquery.com;">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline' code.jquery.com;">
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<title>Title</title>
</head>
<div >
<button class="test">测试</button>
</div>
<body>
<script>
console.log(11111111)
$('.test').on("click",function () {
alert('success')
})
</script>
</body>
</html>

其它资源如video都有相应的指令,只要按照要求写就可以了。

参考链接:https://www.cnblogs.com/heyuqing/p/6215761.html

赏

谢谢你请我吃糖果

  • 安全

扫一扫,分享到微信

微信分享二维码
前端Ajax请求超时处理
判断url中存在一个值并进行修改
© 2022 Whittney He
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链
  • 关于我

tag:

  • Adobe photoshop CC 2017
  • JS
  • 小程序
  • Typora
  • MYSQL
  • bootstrap
  • css
  • HTML+CSS+JS
  • jQuery
  • viewport
  • Vue.js
  • CSS3
  • Vue
  • CSS
  • h5
  • JS+jQuery
  • Clipboard.js
  • HTML+CSS+Jquery
  • 工具
  • 浏览器
  • css3
  • video
  • koa
  • ajax
  • cropper.js
  • 安全
  • vue.js
  • vue
  • js
  • javascript
  • echarts

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 友情链接1
  • 友情链接2
  • 友情链接3
  • 友情链接4
  • 友情链接5
  • 友情链接6
Whittney
我就是我,不一眼的烟火!*_*