pikachu-XSS跨站脚本通关

​​​​​​XSS(跨站脚本)概述

利用网站的输入接口进行攻击

Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。 攻击者通过在目标网站注入恶意脚本,当用户访问该网站时,恶意脚本会在用户的浏览器中执行,从而达到窃取用户信息、篡改页面内容等目的

1.1. 攻击类型

一般XSS可以分为如下几种常见类型:

  • 反射型 XSS:攻击者诱导用户点击包含恶意脚本的链接,服务器接收请求后将恶意脚本反射回浏览器并执行。例如,在搜索框中输入恶意脚本,服务器将输入内容原样返回显示在页面上,脚本就会在用户浏览器中执行。
  • 存储型 XSS:攻击者将恶意脚本提交到网站的数据库中,当其他用户访问包含该恶意脚本的页面时,脚本会被执行。比如在论坛、评论区等地方发布包含恶意脚本的内容,存储到数据库后,其他用户查看该内容时就会受到攻击。
  • DOM 型 XSS基于 DOM(文档对象模型)的 XSS 攻击,攻击者通过修改页面的 DOM 结构,使恶意脚本在浏览器中执行。这种攻击不依赖服务器端返回的数据,而是直接在客户端处理用户输入时触发。

DOM型XSS详解

1. DOM型XSS

1.1 概念

DOM全称Document Object Model,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。HTML的标签都是节点,而这些节点组成了DOM的整体结构——节点树。通过HTML DOM,树中的所有结点均可通过JavaScript进行访问。所有HTML元素(节点)均可被修改,也可以创建或删除节点。HTML DOM树结构如下:

在网站页面中有许多元素,当页面到达浏览器时,浏览器会为页面创建一个项级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。

1.2 常见的攻击方式

1、DOM属性污染(Property Pollution):攻击者通过修改或污染页面上的DOM属性值,利用特殊字符或恶意代码注入来触发漏洞。

2、DOM操纵:攻击者可以通过操纵DOM元素,修改页面内容,或者通过动态修改URL片段(fragment)来注入恶意代码。

3、事件处理器的劫持:攻击者可以利用事件处理器(比如onclick、onmouseover等)来执行恶意代码。如果网站未对用户输入进行适当的过滤和转义,攻击者可以注入恶意代码并在用户点击等操作时触发。

4、客户端重定向与操作:攻击者通过修改客户端的重定向行为,让用户访问恶意网站,或者修改浏览器的历史记录等来达到攻击目的。

1.3 常见攻击流程

用户提交js恶意代码 ==> 交给后端进行处理(php) ===> 后端将带有恶意代码的数据输出到页面上 ===> 导致恶意代码被执行

经过了后端的处理

** 必须要有一个后端的输出 **

但是纯在一种可能,可以不经过后端处理,直接输出到页面上

举个例子:

1.4 反射型和DOM型的区别

反射型经过了后端处理

dom型,完全不经过后端

本质上dom型是一种特殊的反射型

存储型,将输入的内容写入到了数据库里面,然后输出的时候去调用库里面的内容

1.2. 危害

XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。

  • 窃取用户信息:攻击者可以利用 XSS 漏洞窃取用户的 Cookie、会话令牌等敏感信息,进而冒充用户身份进行操作,如登录用户的账号、进行资金转账等。
  • 篡改页面内容:在页面中注入恶意脚本,修改页面的显示内容,误导用户,例如将正规的支付链接替换为钓鱼链接。
  • 实施钓鱼攻击:通过修改页面的表单,将用户输入的信息发送到攻击者的服务器,获取用户的账号密码等重要信息。

1.3. 防范措施

形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。

因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:

  • 输入验证和过滤:对用户输入的数据进行严格的验证和过滤(特殊字符,如<、>、"、’),只允许合法的字符和格式,不允许可能导致XSS攻击的字符输入;

  • 输出转义和编码
    • 根据输出点的位置对输出到前端的内容进行适当转义;
    • 在将用户输入的数据输出到页面时,进行适当的编码,将特殊字符转换为 HTML 实体。如将<转换为&lt;>转换为&gt;,防止恶意脚本被执行。
  • 设置 CSP(内容安全策略):通过设置 CSP,限制页面可以加载的资源来源,只允许从指定的域名加载脚本、样式表等资源,减少 XSS 攻击的风险。
  • 使用 HttpOnly 属性:对于存储敏感信息的 Cookie,设置HttpOnly属性,防止客户端脚本通过 JavaScript 访问 Cookie,避免攻击者通过 XSS 漏洞窃取 Cookie 信息。HttpOnly 最早由微软提出,浏览器将禁止页面的JavaScript访问HttpOnly属性的Cookie。HTTPOnly 并未要对抗XSS,HTTPOnly 解决的是XSS后的Cookie劫持攻击。在使用了HTTPOnly之后,会使这种攻击失效。
  • 编码或转义:在变量输出到HTML页面时,可以使用编码或者转义的方式来防御XSS攻击。
    • HTML代码的编码方式是HtmlEncode。
    • PHP中有htmlentities()和htmlspecialchares() 这两个函数可以满足安全要求
    • Javascript 可以使用JavascriptEncode。
    • 在Django自带的模板系统中,可以使用escape进行htmlencode,并且在Django 1.0中默认所有变量都会被escape。
    • web2py中,也默认escape了所有变量。

1

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值