1

有一个关于对WCF服务的调用的安全概念,我似乎无法理解。Silverlight和WCF RIA,保护服务调用。我错过了什么吗?

我已经构建了一个示例Silverlight解决方案,并启用了WCF RIA。
我有一个invoke操作(或任何的自动生成的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); 

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

当提琴手通过这个过程寻找我可以看到两件事情:

  1. 的Set-Cookie:.ASPXAUTH = F8FFB8B .....(从登录工序)
  2. http://localhost:1107/.../DomainService.svc/binary/DeleteResource(当该方法被称为)

所以有害的用户可以执行以下操作:

  1. 登录到我的应用程序就像一个再gular用户(他注册并获得凭据)。
  2. 在使用应用程序时打开Fiddler并复制刚才提到的cookie和URL。
  3. 使用cookie构建对该URL的HTTP调用(例如,使用C#Webclient),并开始删除资源。

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

回答

0

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

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