您好、欢迎来到现金彩票网!
当前位置:满堂彩 > 次要防御方向 >

WEB安全 - 认识与防御XSS攻击

发布时间:2019-07-25 00:52 来源:未知 编辑:admin

  XSS,即(Cross Site Scripting)中文名称为“跨站脚本攻击”。XSS的重点不在于跨站攻击而在于脚本攻击。攻击者可以利用 web应用的漏洞或缺陷之处,向页面注入恶意的程序或代码,以达到攻击的目的。通俗的来说就是我们的页面在加载并且渲染绘制的过程中,如果加载并执行了意料之外的程序或代码(脚本、样式),就可以认为是受到了 XSS攻击。

  流量劫持(通过访问某段具有window.location.href定位到其他页面)

  dos攻击:利用合理的客户端请求来占用过多的服务器资源,从而使合法用户无法得到服务器响应。并且通过携带过程的 cookie信息可以使服务端返回400开头的状态码,从而拒绝合理的请求服务。

  利用 iframe、frame、XMLHttpRequest或上述 Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作,并且攻击者还可以利用 iframe,frame进一步的进行 CSRF 攻击。

  XSS 根据攻击是否持久,可以分为 “反射型XSS”与“存储型XSS”两种。“反射型XSS”攻击者通过包装特定的连接,并将链接发送给实际的用户来进行攻击。“反射型XSS”攻击一般是利用前端代码的漏洞或缺陷,比如使用 Eval来解析执行动态传入的数据,或者是一些被后端接受处理后再返回前端展示的 URL参数等,其操作手法很类似于钓鱼攻击。“存储型XSS”攻击是通过表单提交,抓包工具,直接调用接口等形式向后端数据库注入数据。一旦被注入成功,并在输出的页面上没有做任何防范措施,那么所有访问这个页面的用户都会被攻击。总的来说,“反射型XSS”是一种局部非持久的针对性攻击,而“存储型XSS”就要严重的多,它是一个全面大范围可持久型的攻击。

  PS:当然在实际情况下,攻击者是不会把攻击代码这么明显的暴漏出来,一般都会经过编码。

  如果你认为在解析 URL参数时不使用Eval便能保证安全,那就大错特错了,因为攻击者往往会主动的帮你执行eval。

  此时一个脚本标记就会被后端代码重新下发给前端,然后前端将其加入页面中,便会触发攻击行为。当然,实际中并没有这么可怕,因为 web程序本身就已经很好的进行了阻拦过滤,但是经过我的实际测试发现 Firefox与老版本的IE依然有这些问题,只有 Chrome 与新版本的IE进行了阻止。如果你想再Chrome与新版本的IE浏览器中看到实际可产生的效果,可以通过设置 HTTP 的 Header头来关闭浏览器自动阻拦与过滤XSS功能。

  注入型攻击常见的地方就是留言评论或者是含有表单提交的地方。例如下面我们就以要给留言评论为例子来说明注入型攻击:

  不论是反射型攻击还是存储型,攻击者总需要找到两个要点,即“输入点”与输出点,也只有这两者都满足,XSS攻击才会生效。“输入点”用于向 web页面注入所需的攻击代码,而“输出点”就是攻击代码被执行的地方。

  首先是分析程序寻找漏洞,然后构建攻击代码,比如上面作为留言内容的script标签,实际上可以执行前端JS代码,远程加载JS脚本CSS样式文件的 HTML标签也非常多,比如:

  当代码注入成功后,攻击者往往就需要去寻找所注入代码的输出点,例如百度网盘之前就有一个修改昵称的 XSS漏洞,虽然前端设置了字符长度为10个字符,但是攻击者通过使用抓包工具构建了一个 的执行脚本,并成功的注入到了数据库,后面测试发现,最终攻击的输出位置处于用户分享资源给其它好友时,展开好友列表的时刻。

  实际上简单的通过正则判断 script、link、style、img 等HTML标记并不可取,因为,首先输入点的情况变化多样,很难把所有的 html标记的特性都考虑进来,其次对html标记的限制,也会让产品的可用性大大降低(比如有些特殊的关键字会被程序阻止,使得用户使用非常不便),最后这种判断本身也不安全,比如攻击者会在关键字中插入空格、制表符以及其它HTML实体编码来躲避侦测。

  既然我们前面说到攻击必须有两个要点:“输入点”,“输出点”,所以防御的时候,我们只要做好这两个点的控制,就基本上可以万无一失!

  对输入内容的特定字符进行编码,例如表示 html标记的 等符号。

  将不可信的值输出 URL参数之前,进行 URLEncode操作,而对于从 URL参数中获取值一定要进行格式检测(比如你需要的时URL,就判读是否满足URL格式)。

  不要使用 Eval来解析并运行不确定的数据或代码,对于 JSON解析请使用JSON.parse()方法。

  就目前而言,应对XSS攻击的主要手段还是编码与过滤两种,编码用于将特殊的符号 、、&、、进行转义,而过滤则是阻止特定的标记、属性、事件。如果你不愿意为了严格的安全而限制产品本身的灵活,那么我更建议采用“编码”的方案。

  实际上实现上述的编码功能非常简单,我们可以对照HTML实体编码表来进行正则匹配替换。

  当然在实际应用中很难避免自己写的匹配规则就能万无一失,并且XSS攻击又一直是在变化的过程中,因此个人更推荐使用第三方专门防御XSS攻击的库。前面都是针对输入点的防御说明,在输出的情况下,前端开发人员应当要对自己采用的输出方法与输出方式要有一定的了解:

http://blogmarked.com/ciyaofangyufangxiang/276.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有