XSS跨站脚本攻击

前言:

什么是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, "&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跨站脚本攻击。不偷懒,每个入口做好工作就可以。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值