攻撃するのは簡単ですが、手助けするのは一見もっと努力しているようです。それで、これが役立つことへの私の試みです。
したがって、データをサーバーにポストバックし、ユーザーがポストバックしたものが悪意を持って動作する可能性のある場所に到達しないようにする必要があります。
あなたがそれを採用して大丈夫だと言う素朴な戦略、私は魔法の引用をオンにすることによってデータを一般的にサニタイズします、それはすべての厄介なことから逃れるはずです...
ただし、そうではありません。あなたの仕事は、信頼できないデータを処理するときに、その使用方法に完全に応じて、カスタムのサニタイズ戦略を確実に使用することです。信頼できないデータが特定の場所に入るのを許可する必要がある場所、および信頼できないデータをエスケープする方法を学習するための優れたリソースは、 OWASPにあります。
エスケープされているかどうかにかかわらず、すべての場所が信頼できないデータに適しているわけではないことに気付くでしょう。これは、安全なWebサイトを真に実装するには、信頼できないデータがどこに行くのか、そしてデータがどのようにそこに到達するのかを考慮する必要があるという事実を浮き彫りにします。
この質問は、一般的なエスケープメカニズムを検討している(そしてその使用を攻撃している)ため、より直接的に方法に焦点を当てています。マジッククォートをオンにすることは、信頼できないデータが最終的に発生する可能性のあるすべての場所に送信されるデータをエスケープするための適切な方法であることを意味します。
ベストプラクティスによると、実際には、使用する場所に適したエスケープメカニズムを使用する必要があります。すでに指摘したように、mysql_real_escape_stringの使用は、MySQLクエリで使用するための文字列のエスケープに固有の一般的な関数です。人々はこのメカニズムを使用しますが、このメカニズムを使用してデータを手動でエスケープする必要性は、PHPデータオブジェクト(PDO)の正しい使用によって置き換えられます。(クエリ文字列を手動で作成するのではなく、信頼できないデータをパラメータにバインドします)。
その他の明らかなエスケープメカニズムには、htmlspecialcharsまたはhtmlentitiesを使用したhtml文字のエンコードや、より一般的な引用符エスケープメカニズムのaddslashesおよびaddcslashesが含まれます。コマンドライン引数escapeshellargおよびescapeshellcmdのエスケープメソッドもあります
したがって、データを適切にエスケープすることは、すべての受信データに魔法の引用符を適用するよりもはるかに簡単であることがわかります。また、使用する場所によっては、データを安全にエスケープするための十分に確立されたメカニズムが存在することがよくあります。