【发布时间】: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 时,我可以看到两件事:
- Set-Cookie: .ASPXAUTH=F8FFB8B.....(来自登录步骤)
- http://localhost:1107/.../DomainService.svc/binary/DeleteResource(调用方法时)
因此,有害用户可以执行以下操作:
- 像普通用户一样登录我的应用程序(他注册并获得了凭据)。
- 在使用应用程序时打开 Fiddler 并复制我刚才提到的 cookie 和 URL。
- 使用 cookie 构造对该 URL 的 HTTP 调用(例如使用 C# Web 客户端),然后开始删除资源。
如果可能的话,我该如何阻止这个安全漏洞?
如果没有,是什么阻止了用户这样做?
【问题讨论】:
标签: web-services authentication forms-authentication wcf-ria-services wcf-security