XSS跨站脚本攻击

时间:2022-10-28 23:33:25

前言:

什么是XSS跨站脚本攻击?在网页中嵌入客户端脚本(例如JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的,比如获取用户的Cookie,导航到恶意网站,携带木马等。

下面就是一个攻击例子。

<ScRipt>alert("XSS")</sCRipT>


如何使用?XSS跨站脚本攻击


把脚本写到输入框,点击“提交”按钮,保存到数据库里面。下次读取这数据的时候,就会执行填入得脚本。

XSS跨站脚本攻击


如上图。


XSS跨站脚本攻击


注入广告框


后果:

能干嘛?注入一个脚本,能注入外部广告,获取本地cookie数据,获取账号密码等信息,还可以下载一下恶意文件,进行攻击。一个脚本能干的事情都可以干。

分类 等级
危险

★★★★

攻击容易 ★★★★★
防御难度 ★★★


介绍几种防御方式:

1.https协议,是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。但是防范不了 直接获取你的account password的框获取数据或者注入广告那还是没办法。

 

作用


2.react框架,对非react框架生成的document元素都会限制。防止引用外部脚步对网站进行插入广告,导致样式乱等问题。防止对document的插入攻击,有很好的作用。但是一些监听数据,对非document攻击,没有防御作用。

作用


3.HTML转义字符,在保存数据的时候,把特殊符号" & < >等这些符号 进行HTML转义是javascript脚本失效,变成单纯string字符。防御效果最好,直接入口做限制,出口也做限制,双重保险。无论怎样输出都会是string类型。

XSS跨站脚本攻击

作用 ★★


本文重点说这种,方法。

XSS跨站脚本攻击

这种转义方法 会把某些字符被替换成了十六进制的转义序列,该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。

这样就可以在所有的客户端上读取该字符串。而且输出的时候也会正常显示   <ScRipt>alert("XSS")</sCRipT>。棒吧!


function html_encode(str)  
{
var s = "";
if (str.length == 0) return "";
s = str.replace(/&/g, "&gt;");
s = s.replace(/</g, "&lt;");
s = s.replace(/>/g, "&gt;");
s = s.replace(/ /g, "&nbsp;");
s = s.replace(/\'/g, "&#39;");
s = s.replace(/\"/g, "&quot;");
s = s.replace(/\n/g, "<br>");
return s;
}
 

function html_decode(str)
{
var s = "";
if (str.length == 0) return "";
s = str.replace(/&gt;/g, "&");
s = s.replace(/&lt;/g, "<");
s = s.replace(/&gt;/g, ">");
s = s.replace(/&nbsp;/g, " ");
s = s.replace(/&#39;/g, "\'");
s = s.replace(/&quot;/g, "\"");
s = s.replace(/<br>/g, "\n");
return s;
}
 
//转码方法
html_encode('<ScRipt>alert("XSS")</sCRipT>')
 
//解码方法
html_decode('&lt;ScRipt&gt;alert(&quot;XSS&quot;)&lt;/sCRipT&gt;')

结论:有好的代码规范,做好出入口限制,就能防止XSS跨站脚本攻击。不偷懒,每个入口做好工作就可以。