【问题标题】:Hide query string in API call在 API 调用中隐藏查询字符串
【发布时间】:2017-02-10 15:14:15
【问题描述】:

我正在从 JavaScript 调用 Azure API 应用程序。我需要根据应用程序在其下执行的域(mydonain.org parameter1,对于 mydomain.com parameter2)通过 API 将参数发送到后端。但是我需要对用户隐藏这个参数(当用户右键单击并查看 JavaScript 代码时,他们将无法看到该参数)。

如何通过 API 应用将这些参数从 JavaScript 发送到后端并使用户不可见?

$.getJSON("api/searchItems/" + myparam,
   function (Data) {
   ...
  });

myParam 根据应用程序的执行位置具有不同的值。如果它在 mydomain.com 上执行,则为 1,如果在 mydomain.org 上执行,则为 2,依此类推。 但是这段代码没有通过,因为你可以找出参数是什么并直接调用api。

【问题讨论】:

  • 请提供您目前尝试过的代码。
  • 这是不可能的。
  • API 可以知道请求来自哪里——你不需要告诉它。
  • 用户可以随时使用开发者工具(按F12)查看客户端和服务器之间的每一个查询。

标签: javascript azure-api-apps azure-api-management


【解决方案1】:

此请求违反了黄金法则:如果它位于客户端,那么无论您尝试多少次客户端都能够找到它,句号。

您确实有几个选项,这是主观的,因为没有提供很多细节。

首先您可以对域进行哈希处理,尽管客户端仍然可以轻松地注入他们自己的 JavaScript 代码并确定您正在哈希处理的域。

其次,您是否在服务器上验证客户端数据?您是否有办法将域与会话(它本身并不是有效的 100% 保证)相关联并拒绝欺骗性域请求?

我不确定将域名作为字符串传递时可能存在什么安全问题(如果有的话)。我认为这与表单无关(可能是查看列表中特定域上的数据)。

最后,你使用的任何服务器端编程语言都应该有一种方法可以让你知道域名是什么,假设你没有从域 B 请求域 A 的信息。

【讨论】:

  • 不,我不会将域作为字符串发送,也不会在 JavaScript 中发送参数。所以我的服务器代码需要找出域并基于它注入参数。
  • 我不熟悉 Azure。您还没有澄清客户端/服务器/域关系是否是域 a 始终是域 a,或者客户端和服务器是否可以混合域 a 和 b。此外,绝对没有提供关于这将有助于实现什么目标的上下文,这可能表明您当前的次要目标可能一开始就无效。
猜你喜欢
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2012-11-08
相关资源
最近更新 更多