XSS的基本概念和原理

一.XSS的基本概念
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。xss是一种发生在web前端的漏洞,所以其危害的对象也主要是前端用户
在WEB2.0时代,强调的是互动,使得用户输入信息的机会大增,在这个情况下,我们作为开发者,在开发的时候,要提高警惕。
xss漏洞可以用来进行钓鱼攻击,前端js挖矿,用户cookie获取。甚至可以结合浏览器自身的漏洞对用户主机进行远程控制
二、XSS攻击的主要途径
XSS攻击方法只是利用HTML的属性,作各种的尝试,找出注入的方法。现在对三种主要方式进行分析。
1.第一种:对普通的用户输入,页面原样输出,用户通过对JSCODE的伪装,经过一些操作就会跳出一个木马界面,取得登录用户的Cookie.
2.第二种:在代码区里有用户输入的内容
原则就是,代码区中,绝对不应含有用户输入的东西。
3.第三种:允许用户输入HTML标签的页面。
用户可以提交一些自定义的HTML代码,这种情况是最危险的。因为,IE浏览器默认采用的是UNICODE编码,HTML编码可以用&#ASCII方式来写,又可以使用”/”连接16进制字符串来写,使得过滤变得异常复杂,如下面的四个例子,都可以在IE中运行。
三.跨站脚本漏洞常见类型
1.反射型XSS:
<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
在这里插入图片描述
在这里插入图片描述
修改字符的输入长度
在这里插入图片描述
2.存储型XSS:
<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。
3.DOM型XSS:
基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。
四.跨站脚本漏洞测试流程
1.在目标站点上找到输入点,比如查询接口,留言板等
2.输入一组"特殊字符+唯一识别字符",点击提交后,查看返回源码,是否有做对应的处理。
3.通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合)
4.提交构造的脚本代码以及各种绕过姿势,看是否可以成功执行,如果成功执行则说明存在xss漏洞
Tips:
1.一般查询接口容易出现反射型xss,留言板容易出现存储型xss
2.由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效或者环境限制了执行。
3.通过变化不同的script,尝试绕过后台过滤机制。
五.跨站脚本攻击流程(Cookie)
在这里插入图片描述

### XSS攻击工作机制 XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的Web安全漏洞,其核心在于攻击者能够通过某种手段将恶意脚本注入到目标网站中,并使这些脚本在受害者的浏览器环境中被执行。这可能导致用户的敏感信息被窃取或其他恶意行为的发生。 #### XSS攻击分类及其工作原理 1. **反射型XSS** 反射型XSS是指攻击者诱使受害者访问一个带有恶意脚本的URL,服务器接收到请求后未对输入进行有效过滤或编码处理,直接返回给客户端执行[^1]。此类型的攻击通常依赖于用户交互,例如点击链接或提交表单。 2. **存储型XSS** 存储型XSS发生在恶意脚本被永久保存在数据库中的情况下,当其他用户浏览含有该脚本的内容时就会触发攻击。这类攻击的风险更高,因为它不需要额外的用户动作即可影响多个访客。 3. **DOM型XSS** DOM型XSS不同于上述两种形式,它完全基于前端JavaScript逻辑实现,在页面加载过程中动态修改文档对象模型(DOM),从而引入并运行恶意代码[^2]。 --- ### 防御XSS攻击的方法 针对不同类型的XSS攻击,有多种有效的防御策略: #### 1. 输入验证 通过对所有来自不可信源的数据实施严格的校验规则,阻止非法字符进入系统内部流程。例如,移除HTML标签或者转义特殊符号以防止它们作为指令解析[^3]。 #### 2. 输出编码 无论何时都将数据视为纯文本而非可执行代码对待;具体做法是在渲染之前把可能引起误解解释的部分转换成相应的实体表示法。比如 `<` 替换为 `<`, `>` 替换为 `>` 等等。 ```html <!-- 不安全 --> <div>{{ user_input }}</div> <!-- 安全 --> <div>{{ escapeHtml(user_input) }}</div> ``` #### 3. 使用 Content Security Policy (CSP) 这是一种强大的工具用来减少甚至消除某些类别的潜在威胁。通过指定哪些远程资源允许加载以及如何处理内联样式/脚本等方式增强安全性。 ```http Content-Security-Policy: script-src 'self'; object-src 'none'; ``` #### 4. 利用现代框架特性 像 React Vue 这样的视图层库默认会对模板插值做必要的转义操作,大大降低了开发者犯错的概率。 #### 5. 用户教育与意识提升 告知最终使用者有关钓鱼邮件识别技巧以及其他网络安全基础知识也是不可或缺的一环。 --- ### 结论 综上所述,理解XSS的基础概念对于构建更加健壮的应用程序至关重要。采用多层次防护机制不仅可以降低遭受攻击的可能性,还能显著改善整体用户体验质量。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值