如何发布访问 REST api 的 jQuery 代码,但防止未经授权的使用

Pat*_*eil 4 security rest jquery

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

开发 API - 如何确保其安全?

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

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

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

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

谢谢!

jfr*_*d00 5

如果您不要求最终用户对您的网站进行任何类型的身份验证,因此您不能将其用作身份验证方法,并且您希望您的网页能够在没有任何其他干预的情况下使用 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)。然后,您的服务器仅允许来自已批准的 accessKey 的访问请求。如果您发现有人非法使用 accessKey,您可以在服务器上关闭该 accessKey 的使用。如果您自己的网页中的accessKey被他人违背您的意愿使用,那么您可以更改您在自己的网页中放置的accessKey,并撤销之前的accessKey的权限。显然,一些流氓开发人员可能会不断从您自己的网页中获取 accessKey,但他们必须定期这样做才能定期使用您的 API。再说一次,这只是一个有决心/知识渊博的开发人员可以克服的障碍,但它是您对公众已经可用的数据所能做的最好的事情。

仅供参考,这里还有另一个类似的讨论:How to limit JSON access?