1

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

为什么 ?

Web service ,因为它的名字是 service ,所以他不关心它是 GET 还是 POST :

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

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

所以呢 ?

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

有人可以帮我找出例子的问题吗?

编辑

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

4

2 回答 2

4

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>. 浏览器将发出 GET 请求,json_server.php并且用户的任何身份验证 cookie 将与请求一起发送。

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

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

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

还有其他形式的 JSON 劫持技术不依赖于浏览器对该__defineSetter__功能的支持。这只是进行攻击的一种方式,但本文中描述的还有许多其他方式,例如Array constructor clobbering, UTF-7, ES5 functionality.

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

于 2012-10-04T12:48:40.823 回答
0

好吧,如果您按照您提供的文章中链接的文章进行操作,可以在此处找到: http: //ajax.asp.net/docs/overview/AsynchronousLayerOverview.aspx,然后您可以继续阅读,这是唯一的原因指定是这样的:

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

于 2012-10-04T12:49:01.170 回答