2017-02-10 180 views
-2

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

我怎么能发送从JavaScript这个参数,通过API的应用程序到后端,并在无形的用户?

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

myParam根据应用程序执行的位置有不同的值。如果它在mydomain.com上执行,则它为1,如果它在mydomain.org上执行,则为2等。 但此代码未被批准,因为您可以找出参数是什么并直接调用api。

+1

请提供代码你到目前为止已经尝试过。 – geeksal

+1

这是不可能的。 – Danmoreng

+0

API可以告诉请求的来源 - 你不需要告诉它。 – Archer

回答

2

这个请求打破了金科玉律:如果它位于客户端那么无论你多么努力的客户端将能够找到它,期限。

你确实有几个选项,并因为不是很多细节已经给出了这是主观的。

首先,你可以哈希域虽然客户仍可以轻松地注入自己的JavaScript代码,并确定你哈希什么域。

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

我不知道随便如果有的话,安全问题有可能是通过一个域名作为一个字符串什么。我认为这不是与表单结合使用(也许是从列表中查看特定域上的数据)。

最后无论服务器你使用应该让你知道这个域名是什么的方法,假设你没有从域B.请求信息域A端编程语言

+0

不,我没有发送域作为字符串,我不会发送JavaScript内的参数。所以我的服务器代码需要找出域并根据它注入参数。 – user217648

+0

我对Azure不熟悉。您尚未澄清客户端/服务器/域关系是否为域a始终是域a,或者客户端和服务器是否可以混合域a和b。此外,关于这将有助于实现什么目标,绝对没有提供任何背景信息,这可能表明您目前的次要目标可能是无效的。 – John