XSS攻击原理及防范

2023-05-16

文章目录

  • 一、XSS攻击简介
  • 二、XSS攻击分类
    • 1.反射型
    • 2.存储型
    • 3.DOM-based型
  • 三、XSS防范
    • 1.cookie安全策略
    • 2.X-XSS-Protection设置
    • 3.XSS防御HTML编码
    • 4.XSS 防御HTML Attribute编码
    • 5.XSS防御之javascript编码
    • 6.XSS 防御之 URL 编码
    • 7.XSS 防御之 CSS 编码
    • 8.开启CSP网页安全政策防止XSS攻击

一、XSS攻击简介

XSS 即(Cross Site Scripting)中文名称为:跨站脚本攻击。XSS的重点不在于跨站点,而在于脚本的执行。那么XSS的原理是:
恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。

二、XSS攻击分类

反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。

1.反射型

反射性XSS的原理是:反射性xss一般指攻击者通过特定的方式来诱惑受害者去访问一个包含恶意代码的URL。当受害者点击恶意链接url的时候,恶意代码会直接在受害者的主机上的浏览器执行。

反射性XSS又可以叫做非持久性XSS。为什么叫反射型XSS呢?那是因为这种攻击方式的注入代码是从目标服务器通过错误信息,搜索结果等方式反射回来的,而为什么又叫非持久性XSS呢?那是因为这种攻击方式只有一次性。

比如:攻击者通过电子邮件等方式将包含注入脚本的恶意链接发送给受害者,当受害者点击该链接的时候,注入脚本被传输到目标服务器上,然后服务器将注入脚本 "反射"到受害者的浏览器上,从而浏览器就执行了该脚本。

因此反射型XSS的攻击步骤如下:

  1. 攻击者在url后面的参数中加入恶意攻击代码。
  2. 当用户打开带有恶意代码的URL的时候,网站服务端将恶意代码从URL中取出,拼接在html中并且返回给浏览器端。
  3. 用户浏览器接收到响应后执行解析,其中的恶意代码也会被执行到。
  4. 攻击者通过恶意代码来窃取到用户数据并发送到攻击者的网站。攻击者会获取到比如cookie等信息,然后使用该信息来冒充合法用户
    的行为,调用目标网站接口执行攻击等操作。

常见的有:恶意链接。

2.存储型

存储型XSS的原理是:主要是将恶意代码上传或存储到服务器中,下次只要受害者浏览包含此恶意代码的页面就会执行恶意代码。

比如我现在做了一个博客网站,然后攻击者在上面发布了一篇文章,内容是如下: 如果我没有对该文章进行任何处理的话,直接存入到数据库中,那么下一次当其他用户访问该文章的时候,服务器会从数据库中读取后然后响应给客户端,那么浏览器就会执行这段脚本,然后攻击者就会获取到用户的cookie,然后会把cookie发送到攻击者的服务器上了。

因此存储型XSS的攻击步骤如下:

  1. 攻击者将恶意代码提交到目标网站数据库中。
  2. 用户打开目标网站时,网站服务器将恶意代码从数据库中取出,然后拼接到html中返回给浏览器中。
  3. 用户浏览器接收到响应后解析执行,那么其中的恶意代码也会被执行。
  4. 那么恶意代码执行后,就能获取到用户数据,比如上面的cookie等信息,那么把该cookie发送到攻击者网站中,那么攻击者拿到该
    cookie然后会冒充该用户的行为,调用目标网站接口等违法操作。

如何防范?

  1. 后端需要对提交的数据进行过滤。
  2. 前端也可以做一下处理方式,比如对script标签,将特殊字符替换成HTML编码这些等。

3.DOM-based型

我们客户端的js可以对页面dom节点进行动态的操作,比如插入、修改页面的内容。比如说客户端从URL中提取数据并且在本地执行、如果用户在客户端输入的数据包含了恶意的js脚本的话,但是这些脚本又没有做任何过滤处理的话,那么我们的应用程序就有可能受到DOM-based XSS的攻击。因此DOM型XSS的攻击步骤如下:

  1. 攻击者构造出特殊的URL、在其中可能包含恶意代码。
  2. 用户打开带有恶意代码的URL。
  3. 用户浏览器收到响应后解析执行。前端使用js取出url中的恶意代码并执行。
  4. 执行时,恶意代码窃取用户数据并发送到攻击者的网站中,那么攻击者网站拿到这些数据去冒充用户的行为操作。调用目标网站接口
    执行攻击者一些操作。
    DOM XSS 是基于文档对象模型的XSS。一般有如下DOM操作:
  5. 使用document.write直接输出数据。
  6. 使用innerHTML直接输出数据。
  7. 使用location、location.href、location.replace、iframe.src、document.referer、window.name等这些。

