3

这个问题与这个问题类似:

开发 API - 如何使其安全?

我想要的是针对我的服务器上的 REST api 开发一个基于 jQuery 的查询,以检索一些数据以显示在网页上。

我希望网页和 jQuery 的授权用户能够访问这些数据,但不希望其他人能够复制该 jQuery 并将其放在他们的网站上以任何方式访问这些数据。需要明确的是,这一切都发生在浏览器的客户端 - 不涉及任何服务器端代码......

如果可能的话,实现这一目标的正确策略是什么?

我不希望查看网页的最终用户必须知道他们浏览器中发生的任何事情......

谢谢!

4

1 回答 1

3

如果您不要求最终用户对您的站点进行任何类型的身份验证,因此您不能将其用作身份验证方法,并且您希望您的网页能够在没有任何其他干预的情况下使用 REST API,那么不是保护 REST API 的万无一失的方法。如果您想在未经身份验证的浏览器中获取数据,那么任何人都可以检索该数据。

还要记住,他们总是可以只运行您的网页并从您的网页中解析数据,因此,如果使用此网页不需要身份验证,则数据已经可供公众使用。如果不要求身份验证,您就无法真正保护它。

您可以尝试一些方法来让人们更难使用您的 REST API,但没有一种方法是万无一失的。这些只是障碍,而不是安全。

  1. 您可以将过期令牌放入您的网页,将其包含在 Web 请求中,然后在 REST API 中验证它是未过期的令牌。这可以防止某人直接从另一个浏览器页面使用您的 REST API(他们没有合法令牌),但不会阻止服务器首先获取主机页面、检索令牌然后使用它来访问 API .

  2. 您可以尝试检查引荐来源网址并仅满足来自您的域的网络请求。这也不是万无一失的,因为引用者可以被欺骗,但它是一个障碍。

  3. 您可以使数据响应模糊不清,这样就不会立即明白如何解释返回的数据(加扰、加密等)。同样,这只是一个障碍,不会阻止坚定的黑客对您自己的代码如何解释响应进行逆向工程,但这又是更多的工作阻碍了您的 REST API 的临时用户。

许多 REST API 所做的是需要一个accessKey与每个 API 调用一起使用。您的网页将内置一个 accessKey。任何希望使用您的 API(在您的许可下)的外部开发人员都申请一个 accessKey,然后您将其授予他们(如果您希望他们能够使用您的 API)。然后,您的服务器只允许来自批准的 accessKeys 的访问请求。如果您发现某个 accessKey 被恶意使用,您可以在您的服务器上关闭该 accessKey 的使用。如果您自己网页中的 accesskey 被他人违背您的意愿使用,那么您可以更改您在自己网页中放置的 accessKey 并撤销之前 accessKey 的权限。显然,一些流氓开发人员可以不断地从您自己的网页中获取 accessKey,但他们必须定期这样做才能定期使用您的 API。再次,它'

仅供参考,这是另一个类似的讨论:如何限制 JSON 访问?

于 2012-12-05T02:51:03.193 回答