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