假如对于变量url的值是:javascript:alert(‘dom-xss’); 类似这样的,那么就会收到xss的攻击了。因此对于DOM XSS主要是由于本地客户端获取的DOM数据在本地执行导致的。因此我们需要对HTML进行编码,对JS进行编码来防止这些问题产生。

三、XSS防范

1.cookie安全策略

在服务器端设置cookie的时候设置 http-only, 这样就可以防止用户通过JS获取cookie。对cookie的读写或发送一般有如下字段进行设置:

  • http-only: 只允许http或https请求读取cookie、JS代码是无法读取cookie的(document.cookie会显示http-only的cookie项被自动过滤掉)。发送请求时自动发送cookie.
  • secure-only: 只允许https请求读取,发送请求时自动发送cookie。
    host-only: 只允许主机域名与domain设置完成一致的网站才能访问该cookie。

2.X-XSS-Protection设置

目前该属性被所有的主流浏览器默认开启XSS保护。该参数是设置在响应头中目的是用来防范XSS攻击的。它有如下几种配置:
值有如下几种:默认为1.

  • 0: 表示关闭浏览器的XSS防护机制
  • 1:删除检测到的恶意代码, 如果响应报文中没有看到X-XSS-Protection 字段,那么浏览器就认为X-XSS-Protection配置为1,这是浏览器的默认设置
  • 1;mode=block:启用xss保护,并且在检查到XSS攻击是,停止渲染页面。

3.XSS防御HTML编码

如下html代码:<div>content</div>,在div标签中存在一个输出变量{content}. 那么浏览器在解析的过程中,首先是html解析,当解析到div标签时,再解析 content的内容,然后会将页面显示出来。那假如该{content} 的值是 <script>alert('XSS攻击')</script>,因此该script脚本就会解析并且执行了,从而达到XSS的攻击目标。
因此我们需要将不可信数据放入到html标签内(比如div、span等)的时候需要进行html编码。
编码规则:将 & < > " ’ / 转义为实体字符。

4.XSS 防御HTML Attribute编码

和HTML编码一样,html中的属性也要进行编码,比如 <input name="name"/>这样的,name是input的属性,因此在html解析时,会对name属性进行编码,因为假如{name} 的值为:" " onclick="alert('属性XSS')" " "这样的,也就是说input变成这样的了,<input name=" " onclick="alert('属性XSS')" " "></input>,input属性name被插入onclick事件了,因此也需要针对这种常规的html属性,都需要对其进行HTML属性编码。
因此我们需要将不可信数据放入html属性时(不含src、href、style 和 事件处理函数(onclick, onmouseover等))。需要进行HTML Attribute 编码。
编码规则:除了字母、数字、字符以外,使用 &#x;16进制格式来转义ASCII值小于256所有的字符。

5.XSS防御之javascript编码

在上面的 XSS 防御HTML Attribute编码中我们是可以防御XSS攻击,但是它只能防御的是HTML通用属性,并不是全部属性,在html中还存在很多支持协议解析的html属性,比如 onclick, onerror, href, src 等这些,类似这些属性我们是无法通过HTML编码来防范XSS攻击的。因为浏览器会先解析html编码的字符,将其转换为该属性的值,但是该属性本身支持JS代码执行,因此游览器在HTML解码后,对该属性的值进行JS解析,因此会执行响应的代码。

6.XSS 防御之 URL 编码

作用范围:将不可信数据作为 URL 参数值时需要对参数进行 URL 编码
编码规则:将参数值进行 encodeURIComponent 编码

function encodeForURL(str){
  return encodeURIComponent(str);
};

7.XSS 防御之 CSS 编码

作用范围:将不可信数据作为 CSS 时进行 CSS 编码
编码规则:除了字母数字字符以外,使用\XXXXXX格式来转义ASCII值小于256的所有字符。

8.开启CSP网页安全政策防止XSS攻击

Content-Security-Policy 中文的意思是 网页安全政策,

