我已经构建了一个使用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"请求必须来自同一个域.
使用Web服务需要保护两种方案:
用户是否经过身份验证?
动作来自我的页面吗?
如果您正在使用表单身份验证,则已经处理了身份验证.如果您的Web服务位于站点的受表单身份验证保护的区域,则除非他们已登录,否则任何人都无法访问您的Web服务.
第二种情况是一个稍微棘手的故事.该攻击称为CSRF或XSRF(跨站点请求伪造).这意味着恶意网站在用户仍然登录到您的网站时代表您的用户执行操作. 这是一篇关于XSRF的精彩文章.
杰夫阿特伍德总结了上面的链接,但这里有四个步骤的XSRF保护:
写一个GUID到你的用户的cookie.
在AJAX调用之前,从cookie中读取该值并将其添加到Web服务POST.
在服务器端,将FORM值与cookie值进行比较.
由于网站无法从其他域读取Cookie,因此您是安全的.