儘管首先要保護網站免受暴力攻擊(鎖定)至關重要,但字典測試實際上相當不錯,並且可以通過通知用戶使用弱密碼來幫助用戶。
另一個可能發生的爭論是不允許用戶使用弱密碼進行註冊。如果你選擇這種方法,那麼我就是你自己正在做的一切,並且整個互聯網都是一種幫助。標準用戶會反駁這一點,並且存在潛在的用戶/客戶流失。
令人沮喪的是大多數人會忽略它,但有些人會聽。安美居。下來代碼:)
因此,首先建立您的密碼列表,它不需要一個天才谷歌一個。我們會假設list.txt是您的密碼列表。
已編輯:實施了各種規則來從傳遞的字符串生成密碼,以便即使我們只有相對較弱的密碼列表,我們也可以返回它的多個版本。
$users = array(); // Fill it via any means you want, we will
// pretend its an array of username + password
foreach($users as $user) {
// We are going to loop through each line in the list and
// then check it against the password
while($line = fread('list.txt')) {
$hashes = $this->hashPassword($line);
foreach($hashes as $hash) {
if($user['password'] == $hashedPassword) {
echo $user['username'] . ' has a weak password of ' . $line . '<br>';
}
}
}
}
function hashPassword($password) {
$simple = hash('sha256', $password);
$numberReplace = hash('sha256', str_replace(array("o", "i", a"), array(0, 1, 4), $password));
$stupidUserPassword = hash('sha256', ucfirst($password) . "1");
return array($simple, $numberReplace, $stupidUserPassword);
}
這只是一個例子,所以看看其他一些答案也可能有所幫助。有任何問題請隨時詢問我(們)。編輯1:真棒評論員發現了我的邏輯缺陷,這是一個相當可怕的缺陷 - 歡呼聲。
編輯2:谷歌彩虹表,以及如何爲您的特定需求生成。預散列表,加速執行,如果你真的硬核它:)
您寧願保護您的系統免受此類攻擊(儘可能多)。我想到的第一件事就是限制嘗試的次數,並增加用戶在嘗試和/或使用驗證碼(或者只是阻止任何嘗試)之間等待達到特定閾值時必須等待的時間。如果你瀏覽一些相關的問題,我相信你會在這裏找到更多的信息。 – Brice