javascript - WebService [Get] 请求的安全问题?

标签 javascript asp.net web-services security csrf

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

为什么?

Web 服务,顾名思义,他不关心它是 GET 还是 POST:

即使一个人做了一个 CSRF:比如嵌入他的恶意网站:

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

那又怎样?

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

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

编辑

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

最佳答案

JSON 劫持在 this article 中有简要说明。 .

假设您有一个网络服务,可以将信用卡号列表返回给当前经过身份验证的用户:

[{"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. 此时,虽然恶意网站已执行脚本,但它无法访问任何敏感数据。可以通过使用对象原型(prototype) setter 来实现对数据的访问。在下面的代码中,当尝试设置 "ccnum" 时,对象原型(prototype)属性被绑定(bind)到定义的函数。属性(property)。

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

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

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

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

关于javascript - WebService [Get] 请求的安全问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12727187/

相关文章:

c# - response.End() 按钮点击后没有回传

web-services - 如何从 Web 服务返回异常?

javascript - 变量在 JavaScript 本地函数中时没有获取值

javascript - 抑制 Google Chrome 中的 "Rats! WebGL hit a snag."错误栏

javascript - 如何防止表单刷新但在同一页面提交表单数据?

asp.net - 悬停时更改表格行样式

javascript - 第 17 行 :20: 'count' is not defined no-undef

asp.net - Web 部署和文件夹权限

c# - 捕获来自 WebService 的传入参数

java - 错误 : org. apache.axis2.AxisFault:请求中未指定方法