2016-08-21 6 views
1

私は現在、多くのユーザーの入力を必要としないWebサイトを構築しています。私はいつどのような種類の文字が許可され、どの文字が許可されないのかを知っています。たとえば、すべての入力は英数字、電子メール、または。$! & @ ** - +。現時点では(パスワード)filter_input-regexpは "little freedom"の入力には十分ですか?

、私は常に、任意の入力を使用する前にチェックして、私はPHPのfilter_input機能でこれを行う、私は後でのみ使用するようにしたいと思い

filter_var($post['var'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH); 
filter_input(INPUT_GET, 'id', FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z0-9]*$/") 
filter_input(INPUT_POST, 'password', FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z0-9\.\$\-\_\!\£\@\#\*\:\?\&]+$/")) 

のようなフィルタを使用してregexpで検証してください。なぜなら、何を承認するのか、何を拒否するのかを決める上で最良の選択と思われるからです。

私は少し編集的ですから、最初に説明されている使用法について(<([{"'/ /は許されません)単純に検証を使用するのが安全かどうかを知りたいです正規表現による。

実行を想定し

答えて

1

!ありがとう、いくつかのフィールドの検証の直後に失敗し終了し、あなたが正規表現でホワイトリスト方式を使用し、[はい、それは十分であろう。いくつかあります。 PHPなどのネイティブ関数で検証できるもの(電子メールなど)ですが、一般的に正規表現を避ける理由はありません。

しかし、SQLインジェクションからあなたを守ることはできません。この問題は個別に解決しなければならない。

+0

はい実行は実際にはとにかく進むために通常必要な情報として終了します。 MySQLに関しては、十分に簡単な準備文ですか? – Dominus

+0

各パラメータを個別に渡す必要があります。パラメータは入力する必要があります(数値は実際に数値に変換され、文字列はエスケープされます)。これはSQLインジェクション防止の一般的な考え方です。 –

関連する問題