前端内容安全策略(csp)

摘要:
通过CSP协议,WEB处于安全运行的环境中。我们知道前端有一个著名的“同源策略”。简而言之,页面的资源只能从同一源服务器获得,不允许跨域访问。这可以防止页面被注入恶意代码并影响安全性,但这种策略是一把双刃剑。它阻止恶意代码,也限制了前端的灵活性。有没有一种方法不仅可以跨域获取资源,还可以防止恶意代码?

什么是CSP

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

有什么用?

我们知道前端有个很著名的”同源策略”,简而言之,就是说一个页面的资源只能从与之同源的服务器获取,而不允许跨域获取.这样可以避免页面被注入恶意代码,影响安全.但是这个策略是个双刃剑,挡住恶意代码的同时也限制了前端的灵活性,那有没有一种方法既可以让我们可以跨域获取资源,又能防止恶意代码呢?

答案是当然有了,这就是csp,通过csp我们可以制定一系列的策略,从而只允许我们页面向我们允许的域名发起跨域请求,而不符合我们策略的恶意攻击则被挡在门外.从而实现

需要说明的一点是,目前主流的浏览器都已支持csp.所以我们可以放心大胆的用了.

指令说明

指令就是csp中用来定义策略的基本单位,我们可以使用单个或者多个指令来组合作用,功能防护我们的网站.

以下是常用的指令说明:

指令名

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'

定义页面插件的过滤策略,如 <object>, <embed> 或者<applet>等元素

media-src

media.example.com

定义媒体的过滤策略,如 HTML6的 <audio>, <video>等元素

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()方法

示例

default-src 'self';   

只允许同源下的资源

script-src 'self';     

只允许同源下的js

script-src 'self' www.google-analytics.com ajax.googleapis.com;

允许同源以及两个地址下的js加载

default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';

多个资源时,后面的会覆盖前面的

服务器端配置

  • Apache服务

在VirtualHost的httpd.conf文件或者.htaccess文件中加入以下代码

Header set Content-Security-Policy "default-src 'self';"

  • Nginx

在 server {}对象块中添加如下代码

add_header Content-Security-Policy "default-src 'self';";

  • IIS 

web.config:中添加

<system.webServer>

  <httpProtocol>

    <customHeaders>

      <add name="Content-Security-Policy" value="default-src 'self';" />

    </customHeaders>

  </httpProtocol>

</system.webServer>

免责声明:文章转载自《前端内容安全策略(csp)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇前端播放m3u8格式视频[转]高性能网络编程中的线程模型下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HELM的安装与使用

说明: HELM的官方网站:https://helm.sh/,文档可以切换为中文 在Helm2中Tiller 主要用于在 Kubernetes 集群中管理各种应用发布的版本,在 Helm 3 中移除了 Tiller, 版本相关的数据直接存储在了 Kubernetes 中。所以在Helm中没有helm init的命令 以下为正文: 根据官网网站,ubun...

SpringBoot实现文件上传下载

前言 本篇文章主要介绍的是SpringBoot实现文件上传下载。 GitHub源码链接位于文章底部。 创建maven项目,在pom文件中添加依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <ja...

linux 服务器配置 ASF 云挂卡

关于社区打不开:https://github.com/zyfworks/AnotherSteamCommunityFix 下载asf:https://github.com/JustArchi/ArchiSteamFarm/releases 依赖包: ubuntu: sudo apt-get install libunwind8 libunwind8-dev...

配置github SSH公钥登录

git的安装见https://www.cnblogs.com/liliyang/p/9829931.html 配置git使用ssh密钥 git支持https和git两种传输协议,github分享链接时会有两种协议可选:  若git使用https协议,每次pull, push均提示要输入密码,使用git协议,然后使用ssh密钥对认证,即可实现免密   配...

deepfake 资源总结

  1. https://zhuanlan.zhihu.com/p/34042498   深度解密换脸应用Deepfake 2. 在 1 里面提到的PixelShuffle,具体见参考3: https://mathematica.stackexchange.com/questions/181587/how-to-define-a-pixelshuffle...

精品 IDEA 插件大汇总!值得收藏

轻松提高 Java 开发效率 俗话说,工欲善其事,必先利其器。想要提升编程开发效率,必须选择一款顺手的开发工具。 对于 Java 开发者,JetBrains IDEA 无疑是目前最主流的开发工具,既简单易用、又强大灵活,并且可以通过安装插件全副武装。 今天鱼皮汇总了 IDEA 实用插件,分享给大家,希望帮助大家大幅提高开发效率! 插件较多,建议大家先观看...