首页 > 其他分享 >HTTP Content-Security-Policy CSP策略

HTTP Content-Security-Policy CSP策略

时间:2023-06-03 21:44:52浏览次数:36  
标签:src HTTP default Content Policy Security CSP

     CSP(Content Security Policy)内容安全策略 是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本(XSS)和数据注入攻击等。无论是数据盗取,网站内容污染还是恶意软件分发,这些攻击都是主要的手段。

     CSP被设计完全向后兼容,不支持CSP的浏览器也能与实现了CSP的服务器正常工作只是忽略它如常运行,如果网站不提供CSP标头,浏览器默认使用标准的同源策略。

    为使CSP可用,需要配置你的网络服务器返回 Content-Security-Policy HTTP标头。

    CSP的主要目标是减少和报告XSS攻击。XSS攻击利用了浏览器对于从服务器所获取的内容的信任。恶意的脚本在受害者的浏览器中得以运行,因为浏览器信任其内容来源,即使有些时候这些脚本来自它本不该来的地方。

    CSP通过指定有效域--即浏览器认可的可执行脚本的有效来源---使服务器管理者有能力减少或消除XSS攻击所依赖的载体。一个CSP兼容的浏览器将会仅执行从白名单域获取到的脚本文件,忽略所有的其他的脚本(包括内链脚本和HTML的事件处理属性)。

     作为一种终极防护形式,始终不允许执行脚本的站点可以选择全面禁止脚本执行。

      除限制可以加载内容的域,服务器还可以指明哪种协议允许使用;比如服务器可指定所有内容必须通过HTTPS加载。一个完整数据传输策略不仅强制使用HTTPS进行数据传输,也为所有的cookie 标记secure标识,并且提供自动的重定向使得HTTP页面导向HTTPS版本。网站也可以使用 Strict-Transport-Security, HTTP标头确保连接它1浏览器只使用加密通道。

  使用CSP

    配置内容安全策略涉及到添加 Content-Security-Policy HTTP标头到页面,并配置相应的值,以控制用户代理(浏览器等)可以为该页面获取哪些资源。比如一个上传文件和显示图片页面,应该允许图片来自任何地方,但限制表单的action属性只可以赋值为指定的端点。一个经过恰当设计的内容安全策略应该可以有效的保护页面免受跨站脚本攻击。

   编写策略

    default-src: 在其他资源类型没有符合自己的策略时应用该策略

     一个策略可以包含default-src 或者 script-src 指令防止内连脚本运行,并杜绝eval()的使用。

     一个策略也可以包含一个default-src 或style-src 指令去限制来自一个<style>元素或者style属性的内连样式。

     对于不同类型的项目都有特定的指令,因此每种类型都可以有自己的执行,包括字体,frame,图像,音频和视频媒体,script和worker。

 常见示例:

 1、一个网站想要所有内容都来自同一个源(不包含其子域名)

Content-Security-Policy: default-src 'self'

2、一个网站允许内容来自同源及其信任的域名(域名不必须与CSP设置所在的域名相同)

Content-Security-Policy: default-src 'self' *.trusted.com

3、一个网站允许内容中图片来自任何源,但是限制音频或视频需从信任的源获取,所有脚本必须从指定的源获取

Content-Security-Policy: default-src 'self'; img-src *;media-src media1.com media2.com;script-src userscripts.example.com

4、一个网站所有内容都必须通过SSL并且指定的域名获取,以避免攻击者窃听用户发出的请求

Content-Security-Policy: default-src https://online.com

5、一个网站包含HTML来自同源或者mailsite.com,图片来源任何源,但不允许JavaScript从任意源加载,注意:这个示例并未指定script-scr,但站点通过default-scr指令对其进行配置,同样意味着脚本文件仅允许从原始服务器获取

Content-Security-Policy: default-src 'self' *.mailsite.com;img-src *

 

对策略进行测试

将Content-Security-Policy 部署为仅报告(report-only)模式。在此模式下,CSP策略不是强制性的,但是任何违规行为将会报告给一个指定的URI地址。

Content-Security-Policy-Report-Only: policy

