繁体   English   中英

WebService [Get] Requests的安全问题?

[英]Security issue with WebService [Get] Requests?

在阅读了有关试图解释为什么asmxs不应该允许获取请求的着名(且唯一)的文章 ,所以我们不应该使用: [ScriptMethod(UseHttpGet = true)] ,我仍然有一个问题:

为什么?

Web服务,因为它的名字是服务,他不会想要关心它是GET还是POST:

即使一个人做了CSRF:就像嵌入他的恶意网站一样:

<script type="text/javascript" src="http://contoso.com/StockService/Stock.asmx/GetQuotes?symbol=msft" /> 

所以呢 ?

通过asmx POV - 这只是一个普通的请求。

有人可以通过示例找到我的问题吗?

编辑

新浏览器解决了许多问题。 链接显示了一些应在新浏览器中测试的其他方法。

本文简要介绍了JSON劫持。

假设您有一个Web服务,它向当前经过身份验证的用户返回信用卡号列表:

[{"id":"1001","ccnum":"4111111111111111","balance":"2345.15"},
 {"id":"1002","ccnum":"5555555555554444","balance":"10345.00"},
 {"id":"1003","ccnum":"5105105105105100","balance":"6250.50"}]

以下是攻击的执行方式:

  1. 获取经过身份验证的用户访问恶意页面。

  2. 恶意页面将尝试从用户登录的应用程序访问敏感数据。 这可以通过在HTML页面中嵌入脚本标记来完成,因为同源策略不适用于脚本标记。 <script src="http://<json site>/json_server.php"></script> 浏览器将向json_server.php发出GET请求,并且该用户的任何身份验证cookie都将与请求一起发送。

  3. 此时恶意站点已执行该脚本,它无法访问任何敏感数据。 通过使用对象原型设置器可以实现对数据的访问。 在下面的代码中,当尝试设置"ccnum"属性时,对象prototypes属性被绑定到定义的函数。

     Object.prototype.__defineSetter__('ccnum',function(obj) { secrets = secrets.concat(" ", obj); }); 

此时的恶意网站已经成功劫持了敏感的财务数据( ccnum由返回) json_server.php

还有其他形式的JSON劫持技术,它们不依赖于__defineSetter__函数的浏览器支持。 这只是进行攻击的一种方法,但本文中描述了许多其他方法,例如Array constructor clobberingUTF-7ES5 functionality

因此,在ASP.NET中默认禁用返回JSON的GET请求。

好吧,如果你按照你提供的那篇文章进行链接,可以在这里找到: http//ajax.asp.net/docs/overview/AsynchronousLayerOverview.aspx ,你可以继续阅读,这是它的唯一原因指定是这样的:

对于修改服务器上的数据或公开关键信息的方法调用,不建议使用GET请求。 在GET请求中,消息由浏览器编码到URL中,因此更容易被篡改。 对于GET和POST请求,您应遵循安全准则来保护敏感数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM