什么是xss攻击?

1.XSS 漏洞简介


XSS(Cross-Site Scripting),中文意为跨站脚本攻击,是一种常见的 Web 安全漏洞。攻击者通过在页面中插入恶意脚本,利用用户浏览器对页面的信任,获取用户的敏感信息或进行其他恶意操作。XSS 分为存储型、反射型和 DOM 型三种类型。存储型 XSS 攻击是指将用户提交的恶意脚本存储在服务器端,当受害者访问该页面时,恶意脚本会被执行。反射型 XSS 攻击是指将恶意脚本作为参数传递给服务器端,服务器端将恶意脚本反射到页面中,当受害者访问该页面时,恶意脚本会被执行。DOM 型 XSS 攻击是指恶意脚本修改了页面中的 DOM 结构,从而达到攻击的目的。为了避免 XSS 攻击,开发人员应对用户输入做严格的限制和过滤,同时对输出的内容进行转义等安全措施。

2.XSS的攻击方式和原理

XSS 的原理是利用用户浏览器对页面信任的特性,注入恶意脚本并使其在浏览器中执行。XSS 攻击主要有三种方式:

  1. 存储型 XSS:恶意脚本被存储在服务器端,用户请求页面时,服务器返回页面内容,用户浏览器解析页面时会执行恶意脚本。
  2. 反射型 XSS:恶意脚本作为参数传递给服务器,服务器将恶意脚本返回给浏览器,浏览器解析页面时会执行恶意脚本。
  3. DOM 型 XSS:恶意脚本通过修改页面的 DOM 结构而执行,它与前两种攻击方式的区别在于,恶意脚本不需要被保存在服务器或反射到页面中,而是直接在页面中被执行。

攻击者利用了页面中存在的漏洞或弱点,通过插入恶意脚本来进行攻击。常见的漏洞或弱点包括未过滤用户输入、未对输出内容进行转义等。对于开发人员来说,为了避免 XSS 攻击,需要对用户输入进行限制和过滤,同时对输出的内容进行转义等安全措施。

3.XSS的危害

1.挂马
2.盗取用户Cookie。
3.DOS(拒绝服务)客户端浏览器。
4.钓鱼攻击,高级的钓鱼技巧。
5.删除目标文章、恶意篡改数据、嫁祸。
6.劫持用户Web行为,甚至进一步渗透内网。
7.爆发Web2.0蠕虫。
8.蠕虫式的DDoS攻击。
9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据
10.其它安全问题

4.XSS的利用方式

XSS 攻击的利用方式主要有以下几种:

  1. 窃取用户信息:攻击者插入恶意脚本,利用 JavaScript 获取用户的敏感信息,如用户的 Cookie、登录凭证等,并发送给攻击者。
  2. 劫持用户会话:攻击者修改页面内容,让用户在不知情的情况下完成某项操作或转账等,从而达到攻击者获利的目的。
  3. 恶意重定向:攻击者通过恶意脚本进行重定向,将用户重定向到钓鱼网站或恶意网站上,进而进行其他的攻击。
  4. 攻击其他用户:攻击者在网站中注入恶意脚本后,可以在用户之间进行攻击传染,如病毒一般扩散。
  5. 篡改网页内容:攻击者可以利用 XSS ,篡改目标网页的内容,插入恶意广告或进行其他修改。

开发人员可以通过采用以下措施来保护网站免受 XSS 攻击的影响:

  • 对所有用户输入的数据进行必要的过滤和转义;
  • 不要信任客户端提交的数据,对数据进行严格的验证;
  • 采用安全框架,限制网站 JavaScript 等的访问权限;
  • 将敏感信息使用加密算法进行加密存储,避免泄露敏感信息。
  • 定期对网站进行渗透测试和漏洞扫描,及时发现和解决 XSS 漏洞。

5.常见XSS攻击方式

一些常用的标签与属性

常见的 XSS 攻击方式有以下几种:

  1. 插入标签触发 XSS:攻击者在被攻击网站的输入框或 URL 中注入恶意脚本,浏览器解析页面时会执行注入的 JavaScript 代码。
  2. 插入外链触发 XSS:攻击者在被攻击网站的输入框或 URL 中插入外部 JavaScript 文件,浏览器加载外部 JavaScript 文件时会执行其中的恶意代码。
  3. 拼接注入触发 XSS:攻击者将恶意代码拼接在被攻击网站中原有的 JavaScript 代码行中,从而触发 XSS 攻击。
  4. 跨站脚本攻击(XSS)和跨站点请求伪造攻击(CSRF)配合使用:攻击者在被攻击网站中注入跨站脚本代码,以窃取用户的信息或者伪造用户请求。
  5. 其他攻击方式:例如基于HTML5的XSS利用、基于DOM的XSS利用等。

开发人员可以通过采取以下措施来预防 XSS 攻击:

  • 对用户的输入进行过滤,并且使用不同的方式对用户输入进行转义。
  • 使用记住用户闪现的方式,避免在浏览器端存储敏感信息。
  • 避免将不可信任的数据直接拼接在 HTML 代码中,使用编程语言提供的字符串拼接函数。
  • 禁止以 JSON 的形式返回纯文本数据,改为以 text/json 或者 application/json 类型返回数据。
  • 每次最小权限原则,将敏感信息,比如密码,加密保存。
  • 避免在 POST 请求中使用 URL 向服务器发送参数,因为这些参数很容易被劫持,导致 XSS 攻击。

下面我列举的标签大部分是可以自动触发js代码的,无需用户去交互,大部分情况下我们也是希望是自动触发而不是等用户去触发。

1.scirpt 标签



12

2.img 标签

 标签定义 HTML 页面中的图像。
1


12

3.input 标签

 标签规定了用户可以在其中输入数据的输入字段。
1
onfocus 事件在对象获得焦点时发生:

12

竞争焦点,从而触发onblur事件:


1

input 标签的 autofocus 属性规定当页面加载时 元素应该自动获得焦点。可以通过autofocus属性自动执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发:


1
" οnclick=alert(1)>        这样需要点击一下输入框
" onmouseover=alert(1)> 需要鼠标划过输入框
12

4.details 标签

标签通过提供用户开启关闭的交互式控件,规定了用户可见的或者隐藏的需求的补充细节。ontoggle 事件规定了在用户打开或关闭
元素时触发:
123

使用details 标签的 open 属性触发ontoggle事件,无需用户去点击即可触发:

1

5.svg 标签

 标签用来在HTML页面中直接嵌入SVG 文件的代码。

12

6.select 标签


12345

7.iframe 标签


123

8.video 标签

9.audio 标签

10.body 标签

 标签定义文档的主体。


123

onscroll 事件在元素滚动条在滚动时触发。我们可以利用换行符以及autofocus,当用户滑动滚动条的时候自动触发,无需用户去点击触发:









































12

11.textarea 标签