前言:
什么是XSS跨站脚本攻击?在网页中嵌入客户端脚本(例如JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的,比如获取用户的Cookie,导航到恶意网站,携带木马等。
下面就是一个攻击例子。
<ScRipt>alert("XSS")</sCRipT>
如何使用?
把脚本写到输入框,点击“提交”按钮,保存到数据库里面。下次读取这数据的时候,就会执行填入得脚本。
如上图。
注入广告框
后果:
能干嘛?注入一个脚本,能注入外部广告,获取本地cookie数据,获取账号密码等信息,还可以下载一下恶意文件,进行攻击。一个脚本能干的事情都可以干。
分类 | 等级 |
---|---|
危险 | ★★★★ |
攻击容易 | ★★★★★ |
防御难度 | ★★★ |
介绍几种防御方式:
1.https协议,是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。但是防范不了 直接获取你的account password的框获取数据或者注入广告那还是没办法。
作用 | ★ |
2.react框架,对非react框架生成的document元素都会限制。防止引用外部脚步对网站进行插入广告,导致样式乱等问题。防止对document的插入攻击,有很好的作用。但是一些监听数据,对非document攻击,没有防御作用。
作用 | ★★★ |
3.HTML转义字符,在保存数据的时候,把特殊符号" & < >等这些符号 进行HTML转义是javascript脚本失效,变成单纯string字符。防御效果最好,直接入口做限制,出口也做限制,双重保险。无论怎样输出都会是string类型。
作用 | ★★★★★ |
本文重点说这种,方法。
这种转义方法 会把某些字符被替换成了十六进制的转义序列,该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
这样就可以在所有的客户端上读取该字符串。而且输出的时候也会正常显示 <ScRipt>alert("XSS")</sCRipT>。棒吧!
function html_encode(str) |