我构建了一个应用程序,它使用 jQuery 和 JSON 来使用 ASP.NET .asmx Web 服务来执行增删改查操作。应用程序和 .asmx 位于同一域中。我不介意人们远程消耗 .asmx 的读取操作,但不希望人们随机删除内容!
我可以将我想要公开访问的方法和“隐藏”的方法分成 2 个 Web 服务。如何将对“hidden”.asmx Web 服务的调用锁定到其托管的同一域?
提前致谢。
Edit:有人可以对此发表评论吗,似乎有道理(来源:http://www.slideshare.net/simon/web-security-horror-stories-presentation http://www.slideshare.net/simon/web-security-horror-stories-presentation):
Ajax 可以设置 Http headers,普通形式不能。
Ajax 请求必须来自同一域。
因此“x-requested-with”“XMLHttpRequest”请求必须来自同一域。
您需要使用 Web 服务来保护两种情况:
- 用户是否经过身份验证?
- 该操作来自我的页面吗?
如果您使用表单身份验证,则身份验证部分已经处理完毕。如果您的 Web 服务位于网站的表单身份验证受保护区域,则除非登录,否则任何人都无法访问您的 Web 服务。
第二个场景是一个稍微棘手的故事。这种攻击称为 CSRF 或 XSRF(跨站请求伪造)。这意味着恶意网站会在您的用户仍登录到您的网站时代表他们执行操作。这是一篇关于 XSRF 的精彩文章 http://www.codinghorror.com/blog/archives/001171.html.
Jeff Atwood 在上面的链接中总结了这一切,但 XSRF 保护分为四个步骤:
- 将 GUID 写入用户的 cookie。
- 在 AJAX 调用之前,从 cookie 中读取该值并添加它
到 Web 服务 POST。
- 在服务器端,将 FORM 值与 cookie 值进行比较。
- 由于站点无法读取其他域的 cookie,因此您是安全的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)