首页 > 其他分享 >CSP: Content-Security-Policy详解应对XSS攻击

CSP: Content-Security-Policy详解应对XSS攻击

时间:2023-11-21 11:13:47浏览次数:29  
标签:XSS src image Content Policy Security png

https://www.jianshu.com/p/74ea9f0860d2

 

CSP: Content-Security-Policy详解

 前言

跨域脚本攻击(XSS)是最常见、危害最大的网页安全漏洞。

为了防止它,要采取很多编程措施(比如大多数人都知道的转义、过滤HTML)。很多人提出,能不能根本上解决问题,即浏览器自动禁止外部注入恶意脚本?

这就是"内容安全策略"(Content Security Policy,缩写 CSP)的由来。

两种方法可以启用 CSP:

  • 设置 HTTP 的 Content-Security-Policy 头部字段
  • 设置网页的<meta>标签。

网上的资料都有讲到它们怎么使用,但是很少有代码演示,不敲一遍就不够理解,下面我会直接上些例子。

(1)使用HTTP的 Content-Security-Policy头部

在服务器端使用 HTTP的 Content-Security-Policy头部来指定你的策略,像这样:

Content-Security-Policy: policy

policy参数是一个包含了各种描述CSP策略指令的字符串。

例1 禁止内联js、css
// index.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<script type="text/javascript">
    console.log('inline js.');
</script>
</body>
</html>
// index.js
const http = require('http');
const fs = require('fs');
http.createServer((req, res) => {
        const html = fs.readFileSync('index.html', 'utf8');
        res.writeHead(200, {
            'Content-Type': 'text-html',
            'Content-Security-Policy': 'default-src http: https:' 
        });
        res.end(html);
}).listen(9000);

console.log('server listening on 9000');

上面代码使用原生nodejs起了个服务,然后设置响应头部
'Content-Security-Policy': 'default-src http: https:'

表示只能通过外联的方式来引用js和css,如果使用内联的将报错:

  image.png
    <style type="text/css">
        * { background-color: red; }
    </style>
  image.png
例2

只能在指定的域下加载文件,这里表示只能从同域下加载,斜杠为转义符:
'Content-Security-Policy': 'default-src \'self\''

<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
  image.png

打开控制台也可以看到请求在浏览器就已经被限制了:


  image.png

如果要允许请求到这个域,添加进策略即可:

'Content-Security-Policy': 'default-src \'self\' https://cdn.bootcss.com/' 
例3

上面的策略是无法限制form表单的提交的,如下列表单,点击后直接跳到了百度页面:

    <form action="https://baidu.com">
        <button>click me</button>
    </form>

这时候就要设置form-action策略:

'Content-Security-Policy': 'default-src \'self\' https://cdn.bootcss.com/; form-action \'self\''
  image.png
例4

在例子1中,设置了default-src的限制,这时img的src也会受到限制。

<img src="https://www.baidu.com/img/baidu_jgylogo3.gif">

 

  image.png
default-src设置的是全局,如果我只想限制js的请求,可以将default-src改为script-src

 

(2) 启用违例报告

默认情况下,违规报告并不会发送。为启用发送违规报告,你需要指定 report-uri策略指令,并提供至少一个URI地址去递交报告:

'Content-Security-Policy': 'script-src \'self\'; report-uri /report'

这里的报告我们可以直接在浏览器看到,它会自动发送一个请求出去:


  image.png

如果我只想收集报告,但是不真正的去限制请求,那怎么办?除了Content-Security-Policy,还有一个Content-Security-Policy-Report-Only字段,表示不执行限制选项,只是记录违反限制的行为。将头部改为这个即可。

(3)使用meta标签

以上规则可以在浏览器端设置,如:

<meta http-equiv="Content-Security-Policy" content="form-action 'self';">

效果是一样的!现在终于理解了meta标签 http-equiv 和 content 属性的意思了,TT。。。

但与服务器端设置有点不同的是,meta无法使用report,这样只能在服务器端设置了:

  image.png
总结

