【问题标题】:Prevent anyone from executing your web service?阻止任何人执行您的 Web 服务?
【发布时间】:2009-04-03 09:20:49
【问题描述】:

我有一个通过 javascript (jquery) 执行的网络服务,用于从数据库中检索数据。我想确保只有我的网页可以执行这些 web 方法(即我不希望人们直接执行这些 web 方法 - 例如,他们可以通过查看 javascript 的源代码来找到 url)。
我打算做的是向所有 webmethods 添加一个“Key”参数。密钥将存储在网页中的隐藏字段中,并且在请求网页时由网络服务器动态设置值。键值仅在 5 分钟内有效。这样,当需要执行 webmethod 时,javascript 会将密钥传递给 webmethod,webmethod 将在执行任何需要执行的操作之前检查密钥是否有效。
如果有人想直接执行 webmethods,他们将没有密钥,这将使他们无法执行它们。
您对此有何看法?有更好的解决方案吗?您认为我的解决方案有什么问题吗?

更多信息:对于我正在做的事情,访问者没有登录,所以我无法使用会话。我知道如果有人真的想打破这一点,他们可以解析 html 代码并获取隐藏字段的值,但他们必须定期执行此操作,因为密钥每 x 分钟更改一次......这当然是可能的,但是希望对他们来说会很痛苦。

编辑:我正在做的是一个网络应用程序(而不是一个网站)。数据通过网络方法(+jquery)检索。我想阻止任何人使用我的数据构建自己的 Web 应用程序(如果他们可以执行 Web 方法,他们可以这样做)。显然这对他们来说是有风险的,因为我可以随时更改网络方法。

我可能会选择推荐人选项。它并不完美,但很容易实现。我不想像你们中的一些人所说的那样花太多时间在这上面,如果有人真的想打破它,他们无论如何都会找到解决方案。

谢谢。

【问题讨论】:

  • 会话和登录不是一回事

标签: web-services


【解决方案1】:

嗯,它没有任何技术错误,但是你假设“他们没有使他们无法执行的密钥”是不正确的,因此整体的安全性事情是有缺陷的。

检索隐藏字段的值并使用它来执行方法非常简单。

我会为您节省大量时间和挫折:如果用户的浏览器可以执行该方法,那么一个坚定的用户就可以。你将无法阻止它。

话虽如此,有关为什么您尝试这样做的更多信息?上下文是什么?如果我们知道更多,也许还有其他可以实现您的目标的方法:)

编辑:那里没有更多信息,但我会继续使用它。您的解决方案根本不会真正提高安全性,并且会在维护和错误方面让您头疼。它还会让您的用户感到头疼,因为他们将有一个“不可见的”时间限制来在页面上执行操作。就目前为止你告诉我们的情况,我想说你最好什么都不做。

你想在这里保护什么样的方法?你为什么要保护他们?

ND

【讨论】:

    【解决方案2】:

    更多信息:对于我正在做的事情,访问者没有登录,所以我无法使用会话。

    如果您要向客户端发送一个密钥,并且每次他们想要使用服务时都会发回该密钥,那么您实际上是在创建一个会话。您来回传递的密钥在功能上与 cookie 没有什么不同(预计它只会在某些请求上传递回来。)还不如省去麻烦并设置一个将在 5 分钟内过期的临时 cookie。为过期的 cookie 添加一点服务器端检查,您可能会得到最好的结果。

    【讨论】:

      【解决方案3】:

      如果您正在使用设置会话 ID 的语言或框架,您可能已经拥有这样的密钥。使用 Ajax 调用发送它。 (请注意,这样的会话会持续超过 5 分钟,但请注意,您使用它来为用户定期获取和发布 HTPP 保持状态。)

      【讨论】:

      • 差不多。将该 sessionid 与您在内部保留的 IP 相匹配,您就有了一种相当强大(但肯定不是防弹的)方法来防止有人抢夺和使用 sessionkey。
      【解决方案4】:

      如何阻止某人请求网页、解析结果以提取密钥然后用它调用网络服务?

      您可以检查引荐来源标头以检查呼叫是否来自您的某个页面,但这也很容易被欺骗。

      我认为解决此问题的唯一方法是要求身份验证。如果您调用 Web 服务的网页要求用户登录,那么您可以检查他们在调用 Web 服务时是否已登录。这不会阻止其他页面使用您的网络服务,但它确实可以让您更多地跟踪使用情况,并且通过一些速率限制,您应该能够防止滥用您的服务。

      如果您真的不想冒网络服务被滥用的风险,请不要将其公开。这是唯一的故障安全解决方案。

      【讨论】:

        【解决方案5】:

        假设您生成了一个从 12.00 到 12.05 有效的密钥。在 12.04 我打开页面,平静地阅读它,并在 12.06 我触发使用您的 Web 服务的操作。即使我是合法访客,我也会被阻止这样做。

        我建议限制通过 http 引荐来源网址访问网络服务(仅允许来自您的域和空引荐来源网址的人)和/或要求对调用方法进行用户身份验证。

        【讨论】:

        • http_referer 是微不足道的恶搞
        • 欺骗是微不足道的,但另一个网站不能重用他的 javascript,因为普通客户端会发送非欺骗的引用者
        猜你喜欢
        • 2022-07-02
        • 2010-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多