入力が本質的に無効である、または必ずしも悪意を持っていることがないため、説明するように入力をフィルタリングする「唯一の」方法はありません。それは全くあなたのものです入力が重要です。
たとえば、テキストが$_GET['field']
にあり、SQLクエリを作成しようとしているとします。あなたはそのようエスケープ(もちろんMySQL用)mysql_real_escape_string()
を使用して値を必要とする:
$sql = "INSERT INTO some_table (some_field) VALUES ('" . mysql_real_escape_string($_GET['field']) . "')";
このエスケープを使用すると、SQLクエリで使用している入力に適用することが絶対的に不可欠です。ここに示すように適用されると、ハッカーからの悪意のある入力さえもデータベースに悪影響を及ぼすことはありません。
しかし、この機能は、あなたのページの一部のHTML出力に$_GET['field]
が含まれている場合は、役に立たなくて、完全にが間違っています。を使用してください。その場合、関数htmlspecialchars()
が便利です。
echo "<p>Your comments were: " . htmlspecialchars($_GET['field']) . "</p>";
これらの例はどちらも「ハッカーのような入力」からはかなり安全です。悪意のあるデータをデータベースやHTMLに挿入することはありません。しかし、エスケープの2つの形式は完全に異なる機能であり、それぞれがその使用に適していることに注意してください。
これとは対照的に、これらの2つの用途の入力を同時に検証しようとした場合を想像してください。 <
または>
文字は、クロスサイトスクリプティングのような悪意のあるHTML攻撃の一部である可能性があるため、許可することはできませんでした。だから、「私は1 <と思う」と書いておきたい訪問者は、邪魔されるだろう。同様に、あなたは悪意のあるSQLインジェクション攻撃の恐怖のために引用符を許可することができなかったので、貧しい "Miles O'Brien"は決してあなたのフォームに記入することができませんでした!
適切な入力エスケープは、さまざまなコンテキストで使用すると非常に簡単です(入力の検証よりも簡単です)。しかし、結果はずっと優れています。
無関係ますが、電子メールを検証するための正規表現が不完全であること:
詳細については、ドキュメントを読んでください。それは、John + [email protected] – VoteyDisciple
+1のVoteyDiscipleのコメントに完全に有効な電子メールアドレスを許可しません。このような不完全な電子メール検証スキームは、私が今までに見つけた最も迷惑な設計決定のいくつかです。 –
あなたは正しいです!フィードバックいただきありがとうございます。問題を解決するためにこれをどのように変更しますか? – pppglowacki