如何在MVC3中限制对我自己的应用程序的某些控制器的访问?

时间:2011-10-27 09:22:47

标签: jquery ajax asp.net-mvc-3

我有一个控制器,我专门用于AJAX的东西,即jquery调用一个特定的URL,它传回一些json。但是,此控制器中的某些操作会使用我们付费的服务,并且我不希望其他人能够在我的应用程序之外调用这些服务。

我已经看到this question限制了IP对控制器的访问,这一切都很好,但从技术上讲,这将被称为客户端,我不能使用这种限制。

那我该怎么做呢?或者我是以错误的方式去做的?

修改:将其作为POST而不是GET更好吗?

Edit2:我想我需要解释一下。 ajax调用是我的Web应用程序中的URL。该控制器用于(服务器端)从查找服务调用Web服务的操作。

2 个答案:

答案 0 :(得分:1)

首先,您需要认识到,实际上没有办法阻止某人试图调用您的Web服务。即使有了IP限制,某人仍然可以通过伪装某人可能会做的IP地址来触发该方法,如果他们只是想弄乱你。

首先,您可能认为这对于将WebC应用程序用于Web应用程序是一种威慑,但实际情况并非如此。虽然从某个MVC Web应用程序中挖掘任何Web功能肯定更容易,因为该方法只能返回所需的数据,但没有什么可以阻止某人抓取呈现的HTML响应服务器端脚本。

考虑到这一点,您可以使用许多方法来限制对此特定功能的访问,但它们与任何其他Web应用程序MVC没有区别。但是,您使用哪一个完全取决于此第三方服务提供的数据类型。

  1. 如果您的网站是严格公开的,没有用户名或密码,那么Web方法的一个选项就是不总是获取您从第三方系统轮询的任何数据的“实时值”。您可以在上次轮询数据时检查Web方法,如果它在您设置的某个任意限制下,只需返回您在服务器上保存的缓存值。
  2. 如果您的站点具有用户名和密码机制,则可以限制特定用户每小时访问该服务的次数。当然,可以设计机制来自动创建多个帐户,但是Captcha机制可以帮助您解决这个问题。
  3. 为服务本身创建Captcha机制也是一种选择。虽然这不会帮助您限制来自特定个人的请求数量,但这将有助于确保人类每次都必须输入一个响应,这至少会减慢服务被击中的次数。
  4. 如果你能给我一些关于这些服务的更多背景知识,我可以提供更具体的解决方案。

    编辑:使用POST或GET方法在这种情况下完全没有区别。

答案 1 :(得分:1)

所以听起来你正在使用外部邮政编码查询服务(我假设你按请求付费)并且你不希望别人通过你的服务捎带来制作邮政编码查询请求,你将在那里收费?

您应该做的第一件事是检查您的服务提供商是否允许您指定推荐人的白名单。由于其中许多api意味着您的“api密钥”在某处使用javascript,因此通常仅用于允许来自特定主机或IP地址的服务请求(使用您的密钥)。

完成此操作后,您需要确保仅从您网站中的网页调用您的帖子代码查找操作。

您可以在客户端使用某种防伪标记执行此操作。 Phil Haack posted recently关于如何使用AJAX帖子。