SQLインジェクションから入力を保護することを考え始めています。私はPDOとmysqliについて読み、それらの手法を使用します。SQLインジェクションに対する保護を研究しているときに、テクニックについて考えました。ユーザーからの入力があるときはいつでも、入力文字列をスキャンして「'」または「DROP」の出現箇所を検索でき、文字列にこれらの文字が含まれていると、先に進むことができませんでした。この手法は、多くのSQLインジェクションを防ぎますか?
ご協力いただきありがとうございます。
SQLインジェクションから入力を保護することを考え始めています。私はPDOとmysqliについて読み、それらの手法を使用します。SQLインジェクションに対する保護を研究しているときに、テクニックについて考えました。ユーザーからの入力があるときはいつでも、入力文字列をスキャンして「'」または「DROP」の出現箇所を検索でき、文字列にこれらの文字が含まれていると、先に進むことができませんでした。この手法は、多くのSQLインジェクションを防ぎますか?
ご協力いただきありがとうございます。
事前に厳密なテストを経た方法を使用するのが最善であり、独自の方法を実装しようとしないでください。
目的のソリューションの問題は、SQLがテーブルを削除するための新しい表記を追加するとどうなるかということです。または、代わりに「truncate」を使用するとどうなりますか?これは絶対確実ではありません。
PDOまたはSQLiを使用するだけです。
正しく、意図したとおりに使用すると、両方が停止します。DROPという単語を停止するような手段を使用するのはばかげているでしょう。たとえば、誰かが「dropbox」と入力した場合を想像してみてください。
入力をエスケープし、プリペアドステートメントの使用を検討する必要があります。これにより、SQLインジェクションの弱点がほぼすべて解消されます。特定の単語をスキャンすることは、一般的に正当なユーザーを悩ませ、断固としたハッカーを止めないため、ひどい習慣です。
プリペアドステートメントのみを使用するようにしてください。これは、これまでで最高のテクニックの1つです。
最善の方法は、すべてのユーザー入力を厳密なパターンに対して検証して、PDOで準備されたステートメントとともに、ユーザーデータが異常でないことを確認することです。これにより、XSSを防ぐこともできますが、通常は、ユーザーが生成したすべての出力をサニタイズすることも有益です。何かを適切に検証せず、ユーザーが悪意のあるコードを実行する可能性があります。