首页 > 其他分享 >HTTP安全响应头配置之Content-Security-Policy(csp)

HTTP安全响应头配置之Content-Security-Policy(csp)

时间:2023-09-22 21:33:36浏览次数:38  
标签:src HTTP 可以 Content Policy Security csp 资源 加载

什么是CSP

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

有什么用?

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

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

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

目的

csp是一些指令的集合,可以用来限制页面加载各种各样的资源。目前,IE浏览器只支持CSP的一部分,而且仅支持X-Content-Security-Policy header。 相比较而言,Chrome和Firefox则支持CSP的1.0版本,csp的1.1版本则还在开发中。通过恰当的配置csp,可以防止站点遭受很多类型的攻-击,譬如xss和UI补偿等相关问题。

csp总共有10种配置形式,每一种都可以用来限制站点何时加载和加载何种类型的资源。他们分别是:

default-src:这种形式默认设置为 script-src, object-src, style-src, img-src, media-src, frame-src, font-src和connect-src.如果上述设置一个都没有的话,user-agent就会被用来作为default-src的值。

script-src:这种形式也有两个附加的设置。

1、unsafe-inline:允许资源执行脚本。举个例子,on事件的值会被编码到html代码中,或者脚本元素的text的内容会被混入到受保护的资源中。  
2、unsafe-eval:允许资源动态的执行函数,比如eval,setTimeout, setInterval, new等函数。

object-src – 决定从哪里加载和执行插件。
style-src – 决定从哪里加载css和样式标记。
img-src – 决定从哪里加载图片。
media-src – 决定从哪里加载视频和音频资源。
frame-src – 决定哪里的frames 可以被嵌入。
font-src – 决定从哪里加载字体。
connect-src – 限制在 XMLHttpRequest, WebSocket 和 EventSource 中可以使用哪些类型的资源。
sandbox – 这是一个可选形式,它决定了沙盒的策略,如何将内容嵌入到沙盒中以保证安全。

当这个策略被特定的url违反了,我们也可以用报告地址直接发送报告。这样做有利于debug和当攻-击发生时通知我们。

此外, 我们可以定义Content-Security-Policy-Report-Only 的 header不强制遵守csp,但是会发送潜在的威胁到一个报告地址。它遵守和csp一样的语法和规则。

正确的设置

View cspplayground.com compliant examples

通常不正确的设置:

View cspplayground.com violation examples

如何检测

在chrome和firefox中打开开发者工具或者firebug,在控制台查看是否有潜在的威胁。

标签:src,HTTP,可以,Content,Policy,Security,csp,资源,加载
From: https://blog.51cto.com/u_15520037/7571796

相关文章

  • http和https协议的区别
    区别HTTP明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP)数据传输过程是加密的,安全性较好。使用HTTPS协议需要到CA(CertificateAuthority,数字证书认证机构)申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy和GlobalSign等......
  • Basic认证与Digest认证在http服务的配置与测试
    一、Apache支持basic认证1.确定Apache服务器是否有这2种模块服务器装的apche一般会默认带这两个模块:auth_basic_modulemodules/mod_auth_basic.so、auth_digest_modulemodules/mod_auth_digest.so在http.conf中看能否找到LoadModuleauth_digest_modulemodules/mod_auth_d......
  • HTTP安全响应头配置之Access-Control-Allow-Origin
    目的Access-Control-Allow-Origin是从CrossOriginResourceSharing(CORS)中分离出来的。这个header是决定哪些网站可以访问资源,通过定义一个通配符来决定是单一的网站还是所有网站可以访问我们的资源。需要注意的是,如果定义了通配符,那么Access-Control-Allow-Credentials选项就......
  • HTTP之下的TCP做了什么?抓包解释!
    理清HTTP之下的TCP流程,让你的HTTP水平更上一层(qq.com)首先,我们准备这样一段服务端代码:constexpress=require('express')constapp=express()app.get('/',function(req,res){res.setHeader('Connection','close')res.end('hell......
  • HttpClient HttpClientHandler WebRequestHandler Explained 处理https请求
    Framework4.8的HttpClientHandler有ServerCertificateCustomValidationCallback所以处理https请求做如下操作:varhandler=newHttpClientHandler();varbaseUri=newUri(url);if(baseUri.Scheme.ToLower()=="https"){......
  • 在 Net7.0 环境下使用 RestSharp 发送 Http(FromBody和FromForm)请求
    一、简介最近,在做一个数据传输的服务,我在一个WorkerService里面需要访问WebAPI接口,并传输数据,也可以提交数据。由于第一次使用RestSharp发送请求,也遇到了很多问题,不过最终把问题都解决了。什么东西都一样,第一次做都会才很多坑。今天,我就两个小的知识点,就是通......
  • TidHTTP的post编码,老掉牙的问题
    TidHTTP使用post时,需要提交json字符串。那么采用什么编码,这个问题就头大了。目前xe已经不要考虑编码转换问题。但是....我们使用ISuperObject操控json。那么最后提交到post的数据应该是这样?idHttp.post(urURL,stream)idhtp1.Post('http://123.124.211.113:9050/myMoth',Reque......
  • Restful API 接口测试工具 HTTP Client
    HTTPClient软件项目开发有很多RESTfulAPI接口需要运行来验证效果,所以急需一款高效的接口测试工具。可能大家用的比较多的是swagger或者postman,这2个确实不错,不过这里我给大家推荐一种更简单的接口测试工具。这款工具就是idea中的自带的:HTTPClient,这款工具特别好用,主......
  • 在开启contenteditable可编辑div光标处插入图片
     $("#Content").focus();//创建img元素varimg=document.createElement('img');img.src='xxxx';img.style.display='block';//插入img元素if(window.getSelection){vareditableDiv=document.getEle......
  • 使用openssl创建ssl证书,用于测试https服务
    一个web站点要对外提供https服务就需要ssl证书,ssl证书可以从云服务厂商那里购买,通常也能申请到免费的,但是如果只是为了测试,则可以使用openssl来创建ssl证书。下面是完整的生成过程:第一步:创建私钥opensslgenrsa-outserver.key2048第二步:创建签名请求文件opensslreq-new-key......