【问题标题】:Silverlight and WCF RIA, securing service calls. Am I missing something?Silverlight 和 WCF RIA,保护服务调用。我错过了什么吗?
【发布时间】:2012-01-10 23:24:00
【问题描述】:

关于对 WCF 服务的调用有一个我似乎无法理解的安全概念。

我构建了一个示例 Silverlight 解决方案,并启用了 WCF RIA。
我有一个调用操作(或任何自动生成的 CRUD),我已经用 [RequiresAuthentication()] 进行了注释:

[RequiresAuthentication()]
[Invoke]
public void DeleteResource(string id)
{
    //...
}

接下来,我更改了 web.config 以启用表单身份验证:

<system.web>
  <httpModules>...</httpModules>
  <compilation>...</compilation>
  <authentication mode="Forms" />    
</system.web>

现在只有经过身份验证的用户才能调用此方法。所以在客户端我需要进行身份验证:

FormsAuthentication auth = new FormsAuthentication();
auth.Login(textBoxUsername.Text, textBoxPassword.Text);

成功登录后,可以调用该方法。

通过这个过程查看 Fiddler 时,我可以看到两件事:

  1. Set-Cookie: .ASPXAUTH=F8FFB8B.....(来自登录步骤)
  2. http://localhost:1107/.../DomainService.svc/binary/DeleteResource(调用方法时)

因此,有害用户可以执行以下操作:

  1. 像普通用户一样登录我的应用程序(他注册并获得了凭据)。
  2. 在使用应用程序时打开 Fiddler 并复制我刚才提到的 cookie 和 URL。
  3. 使用 cookie 构造对该 URL 的 HTTP 调用(例如使用 C# Web 客户端),然后开始删除资源。

如果可能的话,我该如何阻止这个安全漏洞?
如果没有,是什么阻止了用户这样做?

【问题讨论】:

    标签: web-services authentication forms-authentication wcf-ria-services wcf-security


    【解决方案1】:

    老实说,我在这里没有看到安全漏洞:

    1. 如果用户能够登录,则他(我认为)有权执行上述操作。
    2. 身份验证!= 授权。您不仅应该检查用户是否经过身份验证,还应该检查他/她是否被授权执行任何单个操作(当然是在服务端)。 从安全的角度来看,从浏览器调用操作和使用“手动”准备的请求之间应该没有区别 - 每次调用都应该在服务级别上执行授权(你永远不应该信任客户端 - 即 WebBrowser 的原因你已经发布了这个问题)。如果用户尝试他/她没有被授权的事情,就会发生授权错误。
    3. 身份验证 cookie 应设置身份验证过期时间(例如 30 分钟)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 2010-10-29
      • 2011-06-21
      • 1970-01-01
      • 2015-10-13
      相关资源
      最近更新 更多