2013-02-14 136 views
4

我想創建一個安全的登錄,所以我想加密密碼,然後我將它作爲POST參數發送。我正在做一個SHA1的JavaScript函數。簡單安全的登錄php/javascript

然後我意識到如果有人攔截了加密的密碼,他可以馬上使用它。將其作爲發佈參數發送到相同的URL。

如何確保密碼來自登錄輸入字段?也許用PHP會話?我不想使用安全的http。任何人有一個簡單的選擇?

回答

10

如何確保密碼來自登錄輸入字段?

你不行。

最接近的是通常針對CSRF的防禦...但這隻會阻止用戶欺騙用戶將數據從其網站提交到您的網站。它不會保護密碼。

我不想使用安全http呢。任何人有一個簡單的選擇?

HTTPS 的簡單選項。

+0

是的,但你必須購買證書...等。我正在爲3個用戶創建一個應用程序...通過IP檢查將是一個選項,但它總是令人討厭,因爲通常你想從任何地方訪問 – de3 2013-02-14 17:00:10

+0

證書是很便宜的。如果您想自己處理您的授權密鑰的分配,您甚至可以自行簽名。 – Quentin 2013-02-14 17:02:03

+0

StartSSL對簡單證書是免費的。 – dlp 2013-02-14 17:03:27

3

通過網絡發送SHA1密碼到您的服務器有效地使SHA1散列成爲真正的密碼。

除了沒有優勢,你實際上使你的安全更糟;如果我用SHA1哈希來竊取數據庫,我現在可以直接使用這些哈希來登錄,而無需強制哈希來獲取「真實」密碼。

HTTPS是確保以純文本形式發送密碼的唯一方法。在轉移到HTTPS時,請確保將這些SHA1散列更改爲bcrypt。

如果您擔心額外的SSL證書費用,如果您不擔心瀏覽器錯誤或願意將證書添加到受信任列表(http://resources.arcgis.com/en/help/main/10.1/index.html#//0154000005q6000000)中,也可以生成自簽名證書。

3

唯一可能幫助你的是爲每個會話創建臨時鹽,然後在客戶端加密密碼,然後使用保存在服務器端的相同salt解密密碼,該方法就像一個獨特的令牌,用於防止CRSF,因爲即使是中間人捕獲密碼也不能解密密碼。

最後,您需要創建另一個(不同的算法)來保存數據庫上的密碼,上面的概念思想是爲了保護客戶端和服務器之間的密碼。

解釋:

客戶端 - >請求 - >服務器

服務器 - >響應(發送獨特鹽ö與JavaScript中使用等的session_id()) - > 客戶

客戶端 - > JavaScript執行 - >採用獨特的鹽

客戶端加密密碼 - > POST - >服務器

絲氨酸ver - >用保存的鹽解密密碼 - >提取密碼

我希望有人能糾正我,如果上面的想法是錯誤的!

注: AES可同時用於JS和PHP

鹽=關鍵

可用工具:

AES Advanced Encryption Standard

jsaes: AES in JavaScript

PHP AES DEC/ENC

phpAES

-1

請在通過非加密HTTP發送密碼之前,先向全球和您的所有客戶傾訴並繼續加密密碼。

這個問題有兩個方面,在這種情況下雙方都是你自己和你所服務的客戶。不幸的是,大多數人在許多網站上使用相同的密碼,事實上我們沒有內存容量來處理我們用數百個密碼登錄的匹配數百個網站,我們作爲最終用戶選擇了兩三個,並繼續我們的生活。如果您通過HTTP向客戶發送密碼而無需先加密密碼,並且事實上有所收穫,那麼您肯定會做錯。相信你的客戶他們的密碼,可能與他們登錄銀行的密碼相同,不會落入黑客或甚至更重要的是任何與網站開發有關的人的手中,因爲惡作劇的IT員工確實存在並且它很容易捕獲這些密碼,因爲它們發送到您的應用程序在服務器端進行處理...

我不想考慮有多少web開發人員閱讀本文,並決定在客戶端加密,應該是我們所做的第一件事情之一,它是對用戶的保護,而不是對你自己的保護......保護你的數據庫可以通過多種程序來完成,並且每個安全分析師都有他們對要做什麼或不做的看法,鹽漬-spunked-蹺着 - 不管。客戶端加密不應該被辯論。

+0

你能否將你的答案改爲減少敵意/要求?尊重提問者是這裏的核心租戶。 – 2015-08-07 19:14:23

+0

這個問題是兩歲,與一個公認的答案和其他最新答案。此外,這不能回答這個問題。 – Blubberguy22 2015-08-07 19:35:50