2017-02-10 177 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