原创

XSS攻击原理攻击实例及解决办法

作者:cndz 围观群众:644 更新于 标签:xssxss攻击xss讲解

简介

XSS跨脚本攻击语言 (Cross-Site Scripting)是一种常见的Web攻击方式,因首字母和层叠样式表(Cascading Style Sheets, CSS)的缩写相同 ,所以将跨脚本攻击语言缩写为XSS,攻击者通过注入恶意脚本来攻击用户,从而获取用户的信息或控制用户的浏览器。本文将介绍XSS攻击的原理、常用绕过姿势以及避免XSS攻击的方法。

攻击原理及分类

XSS攻击的原理是攻击者通过在Web应用程序中注入恶意代码,使得用户在浏览器上执行这些代码,从而达到攻击目的。攻击者通常通过以下两种方式进行注入:

  1. 反射型XSS攻击

反射型XSS攻击是指攻击者将恶意脚本注入到Web应用程序URL中,然后将URL发送给用户。一旦用户点击这个URL,恶意脚本就会被执行,从而达到攻击目的。

  1. 存储型XSS攻击

存储型XSS攻击是指攻击者将恶意脚本注入到Web应用程序的数据库中,然后用户在访问被注入的页面时就会执行这些恶意脚本。

XSS攻击危害

说白了,XSS攻击就是通过某种方式向网页中恶意注入脚本。让浏览器去执行一些网页中原本不存在的前端代码。攻击者通常通过XSS攻击来达到自己的目的。

1.流量劫持恶意跳转连接。

<script>window.location.href="http://www.baidu.com";</script>

其实上面这段代码很好理解。当打开当前页面的时候,浏览器会自动调转到百度。

2.窃取网页浏览中的cookie值

<script>alert(document.cookie)</script>

在浏览网页时,要登录账户是一个很普遍的操作。一旦登录成功,服务器会返回一个cookie值。这个cookie值就像是一个通行证,如果你有这个通行证,就能证明你是某个用户。

虽然cookie值很方便,但是如果cookie值被别人偷走了,别人就可以用这个通行证登录你的账户,而不需要知道你的密码。为了保护你的账户安全,需要小心处理cookie值。

如果想要通过script脚本获取当前网页的cookie值,通常会使用document.cookie。所以,在建立网页时,一定要特别小心防止xss攻击。一些cookie值有其他的验证措施,例如HttpOnly,如果在Cookie中设置了”HttpOnly”属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。\

常用绕过实例

1.过滤绕过

某些网站过滤了一些特殊字符。用户可以输入但是网站会将这种特殊字符过滤掉。比如<script>alert("demo")</script>如果将<script>标签定义为特殊字符。那么上面的脚本最终存到数据库中的样子为alert(demo)因为缺少<script>标签而不能被执行。

攻击者可以这样组装攻击脚本,

<scrip<script>t>alert(document.cookie)</scrip<script>t>

在经过一层过滤后,上面的脚本变为下面这样。攻击者完成绕过。

<script>alert(document.cookie)</script>

2.大小写绕过

某些网站为了防止XSS攻击,会禁用默写特殊值。例如script 但是网站设计者忽略了标签大小写不敏感。从而让攻击这钻了空子。比如上边中的获取网站cookie的脚本可以写成。

<Script>alert(document.cookie)</sCript>

或者

<sCript>alert(document.cookie)</scriPt>

3.对脚本进行编码绕过。

如果网站将alert定义为非法字符。那么攻击者可以对其进行unicode转码。

<script>eval(\u0061\u006c\u0065\u0072\u0074(document.cookie))</script>

4.除了利用<script>脚本进行攻击,还可以通过其他标签进行攻击。

常见的有a标签

<a onmouseover=javascript:alert(document.cookie);>xssdemo</a>

button标签

<button onclick=javascript:alert(document.cookie);>xssdemo</button>

甚至img标签

<img src="ddd" onerror='javascript:alert(document.cookie)'>

上面的攻击方式都是单一的。在实际应用中攻击者往往通过将上述攻击方式想组合,来达到绕过防御的目的。

预防措施

为了防止XSS攻击,我们可以采取以下措施:

  1. 输入过滤

对用户输入的数据进行过滤,过滤掉特殊字符和HTML标签等。可以使用一些开源的输入过滤库,如HTML Purifier。

  1. 输出转义

对Web应用程序的输出进行转义,将一些特殊字符转换为HTML实体,如将<转换为&lt;,将>转换为&gt;

  1. CSP(Content Security Policy)

CSP是一种Web安全政策,可以帮助防止XSS攻击。CSP可以限制Web应用程序中可以执行的脚本,从而防止恶意脚本的注入。可以使用一些开源的CSP实现,如Helmet。

总结

XSS攻击是一种常见的Web攻击方式,攻击者通过注入恶意脚本来攻击用户。为了防止XSS攻击,我们可以采取一些输入过滤、输出转义以及CSP等措施。