2015-09-18 50 views
0

這是一個相當普遍的問題。想象一下現代的「單頁」JavaScript Web應用程序,它依靠AJAX調用其餘的API訪問數據。Webapp驗證其餘API

其餘的API只能通過提供唯一的令牌來訪問,該令牌是註冊給用戶的。通過提供一些端點的用戶名和密碼可以檢索(或創建)令牌,例如, /login

現在,一旦用戶檢索到令牌,我該如何存儲它?我知道一些可能的方法,但我不知道什麼是安全的。

將它存儲在cookie中:不!導致cookie暴露給文件系統,並且可能容易受到攻擊。

將其存儲在localstorage中的瀏覽器:好吧,可能不是。您訪問的任何頁面均可訪問本地存儲,因此具有抓取功能的惡意網站可能會抓取它。

將其存儲在內存中的JavaScript,直到用戶離開頁面:這應該是相對安全的,我會假設。但是如果我想記住訪問之間的登錄怎麼辦?然後我需要在服務器上保留一個會話嗎?如果我需要這個會話,甚至使用令牌的意義何在?不妨直接在每個請求中重新發送用戶名和密碼,對吧?

我還沒有想到的其他解決方案?人們如何做到這一點?

+0

我不會說您的文件系統很容易被攻擊者利用。 Cookie主要用於存儲API密鑰:只記得加密客戶端和服務器之間的傳輸。 – supertopi

回答

0

我發現了this article,它提供了一個很好的演練,知道什麼。

總之,本地存儲非常難以保證XSS或代碼中的安全錯誤的安全,因爲它可以通過JavaScript訪問。用於存儲會話密鑰Cookies是不是寧靜的,因爲狀態被存儲在服務器上,但是,它們可以被用來存儲訪問令牌像智威湯遜的,它可以變得安全cookie是否HttpOnly;Secure;

0

你錯了幾個帳戶:

儲存於一個cookie:沒!導致cookie暴露給文件系統,並且可能容易受到攻擊。

使用cookie通常是一個非常可接受的存儲祕密的地方。很多人都這樣做。我認爲風險並不在於它存儲在文件系統中(如果黑客可以訪問文件系統,任何類型的保護都將會消失),但是更重要的是,它提交了非常多的請求,這就爲CSRF。如果你不需要它,你可以避免它,很好!

將其存儲在本地存儲在瀏覽器中:好吧,可能不是。您訪問的任何頁面均可訪問本地存儲,因此具有抓取功能的惡意網站可能會抓取它。

它實際上不是由任何頁面訪問,只是你的沙盒(您的域名,通常情況下),所以這餅乾的好處,而缺點。

+0

如果本地存儲在所有瀏覽器中都是安全的,那可能是解決方案,那麼 – Eldamir