0

Web フォームからの送信を処理する PHP 関数を開発しています。

使用できる文字は、厳密に英数字、ab、0 ~ 9 です。

処理してデータベースに挿入する前に、正規表現を使用して preg_replace を使用してこのデータを消去しても安全ですか。

話題になっている多くの通常の PHP データ サニタイズ オプションを見てきましたが、システム設計では英数字以外の文字の使用や保管が厳密に禁止されているため、一致しないものはすべて削除する方が簡単だと思います /[^ a-zA-Z\s-0-9.,']/ 最初から。

私はここで正しい軌道に乗っていますか?

4

1 に答える 1

4

無効な文字を削除するのではなく、英数字のみをデータベースに格納することを許可する場合は、無効な入力を提供したことを示すエラーをユーザーに返す方が適切です。これにより、ユーザーが最初に入力したものとは異なる形式でデータが表示されても、ユーザーが混乱することはありません。

つまり、入力を検証しpreg_match()て要件を満たしていることを確認し、そうでない場合はエラーをユーザーに返して修正できるようにします。次に、データベースに挿入するためにエスケープするか、準備済みステートメントを使用します。

if (!preg_match('/^[a-z0-9., ]$/i', $input)) {
   // error Invalid input. Please use only letters and numbers
}
else {
   // call escape function on $input or insert it with a prepared statement
   // whatever is the appropriate method for your RDBMS api.
}
于 2012-05-17T12:29:29.653 に答える