2011-08-25 84 views
5

我想檢查用戶是否創建了包含符號(包括+, - ,=符號)或/和數字的密碼。 我該怎麼做?使用PHP執行強密碼

function check_password($str) 
{ 

    if (!preg_match ("/[&@<>%\*\,\^!#$%().]/i", $str)) 

    { 
     $this->form_validation->set_message('check_password', 'Your password should contain a number,letter,and special characters"'); 
     return FALSE; 
    } 
    else 
    { 
     return TRUE; 
    } 

} 

謝謝。

+0

您是否提供了您的問題的答案? – Dani

+11

我個人,我*恨*網站,迫使我有一些奇怪的屁股特殊字符在我的密碼。因爲對我而言,唯一的影響是我傾向於忘記它,並且需要寫下來,在這個過程中創造一個安全漏洞 - 如果你做了一些速率限制,登錄嘗試。 –

+0

如果我想使用'_'會怎麼樣? '' –

回答

2

您不必列出所有這些字符。任何不是一個數字或字母是一個特殊字符(或空格):

(?:[^0-9A-z]|[0-9]) 
7

我對密碼強度檢查的建議是要打破你有到單獨regexs各項要求,特別是:

$regexs = array(
       '/[0-9]+/', // Numbers 
       '/[a-z]+/', // Lower Case Letters 
       '/[A-Z]+/', // Upper Case Letters 
       '/[+-=]+/', // Your list of allowable symbols. 
    ); 

將計數器初始化爲0.對於每個正則表達式,測試它是否匹配。如果是,請將計數器增加1.如果計數器大於3,則返回true(或4,如果您希望它們具有非常真實的密碼),否則返回false。

我認爲如果您的要求發生變化,從長遠角度來看,這對您來說將更具可維護性。

0

我建議朝不同的方向看。如果您要施加限制,只需要更長時間。正如已經指出的那樣,使用符號很可能會導致用戶忘記密碼並且永遠不會回到您的網站。爲了最大限度地提高安全性,請在註冊頁面上發佈以下漫畫:http://xkcd.com/936/