可以看到,一经设置Content-Security-Policy,对加载外部脚本限制较为严格。这个东西好不好用呢?似乎使用的人不多,目前我知道有知乎和github在用。

参考

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP
http://www.ruanyifeng.com/blog/2016/09/csp.html

  最后编辑于 :2022.02.22 17:17:00

标签:XSS,src,image,Content,Policy,Security,png
From: https://www.cnblogs.com/kelelipeng/p/17846154.html

相关文章

  • Optimized Content Caching and User Association for Edge Computing in Densely Dep
    目录OptimizedContentCachingandUserAssociationforEdgeComputinginDenselyDeployedHeterogeneousNetworks1、问题背景贡献点:2、系统建模及问题公式化系统建模问题公式化联合内容缓存和用户关联策略智能内容缓存策略动态用户关联方法RA(RapidAssociation)Algorithm:DA......
  • mysql数据库ERROR 1193 (HY000): Unknown system variable 'validate_password_policy
    一、概况  平时我们安装完数据库,需要进行对应的密码或者密码策略修改,此时需要mysql的密码验证插件。MySQL可能没有这个插件,就需要进行相应的处理。二、问题描述mysql>setglobalvalidate_password_policy=0;ERROR1193(HY000):Unknownsystemvariable'validate_passw......
  • 什么是 HTTP 响应字段里的 Referrer Policy
    如下图所示,我在HTTP请求的响应头部里看到ReferrerPolicy字段为strict-origin-when-cross-origin,这个字段的含义如下。HTTP头部中的ReferrerPolicy字段用于定义浏览器在跨站请求时应如何处理HTTPReferer头部。这是一个重要的字段,因为它可以帮助网站所有者控制他们......
  • [转]SSH框架 Struts2 过滤特殊字符,防止xss攻击
    原文地址:基于Struts2修复XSS漏洞(博主验证有效)_struts2xss-CSDN博客1.编写XssFilterimportjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servl......
  • http请求头中的content-type
    web开发过程中客户端与服务端一般通过HTTP协议交互信息,而请求头和响应头用来承载这些交互信息。请求头和响应头比较正式的叫法分别是请求报文和响应报文,统称为HTTP报文。下面是HTTP报文的结构:HTTP报文分为报文首部和报文主体,两者之间用空行分隔(空行由回车符和换行符生成)。cont......
  • blob:http Status Code: 206 Partial Content 视频去水印
       从视频中删除水印-免费擦除徽标和日期https://online-video-cutter.com/cn/remove-logo#google_vignetteStatusCode:206PartialContentblob:https://online-video-cutter.com/461afc6a-9e64-45ca-9276-4f9489bde7f7  视频去水印先上传再选区域  ......
  • 什么是xss攻击
    1.概念XSS攻击指的是跨站脚本攻击,是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如cookie等。XSS的本质是因为网站没有对恶意代码进行过滤,与正常的代码混合在一起了,浏览器没有办法分辨哪些脚本是可信的,从而导致了恶意代码的执......
  • 什么是前端应用开发的 LCP(Largest Contentful Paint) 指标
    在网页性能优化的领域里,LCP(LargestContentfulPaint,最大内容绘制)是一个非常重要的性能指标。它测量的是从页面开始加载到页面的"主要内容"完全呈现在屏幕上所需的时间。换句话说,LCP是测量用户何时看到页面的"主要内容"的指标。在理解LCP之前,我们需要知道一个概念,那就是......
  • Android 文件绝对路径和Content开头的Uri互相转换
    最近在做一个项目时,需要做一个九宫格选择图片上传的功能,最后拿到的图片地址是文件的绝对路径地址,我需要的是Content开头的Uri,所以需要做一个转换查阅资料找到如下方法,代码如下://路径文件转成URIpublicstaticUrigetImageContentUri(Contextcontext,java.io.FileimageFile)......
  • Web漏洞-XSS实验-pikachu靶场5个场景(二)
    ★★实战前置声明★★文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。1、前言上一篇《Web漏洞-XSS理论和靶场小试牛刀(一)》已经介绍了XSS一些理论知识点,本文主要是分享p......