2011-08-25 17 views
5

記号(+、 - 、=記号を含む)OR/ANDを含むパスワードをユーザーが作成したかどうかを確認しようとしています。 どうすればいいですか?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/

関連する問題