【问题标题】:Least intrusive way of securing a web service?保护 Web 服务的侵入性最小的方法?
【发布时间】:2010-10-05 04:32:02
【问题描述】:

我正在维护一个公共网站(无需授权),该网站通过 https 使用 Web 服务来执行各种操作。大多数对 Web 服务的调用都是从 javascript 调用的。

我最近发生的事情是,如果恶意黑客选择这样做,他/她可以直接调用 Web 服务以试图对系统造成严重破坏。

实际上,它们能造成的伤害并不大,但在实践中这些事情很难预测。

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

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

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

如果有任何建议,请记住两种不同的访问类别和 javascript 代码的公开,我将不胜感激。

【问题讨论】:

    标签: asp.net javascript ajax web-services security


    【解决方案1】:

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

    这需要不同的服务“版本”供您的 Windows 应用使用。

    【讨论】:

    • 如何保护不同的版本?
    • 想到的一种方法类似于cmartin建议的方法,您可以在Windows应用程序启动时向它发出某种令牌,并将其作为参数传递给服务(然后使用颁发的令牌和请求的 IP 地址的组合进行身份验证)
    【解决方案2】:

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

    防止未经授权的用户比支持完全公共访问要容易得多。如果您在用户的 cookie 上放置一个过期 guid,该 guid 与单个用户相关联,它作为参数之一发送给 Web 服务,那么您就有了一个额外的、通常难以破解的应用程序层。

    但是,任何有权执行 javascript 的人都应该可以轻松地将其拼凑在一起。无法访问 javascript 的人可能无法轻松访问 Web 服务。

    【讨论】:

      猜你喜欢
      • 2011-01-17
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多