Silverlight和WCF RIA,确保服务电话安全。我错过了什么吗?

时间:2011-12-23 13:54:21

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

有一个关于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(调用方法时)
  3. 因此,有害用户可以执行以下操作:

    1. 像普通用户一样登录我的应用程序(他注册并获得了凭据)。
    2. 在使用应用程序时打开Fiddler并复制我刚才提到的cookie和URL。
    3. 使用cookie构建对该URL的HTTP调用(例如,使用C#Webclient),然后开始删除资源。
    4. 如果可以,我该如何阻止此安全漏洞?
      如果没有,是什么阻止用户这样做?

1 个答案:

答案 0 :(得分:0)

说实话,我在这里看不到安全漏洞:

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