CSP是网页安全政策(Content Security Policy)的缩写。主要用来防止XSS攻击。是一种由开发者定义的安全性政策申明,通过CSP所约束的责任指定可信的内容来源,通过 Content-Security-Policy 网页的开发者可以控制整个页面中 外部资源 的加载和执行。
比如可以控制哪些 域名下的静态资源可以被页面加载,哪些不能被加载。这样就可以很大程度的防范了 来自 跨站(域名不同) 的脚本攻击。
在meta属性中设置下即可:如下代码:

<meta http-equiv="Content-Security-Policy" content="">

原文地址
web安全之XSS攻击原理及防范

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSS攻击原理及防范 的相关文章

  • 会话存储安全吗?

    我想使用会话存储来查询数据库中的用户数据一次 然后简单地使用JS来检索它 所以我正在考虑使用会话存储 接下来我的问题是 这样安全吗 请注意 1 JS 无法插入到带有表单的页面 表单只接受字母数字值 因此它只能来自 URL 1 1php 中不
  • 如何使用 Javascript 从 CDN 加载外部 css 文件?

    简而言之 我想在 a 上加载 bootstrap css 文件web page https secure helpscout net members register 13 在互联网上 不是在我的网站上 在浏览器控制台中使用 Javascr
  • 我使用 AntiXSS 但我仍然可以破解页面

    我不知道我这样做是否正确 我第一次构建一些东西来防止页面受到攻击 我将从最底层开始 我有财产 public string Description get set 用户可以通过tinyMCE设置其值 tinyMCE init mode tex
  • 在 Web 开发过程中,我将花费多少时间用于用户输入验证?

    我是网络开发新手 到目前为止 我花了很多时间 50 左右 来尝试阻止坏人将 sql 注入之类的东西放入我的输入表单中并在服务器端验证它 这是正常的吗 Jeremy 一些 PHP 细节 当涉及数据库查询时 请始终尝试使用准备好的参数化查询 这
  • XSS 酷刑测试 - 它存在吗?

    我正在寻找编写一个 html 清理程序 显然为了测试 证明它可以正常工作 我需要一组 XSS 示例来对抗它 看看它的性能如何 这是一个 编码恐怖 中的好例子 http www codinghorror com blog archives 0
  • 如何使用 HTML/PHP 防止 XSS?

    我该如何预防XSS https en wikipedia org wiki Cross site scripting 跨站点脚本 仅使用 HTML 和 PHP 我已经看过很多关于这个主题的其他帖子 但我还没有找到一篇文章清楚 简洁地说明如何
  • 是否可以检测弹窗中的用户点击事件?

    如果当前 url 和弹出 url 位于同一域中 我可以使用以下代码检测弹出窗口中的用户单击事件 var myWindow window open abc html MsgWindow width 500 height 600 myWindo
  • 清理 URL 以防止 Rails 中的 XSS

    在 Rails 应用程序中 用户可以创建事件并发布 URL 以链接到外部事件站点 如何清理网址以防止 XSS 链接 提前致谢 XSS 示例 rails 的清理方法无法预防该问题 url javascript alert XSS a href
  • ASP.Net Core 中的 AntiXSS

    Microsoft Web 保护库 AntiXSS https wpl codeplex com 已达到使用寿命 该页面指出 在 NET 4 0 中 框架中包含了一个 AntiXSS 版本 可以通过配置启用 在 ASP NET v5 中 基
  • Wymeditor 跨子域。 (跨站点权限问题。)

    我在 sub1 domain com 上有 wymeditor 它是通过 sub2 domains com 上的页面访问的 这行给出了一个错误 var styles this doc styleSheets 0 权限被拒绝http remo
  • CKEditor 安全最佳实践

    我在用http ckeditor com http ckeditor com 在我建立的一个小型 PHP MySQL 论坛中 我的问题 将用户创建的 HTML 像这样保存在数据库中然后在我的应用程序中重新显示它是否安全 我应该采取哪些预防措
  • HTML 和属性编码

    我遇到了一个发表在 Meta SO 上 https meta stackexchange com questions 104230 attack of the double encoded hellip part n我很好奇未编码和编码的
  • 什么是 http 标头“X-XSS-Protection”?

    所以我现在一直在 telnet 中玩弄 HTTP 即只需输入telnet google com 80并放入具有不同标头的随机 GET 和 POST 等 但我遇到了 google com 在其标头中传输的一些我不知道的内容 我一直在翻阅htt
  • 如何修复java中反映的XSS

    我收到了强化报告 其中显示了来自下面第二行的 XSS 反射缺陷 String name request getParameter name response getWriter write 姓名 姓名 给出的建议 向 Web 客户端显示的所
  • 不要直接访问超全局 $_GET 数组

    我是 PHP 新手 所以请原谅我 如果这是一个愚蠢的问题 但为什么我不应该直接访问超全局数组中的项目 NetBeans 警告我不要这样做 参见标题 而且我在其他地方读过同样的内容 但我还没有找到一个很好的解释 会出现什么问题 是否存在安全问
  • 将用户输入显示为输入值而不进行清理是否安全?

    假设我们有一个表单 用户可以在其中输入各种信息 我们验证了信息 发现有些问题 字段丢失 电子邮件无效等等 当再次向用户显示表单时 我当然不希望他必须再次输入所有内容 因此我想填充输入字段 如果不进行消毒 这样做安全吗 如果没有 首先应该进行
  • CodeIgniter - 为什么使用 xss_clean

    如果我正在清理我的数据库插入 并且还转义我编写的 HTMLhtmlentities text ENT COMPAT UTF 8 是否还需要使用 xss clean 过滤输入 它还有什么其他好处 xss clean http docs gip
  • html() 与 innerHTML jquery/javascript 和 XSS 攻击

    我正在对我自己的代码测试 xss 攻击 下面的示例是一个简单的框 用户可以在其中输入他想要的任何内容 按 测试 后按钮 JS 会将输入字符串显示为两个 div 这是我为了更好地解释我的问题而制作的示例
  • HTML-Entity 转义以防止 XSS

    我有一些用户输入 在我的代码中 我确保对以下符号进行转义 gt amp lt gt lt gt gt gt OWASP https www owasp org index php XSS 28Cross Site Scripting 29
  • 如何安全地使用 fckEditor,而不存在跨站脚本风险?

    此链接描述了使用 fckEditor 对我的应用程序的利用 http knitinr blogspot com 2008 07 script exploit via fckeditor html http knitinr blogspot

