FILTER_VALIDATE_EMAIL
電子メール アドレスが有効であることを確認します。文字列から「危険な」文字 (つまり、特定のコンテキストで特別な意味を持つ文字) を削除することとは何の関係もありません。
したがって、入力の検証はすべて適切であり、データがビジネス ルールに準拠していることを確認するために必要ですが、値を別のコンテキストに挿入するときに特殊文字をエスケープする必要がなくなるわけではありません。
したがって、HTML ページにドロップする文字列は引き続き使用する必要がhtmlspecialchars()
あり、MySQL クエリのリテラルにドロップする文字列は引き続き使用する必要がありますmysql_real_escape_string()
(または、mysqli または PDO のようにパラメーター化されたクエリを使用することをお勧めします)。文字列をクエリで停止する必要はありません)。どのような入力検証を行ったかに関係なく、コンテンツを構築するときは常に出力エスケープが発生する必要があります。
問題を引き起こす可能性のある「有効」だが「危険」な電子メールはありますか?
そうです。a&a@b.com
HTML に挿入すると破損します。a%a@b.com
URL コンポーネントに挿入されると破損します。a'a@b.com
SQL 文字列リテラルに挿入されると破損します。コンテキスト依存の出力エスケープは不可欠です。あるコンテキストで問題になる可能性のあるすべての文字を削除しようとすると、実質的にすべての句読点を削除することになり、あまり良くありません。