既存の回答への追加として: 心に留めておくべき非常に重要なことの 1 つは、クロス サイト スクリプティング攻撃に対する保護です。「すべての入力は悪だ!」と想定する必要があります。. ユーザーは自分の名前などを入力するだけでなく、JavaScript (入力を保存する場合は XSS または永続的な XSS) または SQL クエリの一部を入力して、SQL インジェクションを実行する可能性があります。
スクリプトが GET または POST から呼び出される変数を受け入れるとしましょうtxtname
(これが$_REQUEST
意味です)。そして、あなたはこのコードを持っています:
<?php echo "Welcome!" .$_REQUEST['txtname']; ?>
次のようなリンクを作成できます。
http://yourhost/yourscript.php?txtname=<script%20type="text/javascript">alert("This%20might%20also%20be%20an%20evil%20script!");</script>
次に、URL 短縮サービスを使用して、無害に見えるリンクを作成し、上記の攻撃者の URL にリダイレクトします。
http://short.xy/dfudf7
これにより、ユーザーは上記の悪質な JavaScript リンクにリダイレクトされます。次に、あなたの Web サイトは、JavaScript や埋め込み型の悪iframes
、または攻撃者が望むあらゆるものを実行します。あなたのユーザー/顧客は、あなたの Web サイトをアドレス バーに表示するだけで、ハッカーが表示するサイトに悪意のある部分を追加したとしても、すべてあなたから来たものだと考えるでしょう。
したがって、ユーザー入力から直接的または間接的に何かを出力するときはいつでも (データベースによって読み取られる$_REQUEST
か、データベースからフェッチされるかに関係なく)、 < や > などの HTML 特殊文字が機能しないことを確認する必要があります。php は、これらの危険な文字をエスケープする関数htmlspecialcharsを提供します。その後、それらはテキストとして表示され、HTML/JavaScript として機能しません。
ところで、これは SQL インジェクションに対する保護ではありません。後でデータベースを使用する予定がある場合は、それも探す必要があります。また、この領域には、データベースに渡す前にユーザー入力を「分解」する機能があります。