私は新しいWebアプリ、LAMP環境を構築しています...すべてのテキストベースのフィールド(HTMLフィールドではなく、電話、名前)のユーザーの入力検証(もちろん+準備されたstmt)に対してpreg_matchが信頼できるかどうか疑問に思っています、姓など)。
たとえば、従来の「メール フィールド」の場合、入力を次のようにチェックすると、次のようになります。
$email_pattern = "/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)" .
"|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}" .
"|[0-9]{1,3})(\]?)$/";
$email = $_POST['email'];
if(preg_match($email_pattern, $email)){
//go on, prepare stmt, execute, etc...
}else{
//email not valid! do nothing except warn the user
}
SQL/XXS インジェクションに対して安らかに眠ることができますか?
私は正規表現を可能な限り制限的に書いています。
編集:すでに述べたように、私はすでに準備済みのステートメントを使用しています。この動作はテキストベースのフィールド(電話、電子メール、名前、姓など)専用であるため、HTMLを含めることはできません(HTMLフィールドの場合) 、私は HTMLpurifier を使用します)。
実際、私の使命は、regexp-white-list と一致する場合にのみ入力値を渡すことです。それ以外の場合は、ユーザーに戻します。
ps :: mysql_real_escape_strings のないものを探しています。おそらくプロジェクトは次の将来に Postgresql に切り替わるので、クロスデータベースの検証方法が必要です ;)