当前位置: 首页 > news >正文

XSS之同源、跨域、内容安全策略

一、什么是同源策略

HTML的同源策略是浏览器的一个重要的安全机制,它用于限制一个源的网页如何与另一个源的资源进行交互,以此来减少夸站脚本攻击(XSS)和跨站请求伪造(CSRF)等安全风险。

  • 同源的定义
    若两个URL的协议(protocol)、域名(domain)、端口(port)都相同,那么就认为它们是同源的,只要有其中一个参数不一样就是认为是非同源的

二、什么是跨域

跨域指的是浏览器从一个源(协议、域名、端口)的页面去请求另一个源的资源时,由于浏览器的同源策略,这种请求会收到限制,此时从一个源的页面去请求另一个源的资源就会产生跨域的问题

常见场景
  • 不同域名
    从 https://www.example1.com 页面请求 https://www.example2.com 的资源.
  • 不同端口
    http://localhost:8080 页面请求 http://localhost:3008 的资源。
  • 不同协议
    http://example.com 页面请求 https://example.com 的资源。
跨域带来的问题
  • AJAX请求受限
    使用 XMLHttpRequest 或 Fetch AP|进行跨域请求时,浏览器会阻止请求,除非服务器端进行了相应的配置。
  • DOM无法共享
    不同源的页面无法直接访问彼此的 DOM 元素
  • 数据存储无法共享
    不同源的页面无法访问彼此的 Cookie、LocalStorage 和 IndexedDB 等数据存储
如何解决跨域问题
  • JSONP(JSON with Padding)
    利用 script 标签不受同源策略限制的特点,通过动态创建 script 标签来实现跨域数据请求。不过,它只支持 GET 请求。
  • CORS(跨域资源共享)
    是一种现代的跨域解决方案,需要服务器端设置响应头,明确允许哪些源可以访问其资源。
  • 代理服务器
    在同源的服务器上设置代理,将请求转发到目标服务器,再将响应返回给客户端。

三、什么是内容安全策略(CSP)

CSP全称Content Security Policy ,可以直接翻译为内容安全策略,说白了,就是为了页面内容安全而制定的一系列防护策略. 通过CSP所约束的的规责指定可信的内容来源(这里的内容可以指脚本、图片、iframe、fton、style等等可能的远程的资源)。通过CSP协定,让WEB处于一个安全的运行环境中。我们知道前端有个很著名的”同源策略”,简而言之,就是说一个页面的资源只能从与之同源的服务器获取,而不允许跨域获取.这样可以避免页面被注入恶意代码,影响安全.但是这个策略是个双刃剑,挡住恶意代码的同时也限制了前端的灵活性,那有没有一种方法既可以让我们可以跨域获取资源,又能防止恶意代码呢?答案是当然有了,这就是csp,通过csp我们可以制定一系列的策略,从而只允许我们页面向我们允许的域名发起跨域请求,而不符合我们策略的恶意攻击则被挡在门外.从而实现

  • 工作原理
    网站通过发送一个 CSP 头部,来告诉浏览器什么是被授权执行的与什么是需要被禁止的。其被誉为专门为解决XSS攻击而生的神器。CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。
  • 常用字段
    在这里插入图片描述

相关文章:

  • C语言——数组
  • 【网络技术_域名解析DNS】一、DNS 基础剖析及其原理
  • [轻量化超分]CAMixerSR: Only Details Need More “Attention“
  • HTML5好看的水果蔬菜在线商城网站源码系列模板5
  • 有什么工具可以在家连接到公司内网?局域网址提供异地公网访问的那些常用方法
  • CentOS系统-超详细的Kubernetes集群搭建教程(kubernetes:1.28.2)
  • Rust生命周期、文件与IO
  • 20.3 使用技巧3
  • Qwen2.5-VL视觉大语言模型复现过程,没碰到什么坑
  • 【AI量化第24篇】KhQuant 策略框架深度解析:让策略开发回归本质——基于miniQMT的量化交易回测系统开发实记
  • Go语言入门到入土——三、处理并返回异常
  • Python爬虫之线程、进程、协程详解
  • Python 实现日志备份守护进程
  • JavaScript模块化开发:CommonJS、AMD到ES模块
  • AUTOSAR图解==>AUTOSAR_SWS_CryptoDriver
  • blender里面的材质列表
  • JavaEE——线程安全
  • Java工具类——实体类列表写入excel
  • Java 工厂设计模式详解:用统一入口打造灵活可扩展的登录系统----掌握 Spring 源码的基础第一步
  • 【Semantic Kernel核心组件】Plugin:连接AI与业务逻辑的桥梁
  • 人民日报读者点题·共同关注:今天我们为什么还需要图书馆?
  • 巴基斯坦军方:印度导弹袭击巴首都附近空军基地
  • 会计江湖|年报披露关注什么:独董给出的“信号”
  • 梵蒂冈选出新教皇,外交部:望新教皇推动中梵关系不断改善
  • 第32届梅花奖终评启幕,上海京剧院《智取威虎山》满堂彩
  • 习近平同俄罗斯总统普京会谈