2010-08-24 122 views
5

我有一個可能簡單/愚蠢或不:)的佇列。換句話說,我不知道是否足夠公平或完全愚蠢的想法。只是一些自由的想法。帶有JavaScript的密碼保護網站

如果我通過JavaScript通過JavaScript進行登錄(如果我知道),但通過安全哈希算法會受到威脅。例如:

我生成SHA一通,它看起來像

var = 0xc1059ed8... //etc 

並粘貼到代碼。將會有兩個功能。一個會比較兩個值(由我給出的用戶),第二個會生成用戶的輸入。

這可能是安全的theoritically或這是一個可怕的模式和愚蠢的想法? JS可以處理它嗎?編輯:我並不是說像銀行一樣嚴重的認證。正好當我有我的照片,只想要幾個人工智能看他們和地球上的99.9%的人不能看他們:) thx回覆

+3

我可以用['nc'](http://linux.die.net/man/1/nc)和一些軟糖熊僞造登錄名。使用服務器端認證。 – 2010-08-24 16:41:45

+0

喬伊斯小熊+1。 @lukas - 是的,任何擁有一套瀏覽器開發工具的人都可以破解它。 – 2010-08-24 16:44:57

+0

對於那些用戶身份驗證只是爲了保持冷靜因素但並非真正需要的網站(如銀行賬戶或稅務記錄),這實際上是一個非常好的主意。只需在本地存儲密碼(純文本或散列)並對其進行身份驗證。對於特殊效果並使其看起來很真實,請引入一個可變定時重疊消息,說明「登錄」或其他內容。 – Anurag 2010-08-24 17:03:45

回答

9

對不起,沒有骰子:)安全認證不可能單獨使用客戶端Javascript,因爲肯定的認證結果可能是僞造的。您將始終需要服務器端實例進行身份驗證。

+1

呃。我認爲「認證」是不可能的,具體取決於你的意思。然而,在技術上不可能實現海報所描述的內容。儘管如此,它肯定會比普通的身份驗證更加不尋常和困難。有關某些想法,請參閱amdfan的答案。 – PeterAllenWebb 2010-08-24 19:57:03

2

你不能用Javascript保護你的網站。您需要一些方法來驗證服務器上的請求。

因爲您的網站的所有用戶都清楚地看到您的所有JavaScript代碼。所有潛在的攻擊者需要做的就是查看你的網站的源代碼,他們可以繞過你的javascript的密碼檢查位並查看它後面的內容。

您需要在服務器端實施安全性,期末。 ASP.NET有一個內置的方法可以做到這一點,稱爲「表單身份驗證」。或者你可以在php腳本中使用Session變量。

+0

ASP.NET必須做什麼與此,其他則提供*一種*服務器端驗證方法? – 2010-08-24 16:41:00

+1

ASP.NET有很多方法,但它是最簡單的。它也可以在php中使用Session變量完成。我最熟悉ASP.NET,所以我提到了它。 – Nate 2010-08-24 16:44:27

0

由於哈希將駐留在用戶的計算機上(在瀏覽器中),我會說這是一個可怕的主意。這將很容易操縱它。

1

無論如何,你的JS源代碼都是可見的,任何人都可以很容易地僞裝它。你必須做一個服務器端驗證

0

你可以使用這種模式來隱藏密碼通過明文鏈接,並避免https登錄,但不是現有的。

問題是攻擊者可以竊取哈希密碼並使用它登錄到服務器,並且她不需要真正的密碼。

這可以通過挑戰響應阻止,服務器在頁面發送一個「鹽」:一個隨機密碼很大的隨機數,然後散列,所以響應總是不同的。

不幸的是,這樣做的結果是服務器現在需要明文密碼,這是一個壞主意(好吧,這裏有一些技巧)。所以你可能不得不發送一個salt,哈希你的密碼,用salt混淆哈希,再次哈希併發送給服務器。服務器使用salt對存儲的來自用戶db的密碼散列進行散列並對兩者進行比較。

隨着安全事情變得非常迅速複雜,而且在複雜的事情中潛藏着壞人。更多使用經過良好測試的模式的原因,具有良好記錄的算法和仔細實施這些的庫。

在任何情況下,它將是服務器hwo最終說誰可以訪問。

0

你最好不要嘗試進行身份驗證 - 至少這樣你不會給任何人帶來危險的錯覺,即某些涉及可能是安全的。

假設你處理共享密鑰的情況,認證真的很容易。你使用一個相當簡單的挑戰 - 響應算法。基本上,客戶端會向服務器發送一條消息,表明它想要登錄。服務器通過發回一個隨機數來響應。客戶端使用正確的密碼加密該隨機數字,並將其發回。服務器自己加密隨機數,並將結果與​​客戶端發送的結果進行比較。如果它們匹配,則認證成功 - 您已確認客戶端具有正確的密碼。

這樣做的優點:首先,密碼本身絕不會以任何形式通過電線發送,因此攻擊者實際上沒有任何材料可用於嘗試發現密碼。其次,由於服務器爲每次登錄都生成一個新的隨機數,因此攻擊者無法通過重新發送從先前登錄中捕獲的數據包來成功進行身份驗證。

幾乎任何有安全意願的服務器都已經內置了類似的東西。純粹是設置客戶端與您關心的服務器支持的表單正確交互的問題。

2

常見的回答是,「不,你不能做客戶端身份驗證」和傳統的場景這是正確的,但我能想到的至少有兩種方式,使其工作:

  1. 使用SHA密碼哈希重定向到一個靜態HTML頁面(0xc1059ed8 ... html)。只要虛擬目錄不允許列出文件,任何人都無法猜出您想要保護的文件的名稱。儘管這很笨拙。

  2. 在Javascript中使用加密算法(AES等)的實現來解密構成頁面實際內容的文本塊。真的只適用於一個非常有價值的頁面。

服務器端認證真的是最好的,但說客戶端無法完成是不正確的。

+0

我同意。這不是「不可能的」。 – PeterAllenWebb 2010-08-24 19:53:55