首页 > web前端 > js教程 > 正文

JavaScript 常见安全漏洞和自动化检测技术_javascript技巧

WBOY
发布: 2016-05-16 15:43:34
原创
1770 人浏览过

前言

随着 Web2.0 的发展以及 Ajax 框架的普及,富客户端 Web 应用(Rich Internet Applications,RIA)日益增多,越来越多的逻辑已经开始从服务器端转移至客户端,这些逻辑通常都是使用 JavaScript 语言所编写。但遗憾的是,目前开发人员普遍不太关注 JavaScript 代码的安全性。据 IBM X-Force 2011 年中期趋势报告揭示,世界五百强的网站及常见知名网站中有 40% 存在 JavaScript 安全漏洞。本文将结合代码向读者展示常见 JavaScript 安全漏洞,旨在帮助读者能够在日常编码工作中规避这些安全漏洞。此外,客户端 JavaScript 安全漏洞与服务器端安全漏洞原理略为不同,自动化检测 JavsScript 安全漏洞目前存在较大的技术难题,本文将结合案例跟读者分享如何利用 IBM Rational AppScan Standard Edition V8.0 新特性(JavaScript Security Analyzer,JSA)技术自动化检测 JavaScript 安全漏洞。

JavaScript 常见安全漏洞

2010 年 12 月份,IBM 发布了关于 Web 应用中客户端 JavaScript 安全漏洞的白皮书,其中介绍了 IBM 安全研究机构曾做过的 JavaScript 安全状况调查。样本数据包括了 675 家网站,其中有财富 500 强公司的网站和另外 175 家著名网站,包括 IT 公司、Web 应用安全服务公司、社交网站等。为了不影响这些网站的正常运行,研究人员使用了非侵入式爬虫,仅扫描了无需登录即可访问的部分页面,每个站点不超过 200 个页面。这些页面都被保存下来,研究人员采用 IBM 的 JavaScript 安全分析技术离线分析了这些页面,集中分析了基于 DOM 的跨站点脚本编制及重定向两种漏洞。

测试结果令人惊叹,这些知名网站中有 14% 存在严峻的 JavaScript 安全问题,黑客可以利用这些漏洞进行植入流氓软件,植入钓鱼站点,以及劫持用户会话等。更令人惊叹不已的是,随着 IBM 的 JavaScript 安全分析技术的成熟发展,2011 年中期 X-Force 报告显示,IBM 重新测试了上述这些知名网站并发现了更多的安全漏洞,大约有 40% 的网站存在 JavaScript 安全漏洞。

java企业级通用权限安全框架源码 SpringMVC mybatis or hibernate+ehcache shiro druid bootstrap HTML5

下文本文将结合代码向读者展示常见这些 JavaScript 安全漏洞,以便读者在实际编码过程中注意到这些安全问题,及早规避这些风险。

基于 DOM 的跨站点脚本编制

我们都听说过 XSS(Cross Site Script,跨站点脚本编制,也称为跨站脚本攻击),指的是攻击者向合法的 Web 页面中插入恶意脚本代码(通常是 HTML 代码和 JavaScript 代码)然后提交请求给服务器,随即服务器响应页面即被植入了攻击者的恶意脚本代码,攻击者可以利用这些恶意脚本代码进行会话劫持等攻击。跨站点脚本编制通常分为反射型和持久型:当请求数据在服务器响应页面中呈现为未编码和未过滤时,即为反射型跨站点脚本编制;持久型指的是包含恶意代码的请求数据被保存在 Web 应用的服务器上,每次用户访问某个页面的时候,恶意代码都会被自动执行,这种攻击对于 Web2.0 类型的社交网站来说尤为常见,威胁也更大。应对跨站点脚本编制的主要方法有两点:一是不要信任用户的任何输入,尽量采用白名单技术来验证输入参数;二是输出的时候对用户提供的内容进行转义处理。

但鲜为人知的是还有第三种跨站点脚本编制漏洞。2005 年 Amit Klein 发表了白皮书《基于 DOM 的跨站点脚本编制—第三类跨站点脚本编制形式》("DOM Based Cross Site Scripting or XSS of the Third Kind"),它揭示了基于 DOM 的跨站点脚本编制不需要依赖于服务器端响应的内容,如果某些 HTML 页面使用了 document.location、document.URL 或者 document.referer 等 DOM 元素的属性,攻击者可以利用这些属性植入恶意脚本实施基于 DOM 的跨站点脚本编制攻击。

