学学XSS攻击的原理和防范

Xss(跨站脚本攻击)

一种代码注入攻击,攻击者在目标网站注入恶意脚本,使其在浏览器上运行,利用这些脚本,攻击者可以获取用户的敏感信息,如Cookie,SessionID,进而危害数据安全

XSS常见注入方法

  • 利用如提交表单、发布评论等方式将事先准备好的恶意脚本注入到那些良性可信的网站中
  • 在标签的 href、src 等属性中包含脚本代码
  • 在 style 属性和标签中,包含类似 background-image:url("javascript:..."); 的代码

XSS分类

根据攻击的来源,xss攻击可分为存储型,反射性,Dom型

存储型XSS

它是最危险的一种跨站脚本,比反射性XSS和Dom型XSS都更有隐蔽性。因为它不需要用户手动触发,任何允许用户存储数据的web程序都可能存在存储型Xss漏洞。若某个页面遭受存储型Xss攻击,所有访问该页面的用户会被Xss攻击

攻击步骤:

  1. 攻击者把恶意代码提交到目标网站的数据库中
  2. 用户打开目标网站,网站服务端把恶意代码从数据库中取出,拼接在HTML上返回给用户
  3. 用户浏览器接收到响应解析执行,混在其中的恶意代码也被执行
  4. 恶意代码窃取用户敏感数据发送给攻击者,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作

存储型 XSS(又被称为持久性XSS)攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。

反射型Xss

反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。

攻击步骤:

  1. 攻击构造出特殊的url,其中包含恶意代码
  2. 用户打开带有恶意代码的url,网站服务端将恶意代码从url中取出,拼接在HTML上返回给用户
  3. 用户浏览器接收到响应解析执行,混在其中的恶意代码也被执行
  4. 恶意代码窃取用户敏感数据发送给攻击者,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作

反射型 XSS (也被称为非持久性XSS)漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。

Dom型Xss

攻击步骤类似于反射型Xss也是构造出特殊的url,不过恶意代码的取出和执行由浏览器完成,前两个是由服务端完成。防范Dom型的Xss是前端不可推卸的责任。

类型 存储区 插入点
存储型XSS 后端数据库 HTML
反射型XSS URL HTML
DOM型XSS 后端数据库/前端存储/URL 前端 JavaScript

防御Xss

只要有输入数据的地方,就可能存在 XSS 危险。

常用防范方法

  • httpOnly:在cookie中设置Httponly后,js脚本无法读取cookie的信息
  • 输入过滤:对输入格式的检查,不能出现脚本
  • 转义Html:在拼接Html时,需要对尖括号,斜杠,引号等进行转义。

预防存储型和反射型Xss

恶意代码都是在服务端中取出,插入到Html中。 改成纯前端渲染,把代码和数据隔开(通过ajax获取业务数据来渲染页面 ) 对HTML进行充分的转义

预防Dom型Xss

避免使用.innerHTML、.outerHTML、document.write(),v-html DOM 中的内联事件***,如 location、onclick、onerror、onload、onmouseover 等,a 标签的 href 属性,JavaScript 的 eval()、setTimeout()、setInterval() 等,都能把字符串作为代码运行

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务