2015-09-14 69 views
1

我正在使用前端中的angularjs(JavaScript)和後端中的php rest api進行單頁面Web應用程序(SPA)。單頁面應用程序安全

我對服務器做了很多ajax調用,例如提交一個新的故事。安全問題出現了。服務器需要識別請求。由於這是SPA,只有一個客戶(前端)應該有權執行此請求。

我一直在googleing幾天找到一種方法來識別客戶端。我看到我可以在ajax調用的頭文件中發送一個clientid,但由於前端位於JS中,並且用戶可以看到所有的JS代碼,所以這不是安全的。

例子:

$http.post("some/url", somedata, { 
    headers: { 
     "ClientId":"someidforthisclient" 
    } 
}); 

黑客可以看看JS代碼,並複製ClientId。這樣他就可以進行ajax調用,服務器會認爲這個請求是有效的。

所以我的問題是:
我怎樣才能識別服務器中的客戶端,但保證ClientId(或安全令牌等)不能被用戶看到?

+0

用戶需要登錄?如果是這樣,你可以在登錄時創建一個會話,並在ajax調用上讀取該會話。 – Naruto

+0

@Naruto在這個例子中,是的,用戶可以登錄,但是如果用戶想要爲這個呼叫創建一個新帳戶不會是一個會議。 – YvesHendseth

+1

@YvesHendseth - 他們沒有權限訪問超出顯示登錄和註冊屏幕所需的數據。 – Quentin

回答

0

我該如何識別服務器中的客戶端,但保證ClientId(或安全令牌等)不能被用戶看到?

你不行。這是絕對不可能的。對於所有意圖和目的,就服務器而言,客戶端應用程序和它的用戶是一個實體。

你必須信任你的用戶,而不是他們的軟件。

0

您需要做的就是向用戶公開登錄和註冊API。對於任何其他api訪問,首先需要驗證用戶是否已登錄/活動。

要進行身份驗證,您可以在會話中存儲用戶憑證: 現在,用戶憑證將發送到每個請求的api,並且您將能夠在處理請求之前進行身份驗證。

您應該同時加密會話中保存的用戶憑證,以便任何人都不能從瀏覽器控制檯讀取該憑證。