この孤立した例は、インジェクションに対して無防備です。
ただし、SQLインジェクションからの保護は文字の置き換えだけではないことを理解する必要があります。 。そして、状況はあなたが今当たり前と思っているものとは異なるかもしれません。したがって、このメソッドの本質的な欠点 が原因で、コードは長期的に脆弱になります。 :
- 文字の置換は一部にすぎません 必要なフォーマットの
- この特定の交換は弦にのみ適用でき、他の部品は完全に保護されません。
- このような置換はクエリ実行の外部にあり、あらゆる種類の人為的エラーが発生しやすいことを意味します。
- このような置換は本質的に取り外し可能な手段であり、実際のクエリ実行から離れすぎて、最終的には忘れられる可能性があることを意味します。
- この種のエスケープは、エンコーディング攻撃を受ける傾向があります 、ソリューションの使用が制限されすぎています。
文字の置換自体に問題はありませんが、完全なフォーマットの一部として使用される場合に限ります。右側のクエリ部分に適用されます。プログラマーではなく、データベースドライバーによって実行されます。実行直前。
コメントで提案した機能は良いステップですが、それでも不十分であり、上記の欠点の対象であり、あらゆる種類の人為的エラーが発生しやすくなっています。
また、SQLインジェクションだけがこのアプローチの問題ではなく、ユーザビリティの障害でもあります。この関数を最近の魔法の引用 、または、アプリケーションコード内のすべての変数を正しくフォーマットするために使用する場合は、コードを肥大化させます。
このような関数は、プレースホルダーを処理するためにのみ使用できます 、もちろん、自作の置換関数を使用するのではなく、データベースAPIによって提供される適切な関数を使用します。