6

我已经构建了一个应用程序,它使用 jQuery 和 JSON 来使用 ASP.NET .asmx Web 服务来执行 crud 操作。应用程序和 .asmx 在同一个域中。我不介意人们远程使用 .asmx 的读取操作,但不希望人们随意删除东西!!!

我可以将我希望公开访问的方法和“隐藏”的方法拆分为 2 个 Web 服务。如何将“hidden”.asmx Web 服务的调用锁定到其托管的同一个域?

提前致谢。

编辑: 有人可以对此发表评论,似乎是合理的(来源:http ://www.slideshare.net/simon/web-security-horror-stories-presentation):Ajax 可以设置 Http 标头,普通形式不能。Ajax 请求必须来自同一个域。

所以“x-requested-with”“XMLHttpRequest”请求必须来自同一个域。

4

3 回答 3

8

有两种情况需要使用 Web 服务来保护:

  1. 用户是否经过身份验证?
  2. 操作是否来自我的页面?

如果您使用的是表单身份验证,则已经处理了身份验证部分。如果您的 Web 服务位于站点的受表单身份验证保护的区域,则除非登录,否则任何人都无法访问您的 Web 服务。

第二种情况是一个稍微棘手的故事。该攻击被称为 CSRF 或 XSRF(跨站点请求伪造)。这意味着恶意网站会在您的用户仍登录到您的网站时代表他们执行操作。 这是一篇关于 XSRF 的精彩文章

Jeff Atwood 在上面的链接中总结了这一切,但这里是 XSRF 保护分四个步骤:

  1. 将 GUID 写入用户的 cookie。
  2. 在调用 AJAX 之前,从 cookie 中读取此值并将其添加到 Web 服务 POST。
  3. 在服务器端,将 FORM 值与 cookie 值进行比较。
  4. 因为网站无法从其他域读取 cookie,所以您是安全的。
于 2009-03-08T06:57:25.817 回答
-1

在 AJAX 中,浏览器进行调用,因此即使您要检查域是否相同,它也不够安全,因为它很容易被伪造。

您需要使用某种身份验证/授权令牌(最好有超时)来保证事情的安全。

于 2009-03-07T20:58:40.467 回答
-1

快速而肮脏的解决方案是使用 IP 地址限制,只允许您的域的 IP 地址通过 IIS 访问。

使用 HTTP 身份验证可能会更好。有很多方法可以做到这一点,我发现ASP.NET Web 服务中的身份验证是一个很有帮助的概述。

于 2009-03-07T21:00:33.380 回答