如果Content-Security-Policy-Report-Only和Content-Security-Policy同时出现在一个响应中,两个策略均有效。在Content-Security-Policy header中指定的策略有强制性,而Content-Security-Policy-Report-Only中的策略仅产生报告而不具有强制性。

支持CSP的浏览器始终将对于每个企图违反你所建立的策略都发送违规报告,如果策略里包含一个有效的report-uri指令

Content-Security-Policy: default-src 'self';report-uri http://reportcollector.example.com/collector.cgi

 

标签:src,HTTP,default,Content,Policy,Security,CSP
From: https://www.cnblogs.com/qindy/p/17362872.html

相关文章

  • HTTP Strict Transport Security HSTS
       HTTPStrict-Transport-Security(通常简称为HSTS)responseheader用来通知浏览器应该只通过HTTPS访问该站点,并且以后使用HTTP访问该站点的所有尝试都应自动重定向到HTTPS。 语法Strict-Transport-Security:max-age=<expire-time>Strict-Transport-Security:max-a......
  • HTTP的缓存机制是什么?
    HTTP缓存机制是一种在Web开发中常用的技术,它旨在提高性能和减少网络流量。通过缓存,可以避免不必要的网络请求,减少服务器负载,并加快页面加载速度。下面是关于HTTP缓存机制的详细介绍。HTTP缓存机制的基本原理是将Web资源(如HTML、CSS、JavaScript、图像等)保存在客户端或中间......
  • XMLHttpRequest实现下载文件的功能
    方式一:download("http://.....exportData",{name:"小明",age:18});functiondownload(url,data){varxhr=newXMLHttpRequest();//ajax的技术核心是XMLHttpRequest对象xhr.open("post",url);xhr.setRequestHeader("Cont......
  • 【代码片段】fasthttp 中的输出使用 gzip 压缩
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯直接上代码:import("github.com/valyala/bytebufferpool""github.com/valyala/fasthttp")funcFasthttpHandler(ctx*fasthttp.RequestCtx){buf:......
  • Java使用SSLContext请求https
    //首先实现信任的管理器类ublic class HttpsUtil {     private static class TrustAnyTrustManager implements X509TrustManager {         public void checkClientTrusted(X509Certificate[] chain, String authType)          ......
  • 什么是 HTTP 长轮询?
    什么是HTTP长轮询?Web应用程序最初是围绕客户端/服务器模型开发的,其中Web客户端始终是事务的发起者,向服务器请求数据。因此,没有任何机制可以让服务器在没有客户端先发出请求的情况下独立地向客户端发送或推送数据。为了克服这个缺陷,Web应用程序开发人员可以实施一种称为HTTP......
  • Muesli: Combining Improvements in Policy Optimization
    发表时间:2021(ICML2021)文章要点:这篇文章提出一个更新policy的方式,结合regularizedpolicyoptimization以及modellearningasanauxiliaryloss。最后直接用policynet输出动作,不做搜索,就能有很好的效果。具体的,作者提出了clippedMPO(CMPO)regularizer的更新方式。Regula......
  • Android中实现ContentResolver对系统中所有联系人的访问
    一、实现方法思路:朝着实验要求和目的去想,要想访问系统中的联系人,可以利用ContentResolver类来访问,使用ContentResolver类可以访问别的应用程序通过ContentProvider提供的数据,这里可以用Android系统提供的标准的ContentProvider来对手机联系人进行访问。还有要想实现长......
  • 项目访问的端口是8018,但是真实接口地址是19080,导致访问这个地址http://9.6.237.104:80
    这个问题是由于您的前端页面与后端应用程序的接口地址不在同一个域名下所引起的跨域请求。在浏览器中,出于安全考虑,通常不允许JavaScript从一个域名下访问另一个不同域名下的资源,这种行为被称为跨域请求(Cross-OriginResourceSharing,CORS)。有一些方法可以解决跨域问题,下面是......
  • c++ libcurl获取http header信息
    boolHttpDownloader::GetReceiveHeaderInfo(conststd::string&strUrl,std::map<std::string,std::string>&mapHeaderKeyValue){boolbRet=false;if(strUrl.empty()){returnbRet;}else{CURL*handl......