この記事では SQL インジェクションを防ぐための Mybatis の関連情報を紹介します。非常に優れており、必要な方は参考にしてください。
SQL インジェクションは攻撃者にとってよく知られた手法です。インターフェイス上のフォーム情報や URL に「or '1'='1'」などの奇妙な SQL フラグメントを入力すると、パラメータ検証が不十分なままアプリケーションに侵入される可能性があります。したがって、このような攻撃を防ぐためにアプリケーションで何らかの作業を行う必要があります。銀行ソフトウェアなどの一部の安全なアプリケーションでは、SQL インジェクションを防ぐためにすべての SQL ステートメントを ストアド プロシージャ に置き換えるのによく使用されます。これはもちろん非常に安全な方法ですが、通常、開発ではこの厳格なアプローチが使用される可能性があります。必要ありません。
mybatisフレームワーク半自動化された永続層フレームワークとして、SQL ステートメントを自分たちで手動で記述する必要があります。もちろん、現時点では SQL インジェクションを防ぐ必要があります。実際、Mybatis の SQL は、次のように、function と同様に「入力 + 出力」関数を備えた構造です。
<select id="getBlogById" resultType="Blog" parameterType=”int”> select id,title,author,content from blog where id=#{id} </select>
オブジェクト
にはコンパイルされた SQL ステートメントが含まれています。この「準備完了」アプローチにより、セキュリティが向上するだけでなく、SQL を複数回実行する際の効率も向上します。その理由は、SQL がコンパイルされており、再度実行するときに再度コンパイルする必要がないためです。
そういえば、mybatisを使えばSQLインジェクションを確実に防ぐことができるでしょうか?もちろんそうではありません。以下のコードを見てください:
select id,title,author,content from blog where id = ?
明らかに、これは SQL を防ぐことはできません注射。 mybatis では、「${xxx}」形式のパラメータが SQL のコンパイルに直接関与するため、インジェクション攻撃は避けられません。ただし、動的なテーブル名と列名に関しては、「${xxx}」などのパラメーター形式のみを使用できるため、インジェクションを防ぐために、そのようなパラメーターをコード内で手動で処理する必要があります。
結論: mybatis のマッピング文を記述するときは、「#{xxx}」の形式を使用するようにしてください。 「${xxx}」などのパラメータを使用する必要がある場合は、SQL インジェクション攻撃を防ぐために手動でフィルタリングする必要があります。
以上がMybatis が SQL インジェクションを防ぐ方法のコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。