阻止任何人执行您的Web服务?

时间:2009-04-03 09:20:49

标签: web-services

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

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

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

我可能会选择推荐人选项。它并不完美,但很容易实现。我不想花太多时间在这上面,因为有些人说如果有人真的想要打破它,他们会找到解决方案。

感谢。

5 个答案:

答案 0 :(得分:6)

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

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

我会为您节省大量时间和挫折感:如果用户的浏览器可以执行该方法,则确定的用户可以。你无法阻止它。

话虽如此,有关为什么你试图这样做的更多信息?背景是什么?也许还有其他东西可以实现你的目标,我们可以建议我们是否知道更多:)

编辑:那里没有更多的信息,但我会用它来运行。您的解决方案根本不会增加安全性,并且会在维护和错误方面给您带来麻烦。它还会给您的用户带来麻烦,因为他们会有一个“不可见”的时间限制,可以在页面上执行操作。根据你到目前为止告诉我们的内容,我会说你最好什么也不做。

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

ND

答案 1 :(得分:3)

  

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

什么阻止某人请求网页,解析结果以提取密钥,然后使用该服务调用网络服务?

您可以检查引荐来源标头,检查来自您的某个网页的来电,但这也很容易被欺骗。

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

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

答案 4 :(得分:0)

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

我建议通过http referrer限制访问Web服务(仅允许来自您的域和null引用者的访问)和/或要求用户身份验证来调用方法。