Ajax或“非同步JavaScript和XML”是一个相对较新嘚和动态的Web技术其工作在异步方式与服务器进行交互。在传统的Web方法使一个新的浏览器刷新整个页面并重新加载它,这是既耗时又耗費带宽的要求使用AJAX,子程序可以不完全重新加载页面请求新的服务器数据从而给用户带来更快的和丰富的体验。它发生在后台用户不知情的情况下用户看到的是一个流畅的体验。XMLHttpRequest对象是用来与服务器的交互Ajax请求一个简单的例子就是通过谷歌搜索提示语的人口,而我們开始打字的话没有发送的全部内容,它不断猜测更新和加载搜索结果没有击中搜索按钮。
在Ajax请求/响应的数据可以在XML或JSON认为这是一種重量轻的数据传输比传统形式的基础数据。
数据泄漏在Ajax或JSON劫持:
在继续之前让我们明白一个重要的概念:
)的服务器JSON形式的阵列和数据敏感性质用户获取认证令牌(身份验证)的应用。
攻击者诱使用户点击一个链接使用网络钓鱼或发送电子邮件给用户。
用户点击该链接時页面加载,从攻击者的网站下面的脚本嵌入:
脚本再次发出请求,victimsite.com和访问主JSON页发送敏感数据到攻击者的网页其中有两个:现在JSON数據和身份验证令牌。
然而,上述攻击的先决条件是JSON数据必须敏感于自然和浏览器应该接受__defineSetter__方法,它覆盖了现有的DOM或函数时调用属性setter在以上示唎中,只要是被称为“t”内的属性,函数警报并且显示它。然而没有多少浏览器支持defineSetter,’方法
切勿将敏感信息发送JSON或不给他们使用JSON数組,这使得它可以通过脚本标记有效的JavaScript
只服务身份验证的请求,意味着使用某种形式的身份验证来保护数据
CSRF代表跨站请求伪造利用Web技術的一个基本的缺陷,它依赖于基于cookie认证并提交一个请求从用户到服务器在CSRF攻击者可以欺骗用户执行,这是一个动作,不是有意的必须進行身份验证和用户的攻击的时候,有一个有效的会话ID攻击者也是使用一个有效的应用程序,并知道应用程序的内部运作更多关于CSRF这裏:
尽管CSRF是在传统的Web应用中非常普遍,如果预防是无法实现的它也可以进行基于AJAX的Web应用程序。唯一困难的是因为它是一个隐藏的请求,它不是直接创建一个有效的请求我们需要不仅要求技巧的标准,但我们也需要坚持有效的数据格式
1.用户到Web应用程序进行身份验证,並浏览其内容
2.攻击者,也是一个有效的用户创建一个用户身份验证点击一个链接,获取以下html页面和加载载在其浏览器。
3.因此浏览器发出請求代表身份验证的用户
为了防止这种攻击,类似传统的做法要做到这一点有两种方式:
嵌入非猜测的,随机的令牌称为当前请求/响应鼡户请求的身份验证和一个来自攻击者的区分。这种方法基本上服务器嵌入当前请求页面当用户提交页面的服务器的可用性检查的随机數,如果匹配,完成请求,否则拒绝。
在服务端服务器检查这个header如果发现请求匹配,否则拒绝我们需要利用这种技术使用XHR调用,还没有用常規POST和GET请求
XSS或跨站脚本:当一个应用程序不将用户输入或输出为HTML渲染之前,它成为一个诱人的目标因为他们可以在应用程序中插入恶意嘚JavaScript,并随后进行放一炮而红的攻击目标例如,会话劫持网络钓鱼,恶意软件感染等更多在这里:
可能的XSS指针是在JavaScript文件中的以下功能(JS)的存在Ajax从后端接收响应,并填充的浏览器使用以下功能之一:
document.write(): 这可能导致基于DOM的XSS。如果值没有被正确过滤或修改一个特定部分的信息使用eval()是另一个指针
其他易受伤害的功能被定为的innerHTML()和write()。
仔细扫描JavaScript的文件在客户端加载目标页面的加载时间,可以给正在使用危害的函数一些提示Firebug工具,它是伟大的非常方便的在做这样的分析。我们可以找出所有的Ajax调用XHR标签
扫描的JavaScript文件也很容易用这个工具咜会列出所有依赖JS的文件,从而可以得到审查存在一个或多个上述功能点击脚本标签提供的所有JavaScript文件加载:
我们需要分析这些功能,因為它们可能是未过滤的数据可被利用的入口点。
XSS有效加载在Jason和它们的效果:
几乎是相同的我们会做传统的XSS预防:
输入验证:严格检查什么是允许的,什么不是在用户输入。正确过滤白名单允许的字符
输出验证:这意味着所有的输出必须正确编码,然后呈现给用户如HTMLEncoding
因此,大部分影响Ajax的问题是那些传统的Web应用程序他们可能同样的方式得到减轻。