2009-02-03 63 views
0

我正在维护一个公共网站(无需授权),它使用基于https的Web服务来执行各种操作。大多数对Web服务的调用都是从javascript调用的。保证Web服务安全性最小的方式?

最近我发现一个恶意黑客可能(如果他/她选择的话)直接调用web服务来试图破坏系统。

事实上,他们可以做的事情没有太大的损害,但实际上这些事情很难预测。

请记住,Web服务调用将暴露在JavaScript代码(客户端可用)中,我可以使用哪种最佳方法来防止未经授权和/或恶意访问Web服务。

不幸的是,我不能仅仅通过IP来限制访问,因为那里有基于窗体的客户端应用程序,它们也与Web服务交互。

使用Windows身份验证可能很困难,因为这些客户端应用程序可以在世界的任何地方运行,并且用户不属于任何特定的AD组,甚至不属于这个问题的域。

我会很感激任何建议,铭记两种不同的访问类别和JavaScript代码的暴露。

回答

3

JavaScript调用的任何东西都可以被有权使用该javascript的恶意用户轻松模仿。我建议修改页面以使用更多的服务器端解决方案。将AJAX留给那些不容易被利用的东西。

防止未经授权的用户比支持完全公开访问要容易得多。如果您在用户的Cookie上删除了一个耗时的GUID(与个人用户绑定),它将作为Web Service的参数之一发送出去,但您对应用程序还有一个额外的,通常难以破解的层。

但是,任何有权执行javascript的人都应该没有麻烦将它们拼接在一起。无法访问javascript的人可能很难轻松访问Web服务。

2

这需要一点努力,但如果您的页面也是ASP.net,您可以设置共享会话,打开Web服务的EnableSession属性并使用会话数据来保护会话。可以在这里找到一个概述:http://blogs.lessthandot.com/index.php/WebDev/ServerProgramming/ASPNET/sharing-asp-net-session-state-between-we

这将需要您的Windows应用程序使用不同的“服务版本”的服务消耗。

+0

我将如何保护不同的版本? – 2009-02-03 16:03:37