2010-10-27 47 views
1

我做了一個簡單的web應用程序,其中很多事情都是在不刷新窗口的情況下完成的。現在我遇到了一個我以前沒有意識到的問題。如果我找不到解決方案,我將不得不重新設計整個應用程序,這將花費很多時間,並可能會使用它的一些涼爽。哎喲。好的,回到問題。是否可以在不刷新窗口的情況下進行「密碼」驗證?

爲了揭示 - 比方說 - 網站的「祕密」部分,用戶必須輸入一種...密碼並點擊「確認」。但我不知道如何存儲密碼以防止用戶閱讀,例如在網站的源代碼中。

目前,我使用mysql數據庫 - 我連接它,在PHP中讀取密碼並將其存儲在全局JavaScript變量中。但是進入源代碼後它當然是可讀的。

是否有可能做這樣的事情?是否可以祕密檢查密碼而無需刷新網站並使用PHP進行檢查?

回答

6

我推薦你在實施之前詢問。這些日子裏似乎很少有人這樣做。

首先,信不信由你,你不想在任何地方實際存儲密碼。你想使用一種叫做salted hash的東西。使用這種技術,您最終得到一個基於密碼的隨機查找代碼,並可用於驗證用戶是否擁有他們所說的密碼。

其次,您將要使用Ajax請求在Javascript中爲您執行此檢查。我更喜歡使用JQuery這個庫,因爲它提供了一個非常好的,跨平臺的,經過測試的,易於使用的包裝器,它使得這些東西變得很容易。

+0

這就是我說的:) – Ariejan 2010-10-27 13:25:50

+0

這是一個很好的想法......但重新設計似乎不可避免,但爲什麼? - 好的,我可以通過製作「鹽醃散列」來檢查密碼,但「網站的祕密部分」內容又如何呢?我希望它在檢查密碼之前也是隱形的......而這正是哈希法無法解決的問題。呃......或者也許有一種方法? – kremuwa 2010-10-27 13:39:26

1

您可以使用MD5或SHA1編碼密碼,爲您提供32或40個隨機字符的字符串。這個字符串是非常難(不是不可能),以反轉到原始密碼。

MD5和SHA1具有給定值始終會導致相同散列值的屬性。例如。如果你將「stackoverflow」散列到123ABC,並且你在另一臺機器上再次執行它,該機器也將產生123ABC。

因此,只需對用戶使用相同算法輸入的密碼進行編碼,就可以比較兩個哈希值。如果它們匹配,密碼是正確的。

1

我已經在python中實現了一個這樣的應用程序並採用了以下方法
1)通過向後端發送ajax post請求來執行一次性身份驗證。你可以使用庫(jQuery,道場等)或簡單的JavaScript,我選擇了後者。
2)驗證成功後,使用uuid庫生成一個隨機唯一的ID,我們稱之爲會話ID。 Php有以下uniqid庫,應該爲你做這件事
3)將此會話ID存儲在cookie和/或變量中
4)將會話ID和用戶ID存儲在memcache或數據庫中以檢查會話活躍。

我知道php有一個內置的session handling mechanism所以第2步將被修改,並且爲你完成3 & 4的繁重工作。

相關問題