[英]Secure Access to Authenticated REST Server through Backbone.js?
我有這個REST服務器(由我自己編寫),它由簡單的HTTP身份驗證保護。
現在我使用backbone.js重新編寫應用程序,我不確定如何驗證我的客戶端。 如果我在JS用戶/傳遞中這樣做將是可見的。
那么我應該如何修改我的服務器或我的客戶端JS是安全的?
以前我只是給了用戶並通過PHP傳遞給REST服務器的每個請求,請指導我,謝謝。
HTTP基本身份驗證容易被竊聽和中間人攻擊。 建議使用HTTPS。
但是,如果這不是一個選項,您可以始終將cookie發送回客戶端並在其中輸入用戶名/密碼以防止它顯示在JS文件中。 不言而喻,出於安全原因,密碼至少應加密/散列。 然后,onus將在服務器端從cookie獲取身份驗證詳細信息。
現在,如果您對修改服務器端代碼沒有任何控制權,那么除了在全局ajaxSend()
方法中ajaxSend()
憑證詳細信息之外,您幾乎沒有任何選擇,該方法將在每個AJAX請求中發送用戶名/密碼詳細信息。 您可以將其放在其他.js文件中並使其難以找到,但您幾乎只限於這種安全形式。 雖然,餅干不會讓你的生活更安全。 (如果密碼經過哈希/加密,那就太好了)。
你可以做的另一件事是有一個稍微復雜的安全形式:讓服務器在每次響應時發回一個nonce - 服務器使用服務器的密鑰對nonce進行“簽名”,你可以使用它來'加密'每個請求在客戶端的用戶名/密碼。 然后,您的服務器必須不斷解密憑據。 這不太容易中間人,但仍然不是萬無一失。
如果它是您的選項,HTTPS將為您節省上述每一項。
希望這可以幫助。
更新 (根據評論) :restful-ness的本質是服務器上缺少狀態。 即,沒有會議! 因此,您需要使用客戶端對服務器的每個請求發送用戶憑據。 如果你有一個登錄頁面,那么很難真正做到安寧,因為沒有名為登錄的“資源”。 但是,這是你可以做的:
每個請求必須在沒有服務器維持會話的情況下識別自己 - 這就是無國籍的精神(和寧靜;)
好的,我和我的同事討論過,並提出了迄今為止最好的想法:
在客戶端(站點)中創建一個簡單的控制器並將其命名為RESTAPI,它將作為實際REST服務器的包裝器。
當用戶登錄您的站點時,會創建他的會話。 RESTAPI控制器知道HTTP Authed實際REST服務器的憑據,並代表骨干網訪問REST服務器。
示例:如果我必須提取
/消息/發送
從REST服務器,現在我將在主干集合中點擊此URL
網站/ RESTAPI /消息/發
RESTAPI控制器還首先檢查請求用戶是否在站點上具有正確的會話,並且天氣是否允許他獲取資源。
所以不用擔心不安全的cookie或讓你的REST服務器通過普通的JS或使用任何其他模糊的方法:)
如果您可以訪問服務器端REST代碼,則可以重新設計REST身份驗證。 第一次,登錄時通過https發布用戶名/密碼,然后獲取會話ID,該會話ID可用於后續請求,將其作為cookie傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.