2016-04-19 3 views
1

ユーザ名とパスワードの入力にmysql_real_escape_stringとstrip_tagsを使用すれば十分ですか?それともregexも含めるべきですか?このウェブサイトでは廃止予定のMYSQLを使用しています。例えば登録/ログインフォームに正規表現を使用する必要がありますか?

:正規表現で

if (!preg_match("/^[\w-\.][email protected]([\w-]+\.)+[\w-]{0,3}$/",$_POST['email'])) { 
    $error = "Invalid email or password"; 
+0

あなたが検証前に電子メールを確認するために、JavaScriptで正規表現を使用する場合、それは良くなります。 –

+1

@BadroNiaimiこれでは不十分です。なぜなら、悪意のあるコードのPOSTリクエストが送信される可能性があるからです! – manniL

+1

パスワードの場合、セキュリティの観点からはどこにも表示されないため、エスケープする必要があります。電子メールの場合は、regex、readyバリデータ、またはPHPの 'filter_var'(' FILTER_VALIDATE_EMAIL'フラグ付き)関数を使用してください。ユーザー名は、ポリシーによって異なります。あなたはユーザー名や文字や数字などの文字を受け入れますか? –

答えて

2

これは、MySQLへのパスデータの前に電子メール(入力)を検証するために、常により良いですが、幸いなことに、あなたはPHPが内蔵されている機能filter_var検証のために、電子メールの検証にregexを使用する必要はありません。これは、正規表現検証よりもはるかに高速です。

構文は次のようになります。

if(! filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
    //Email not valid, 
    $error = "Invalid email or password"; 
} 
+0

ありがとう、これは私のためにそれを解決しました。 –

1

ユーザー名/パスワードの形式を確認することができます。 使用している正規表現は信頼できません。たとえば、[email protected]や3文字以上の新しいTLDとは一致しません。私はこの1つ使用する電子メールの

/^[[:alnum:]|\.|\-|_][email protected][[:alnum:]|\.|\-|_]+[A-Z]+$/i 

をパスワードにあなたができるようにしたい文字に基づいて、異なるチェックを書かなければならないことに注意してください。