1

さて、私は次のコードを使用しています (ここで$password= 投稿パスワード変数)。これは大きなフォーム検証コードの一部であり、このコード行はトリガーされるべきではないときにトリガーされるようです。その一部が廃止されているのではないかと心配しています。pass123APassword12、および を入力してみましたが1Password、すべてこのコードがトリガーされます。なんで?

elseif(preg_match("/^[a-zA-Z0-9]$/", $password) == 0)
echo('Error - the password can only contain alpha-numeric chars!');
4

2 に答える 2

3
preg_match("/^[a-zA-Z0-9]$/", $password)

...単一文字のパスワードにのみ一致します。

preg_match("/^[a-zA-Z0-9]*$/", $password)

...もっとうまくいくはずです。

これは空のパスワードにも一致することに注意する必要があるかもしれませんが、長さを個別に確認することを前提としています。

編集: SQL の安全性のためにパスワードを制限している場合は、実際に PDO または MySQLi に切り替えて、パラメーター化されたクエリを使用する必要があります。これにより、特殊文字 ( など') の特別な処理なしで任意の文字列を格納できるようになり、SQL がすべてになります。あなたのサイトをより安全に。

さらに、とにかくパスワードをクリアテキストで保存している場合は、パスワードのハッシュ化を検討する必要があります:)

于 2013-08-03T07:26:45.020 に答える
0

次のように使用できます。+$

if (...)
   // do anything
elseif(!preg_match("/^[a-zA-Z0-9]+$/", $password))
   echo('Error - the password can only contain alpha-numeric chars!');

+$の代わりに使用し*$ます。

*空の文字列を許可します。$password空のまま送信すると、一致しません。

于 2013-08-03T07:35:01.710 に答える