前言:
什么是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)
{
var s = "";
if (str.length == 0) return "";
s = str.replace(/&/g, ">");
s = s.replace(/</g, "<");
s = s.replace(/>/g, ">");
s = s.replace(/ /g, " ");
s = s.replace(/\'/g, "'");
s = s.replace(/\"/g, """);
s = s.replace(/\n/g, "<br>");
return s;
}
function html_decode(str)
{
var s = "";
if (str.length == 0) return "";
s = str.replace(/>/g, "&");
s = s.replace(/</g, "<");
s = s.replace(/>/g, ">");
s = s.replace(/ /g, " ");
s = s.replace(/'/g, "\'");
s = s.replace(/"/g, "\"");
s = s.replace(/<br>/g, "\n");
return s;
}
//转码方法
html_encode('<ScRipt>alert("XSS")</sCRipT>')
//解码方法
html_decode('<ScRipt>alert("XSS")</sCRipT>')
|
2万+

被折叠的 条评论
为什么被折叠?



