2015-07-02 48 views
1

我需要在發佈和放置請求時保護我的API for CSRF。爲了做到這一點,我認爲移動設備(例如iOS)需要向API服務器(node.js)發送令牌。該令牌必須經過加密幷包含將在服務器端進行解密的JSON數據。使用IOS上的密鑰對json數據進行加密並使用節點j對其進行解密

要解密數據,移動設備使用服務器知道的相同密鑰。

例如:{_csrf: 123456789}將從通過移動設備發送的令牌中解密,如果匹配,則由API檢查。

  1. 這是正確的方法嗎?如果不是什麼是正確的方式?

  2. 如何在iOS上加密Jon數據並在node.js上對其解密? (JWT令牌沒有庫iOS設備)

你能爲我提供一個示例代碼進行加密在iOS等數據解密上的node.js?

回答

0

只需使用https,即可加密所有內容,即使是任何查詢字符串。

內容使用隨機對稱密鑰進行加密,該密鑰使用證書中的非對稱密鑰加密。此外,對稱密鑰的壽命很短。另外你不必實現和加密例程。

另外請注意,iOS9默認情況下要求https用於所有連接,任何http連接都需要在plist中列出白名單。

如果您進行自己的加密,您將立即遇到在設備和服務器之間共享加密密鑰的問題。這不是一個容易解決的問題。

+0

這不會保護CSRF。這根本不安全。使用CSRF,瀏覽器本身就是問題所在。你仍然必須防止CSRF。 –

+0

由於沒有瀏覽器,因此沒有潛在的CSRF攻擊。 – zaph

+0

「我需要爲CSRF保護我的API,併發布請求。」 「只需使用https ...」是的,這是不安全的部分。 HTTPS不能防止CSRF。對不起,如果我有點強大。 @zaph –

0

從瀏覽器頁面訪問API時,爲了防止CSRF,您可以在HTTP標頭中發送令牌,例如X-CSRF-Token或使用cookie。

例如,讓您的服務器使用X-CSRF-Token標頭在HTTP響應中發送CSRF令牌。您可以讓您的頁面以POST或PUT中的JSON形式發回。或者讓你的頁面從cookie中讀取它並將其放入JSON中。

(HTTPS 從瀏覽器防止CSRF,由於在相同瀏覽器中運行任何其他網站上的任何腳本可以張貼到您的HTTPS服務器自由。你的頁面需要有一個令牌,沒有其他頁面在同一瀏覽器中可以訪問。)

相關問題