下面我们将通过一个很简单的 HTML 页面来演示基于 DOM 的跨站点脚本编制原理。假设有这么一个静态 HTML 页面(如清单 1 所示),用来展示欢迎用户成功登录的信息。

清单 1. 存在 DOM based XSS 的 HTML 代码

<HTML>
<TITLE>Welcome!</TITLE>
Hi
<SCRIPT>
 var pos=document.URL.indexOf("name=")+5;
 document.write(document.URL.substring(pos,document.URL.length));
</SCRIPT>
<BR>
Welcome to our system
…
</HTML>
登录后复制

按照该页面 JavaScript 代码逻辑,它会接受 URL 中传入的 name 参数并展示欢迎信息,如清单 2 所示:

清单 2. 正常情况下的访问 URL

http://www.vulnerable.site/welcome.html?name=Jeremy

但如果恶意攻击者输入类似如下的脚本,见清单 3,该页面则会执行被注入的 JavaScript 脚本。

清单 3. 访问 URL 中注入脚本

http://demo.testfire.net"。

图 1. 设置起始 URL

在扫描配置对话框左侧,点击"登录管理",然后点击右侧的"记录 ..."按钮录制登录过程,确保会话中检测处于活动状态。

图 2. 设置登录方法

在扫描配置对话框左侧,点击"测试策略",检查测试策略设置。默认测试策略应该是"缺省",其已经包含了常见 JavaScript 测试,可以点击"已启用 / 已禁止"查看当前默认启用的测试策略。

图 3. 检查测试策略

关闭扫描配置对话框,点击菜单"扫描 -- 仅探索"或单击快捷按钮(如图 4 所示)启动探索。本文仅示例如何检测 JavaScript 安全漏洞,所以选择"仅探索"+ 客户端 JavaScript 分析的测试方式。

图 4. 启动探索

点击菜单"工具– 扩展名– JavaScript Security Analyzer"或者快捷按钮(如图 5 所示)打开"分析 JavaScript"。在弹出的 JavaScript Security Analyzer 对话框中,单击"立即分析"。

图 5. 分析 JavaScript

JavaScript Security Analyzer 扫描完成后,即在结果列表中列出所发现的客户端 JavaScript 安全漏洞。如下图所示,Altoro Mutual 站点存在"基于 DOM 的跨站点脚本编制"及"开放式重定向"漏洞,下文将展示这些漏洞的详细信息。

图 6. 查看扫描结果

展开结果列表中的"基于 DOM 的跨站点脚本编制",单击第一个"JavaScript"问题,在下方的问题信息中将会展示其详细信息。我们可以看出,AppScan 保存了对 JavaScript 问题代码的分析结果,并用黄色标识定位了源(Source)和接收器(Sink),利于开发人员快速修复该漏洞。

图 7. 基于 DOM 的跨站点脚本编制问题信息

同样,展开并查看"开放式重定向"问题,在问题信息栏中展示了该漏洞的代码分析结果。

图 8. 开放式重定向问题信息

注意:

本文为了快速展示如何检测 JavaScript 安全漏洞,所以选择"仅探索"+ 客户端 JavaScript 分析的测试方式。实际工作中,建议您只需要跟通常一样进行扫描(即手工探索结合自动探索站点,然后执行测试),AppScan 默认会在测试过程中自动执行 JavaScript Security Analyzer。

Rational AppScan Standard 能检测已知常见 JavaScript 安全漏洞,但 Altoro Mutual 仅展示了基于 DOM 的跨站脚本编制和重定向漏洞,故本案例的结果列表中仅包含上述两项安全漏洞。

结论

java企业级通用权限安全框架源码 SpringMVC mybatis or hibernate+ehcache shiro druid bootstrap HTML5

本文介绍了 JavaScript 常见安全漏洞,分析了手工检测 JavaScript 代码存在较大的技术难度。IBM Rational AppScan V8.x 新推出了 JSA 扩展组件,在业界率先提供了客户端 JavaScript 安全检测方案。本文跟读者分享了 JSA 的基本原理和技术优势,并结合案例向读者演示了如何使用 IBM Rational AppScan JSA 测试客户端 JavaScript 安全。

本文写的存在问题局限性,欢迎提出批评,共同学习进步。

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板