私が自分のプログラムで最初の SQL ステートメントを書き始めたとき、同僚が教えてくれた非常に簡単な方法で SQL インジェクションから身を守ることに非常に満足していました。すべての一重引用符を 2 つの一重引用符に置き換えました。
たとえば、顧客名を入力して顧客テーブルを検索できる検索フィールドがあります。あなたが入るなら
ピーターの理髪店
SELECT ステートメントは次のようになります。
SELECT *
FROM Customers
WHERE Customername = 'Peter''s Barbershop'
攻撃者がこれを挿入する場合:
';DROP TABLE FOO; --
ステートメントは次のようになります。
SELECT *
FROM Customers
WHERE Customername = ''';DROP TABLE FOO;--'
どのテーブルも削除しませんが、顧客テーブルで顧客名 ';DROP TABLE FOO;-- これはおそらく見つからないでしょう ;-) を検索します。
このメソッドを使用してステートメントを作成し、SQL インジェクションから身を守った後、多くの開発者がパラメーター化されたステートメントを使用していることを読みましたが、「私たちの」メソッドが使用された記事を読んだことはありません。したがって、それには間違いなく正当な理由があります。
パラメータ化されたステートメントはどのシナリオをカバーしますが、私たちの方法はカバーしませんか? 私たちの方法と比較して、パラメータ化されたステートメントの利点は何ですか?
ありがとう
フィリップ