随机推荐

  • 八、任务的创建与删除

    文章目录 1 任务的三要素 xff1a 主体函数 任务栈 任务控制块 2 与任务相关的部分API函数 xff08 1 xff09 xTaskCreate xff08 2 xff09 void vTaskDelete TaskHandle t
  • 三、STM32中systick中断的优先级

    1 systick中断的优先级 systick为内核外设中断 xff0c 与普通外设中断的优先级有些区别 xff0c 并没有抢占优先级和子优先级的说法 对于M3来说内核外设的中断优先级由内核SCB这个外设的寄存器 xff1a SHPRx x
  • 二十、事件组

    文章目录 1 基本概念2 使用场景 xff1a 用于任务间 任务和中断间的同步 xff08 非数据传输 xff09 3 事件组结构体 xff08 事件控制块 xff09 内容解析4 为什么采用的是关闭调度器而不是关闭中断 xff1f 5 创
  • 3、如何使用GDB来进行命令行debug

    文章目录 一 与前面的联系二 GDB的一些认识1 什么是gdb2 gdb作用3 gdb可实现的功能 三 GDB常用的调试命令 一 与前面的联系 对于前面说到的launch json文件就是用于debug的配置文件 xff0c 在前面的vsc
  • 1、vscode搭建C++开发环境及一些配置文件的含义

    文章目录 一 vscode搭建开发环境1 下载和配置MinGW w64 编译器套件2 安装到电脑中3 配置环境变量4 测试是否安装成功5 vscode上安装C C 43 43 插件 二 配置编译环境时各个文件的含义1 task json x
  • 5、cmake的简单认识及CMakeLists.txt的编写语法

    文章目录 1 cmake是什么 xff08 1 xff09 cmake的两大功能 2 CMakeLists txt常用命令 xff08 即如何编写CMakeLists txt文件 xff09 xff08 1 xff09 cmake常见预定义
  • 6、在vscode上利用cmake创建第一个简单C++程序

    文章目录 xff08 1 xff09 前期准备工作 xff1a 即安装对应的环境1 xff09 在vscode上安装插件 xff1a C C 43 43 Cmake CMake tools2 xff09 安装Cmake环境 xff08 这是
  • 7、在vscode上利用cmake构建多文件C++工程

    文章目录 xff08 1 xff09 创建如下工程文件夹 xff1a 其中头文件放在include文件夹中 xff0c 源文件放在src文件夹中 xff08 2 xff09 在vscode上打开工程文件夹 xff0c 在对应的文件夹内建立相
  • js实现猜数字游戏

    随机输入两个数min 和max 在两个数中间生成一个随机数 进行猜数字游戏 且有猜的次数限制 1 不限制次数版本 function getRandom min max return Math floor Math random max mi
  • ubuntu更换阿里云镜像源操作步骤

    过程较为复杂 xff0c 能清楚自己改了镜像源 xff0c 避免了忘记或备份等 修改下载 xff08 镜像源 xff09 源 输入 xff1a sudo nano etc apt sources list 2 将所有deb 后的网址http
  • CSRF攻击原理与防御方法

    文章目录 CSRF概念CSRF攻击攻击原理及过程CSRF漏洞检测防御CSRF攻击1 验证 HTTP Referer 字段2 在请求地址中添加 token 并验证3 在 HTTP 头中自定义属性并验证 CSRF概念 CSRF跨站点请求伪造 C
  • Windows11安装Linux子系统(Ubuntu22.04LTS)+安装ROS

    目录 一 准备工作 二 安装Ubuntu 22 04 1 LTS 三 启动Ubuntu遇到的报错及解决方案 四 换源 五 安装ROS 设置编码 添加源 安装ROS 设置环境变量 测试 一 准备工作 控制面板 程序 程序和功能 启动或关闭 W
  • 如何在Github上建立自己的个人博客网站详细教程

    概述 之前闲着没事 就利用Github建了一个个人博客网站 效果还不错 今天就来分享一下 建立自己个人博客网站的好处 1 面试装逼 这个不必多说 2 把平时积累的知识和项目记录下来 方便日后查看使用 3 不受其他博客平台的限制 准备工作 开
  • 看野火的视频,用正点原子的板子(STM32F4探索者)做系统定时器实验

    1 实验目的 编写一个毫秒级的延时函数 xff0c 控制LED的亮灭 这里的灯是LED1 xff0c 端口是GPIOF xff0c 引脚是PIN10 2 实验流程 2 1 准备知识 SysTick 系统定时器 xff0c 24位 xff0c
  • 用正点原子的板子(STM32F4探索者)做PWM 输出实验

    1 实验目的 使用 TIM14 的通道 1 来产生 PWM 控制 LED0 DS0 的亮度 2 实验准备和流程 由上图可以看出 xff0c GPIOF9引脚对应的是定时器TIM14的通道1 由上图可以看出 xff0c GPIOF9引脚对应的
  • MATLAB快速入门(二):矩阵

    矩阵 目录 矩阵 1 冒号表达式 2 矩阵元素的引用 3 矩阵的运算 3 1算术运算 3 2逻辑运算 4 特殊矩阵 5 矩阵变换 5 1对角阵 5 2三角阵 5 3矩阵旋转 5 4稀疏矩阵 6 矩阵求值 1 冒号表达式 e1 e2 e3 省
  • toString方法使用

    一 Object类中toString的作用 1 在主方法中我们可以直接用toString 输出对象其中的内容 2 我们需要直接输出对象中所属内容时 xff0c 直接使用toString 方法输出语句 xff0c 输出内容不友好 xff0c
  • px4+mavros+offboard控制+gazebo仿真以及与pixhawk4飞控连接(一)

    记录一下自己从px4到板载控制的一系列流程以及踩坑过程 xff0c 希望也可以帮助大家避雷 话不多说直接上干货 一 软 硬件平台 px4版本 xff1a 1 10 1 飞控板 xff1a pixhawk4 ros版本 xff1a melod
  • 浅谈穿越机飞控如何烧写固件及其相关设置问题

    背景 xff1a 自己本人是无人机爱好者对穿越机也较为痴迷 xff0c 在使用DJI FPV天空端时发现无法显示OSD信息 xff0c 同时在眼镜端的OSD开关已经打开 xff0c 查阅相关资料发现自己的飞控版本过低需要烧写到4 1 0以上
  • XSS攻击原理及防范

    文章目录 一 XSS攻击简介二 XSS攻击分类1 反射型2 存储型3 DOM based型 三 XSS防范1 cookie安全策略2 X XSS Protection设置3 XSS防御HTML编码4 XSS 防御HTML Attribute