如何从最终用户隐藏REST API URL?

时间:2014-07-21 13:27:27

标签: javascript rest

是否可以隐藏我通过AJAX使用的REST URL来填充页面数据?我不希望其他人从我的REST API中获取和消费,但需要使用它来显示我站点中的内容。

如何隐藏最终用户的REST API URL?

7 个答案:

答案 0 :(得分:10)

无法在JavaScript中隐藏最终用户的URL。他们只需在Chrome中打开“网络”面板,或者只需打开Fiddler即可查看。

在您的特定情况下,您可以从用户隐藏URL的唯一真实方法是从服务器端代码代理对API的REST调用。

如果必须使用JavaScript,您始终可以创建和使用API​​Keys,只需监控其使用情况并终止占用过多带宽的API密钥;但同样 - 这并不能阻止某人使用您的API,当您收到来自意外地点的意外数量的流量时,它会让您知道。

你可以通过每天循环API密钥来进一步使用它,所以如果有人想要使用你的API;他们每天都要改变自己的代码 - 但同样,这不会阻止某人,只会让他们放慢速度。

唯一全面的方式是我在第一段中提到的方式 - 但这不能仅从客户端JavaScript完成。

答案 1 :(得分:3)

不是真的。 页面需要有权访问URL才能使用它,这会让你陷入一个古老的问题,即在同时隐藏它的同时向某人显示某些东西。具有内置调试工具的现代浏览器使问题更加复杂:即使您对URL进行加密,也需要对其进行解密以便使用它,并且调试器可以在此时跳转。

您是否担心其他人使用API​​?没有办法阻止其他人查找网址,但可能还有其他方法可以实现您的目标。

答案 2 :(得分:1)

隐藏我假设你的意思是没有与你的Javascript中显示的URL有任何关联。遗憾的是,据我所知,无法隐藏URL,即使您设法将其隐藏在javascript中,该请求也会在任何能够在网页上接收传出和传入的http请求的扩展中显示。

答案 3 :(得分:1)

不可能隐藏任何有动机和决心找到它的人。不建议通过默默无闻地依赖安全性,并且通过REST暴露的所有内容都应被视为潜在的漏洞,并在服务器端进行所有必要的安全检查。像处理公共网页一样处理所有REST API。

答案 4 :(得分:0)

不是发送json数据请求,而是发送api调用中整个html呈现数据的请求。这样,也可以管理json数据的隐藏,并且页面的呈现时间也将加快。无需在客户端进行json数据调用。

答案 5 :(得分:0)

请尝试呈现HTML服务器端(如果您认为服务器容量很高)。如果HTML是预渲染的,则最终用户看不到API调用。

如果您使用的是

  1. 反应-https://www.freecodecamp.org/news/server-side-rendering-your-react-app-in-three-simple-steps-7a82b95db82e/

  2. Angualar-https://angular.io/guide/universal

默认情况下,像Django这样的框架会进行服务器端渲染。

->与客户端渲染相比,服务器端渲染可能会导致服务器负载。

答案 6 :(得分:0)

是的,可能对隐藏 api 有不同的解释,但确实将其隐藏起来,无法直接访问。无论如何,我认为这是隐藏它的重点。

您可以通过您的网络服务器来完成。我正在使用 Nginx。我有一个检查 $http_referer 的 if 语句。如果没有,或者它不是由我的应用程序/前端页面制作的(意味着有人试图直接点击 api),它将返回一个 403 禁止页面。

如果您的应用程序不向您的用户发送电子邮件,请不要担心以下情况:我添加了一个块以允许访问我的静态图像作为唯一的例外,因为我的应用程序发送带有图像的电子邮件而我不不想让它们坏掉。

就是这样。问题解决了。除了我的前端页面/应用程序,没有人可以访问我的 api。

所以是的,API 对用户是隐藏的,因为他们可以尝试点击它,但他们无法进入。