MyBatis$と菗区別及びSQL注入リスク


MyBatis$と菗区別及びSQL注入リスク
  • mybatisの中で$と啛パラメータの違い
  • generatorコード生成ツールのSQL注入リスク
  • mybatisの中で$と噫パラメータは違います.
    MyBatisは2つのパラメータ記号をサポートしています.1つは墯で、もう1つは$パラメータ記号を使用した文:SELECT*FROM PERSON WHERE ID=龚钾MyBatisはプリコンパイル文を作成します.発生したコードは似ています.
     // Similar JDBC code, NOT MyBatis… 
        String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
         PreparedStatement ps = conn.prepareStatement(selectPerson); 
         ps.setInt(1,id); 
    
    パラメータはSQL文でプレースホルダを使いますか?」を使用して、このSQL文をプリコンパイルします.もう一つのパラメータ記号を使う時、MyBatisは直接文字列でパラメータをSQL文とつづり合わせて実行します.この場合は非常に危険であり,SQL注入ホールを発生しやすいことが知られている.MyBatisフレームを使用すると、SQL注入が発生しやすくなるシーンがあります.SQL文の一部、例えばorder byフィールド、表名などは、プリコンパイル文を使用することができません.このような場面はSQL注入を発生しやすい.Javaレベルでマップを開発することを推奨します.フィールド/テーブル名配列を設定して、ユーザーがインデックス値に入ることを許可します.このようにして、入ってきたフィールドまたは表の名前が白いリストの中にあることを保証します.ライクパラメータ注入.以下のSQL文を使うと、SQLがlike concat(′%)、菗{title]、“%”を注入するのを防ぐことができます.
    generatorコード生成ツールのSQL注入リスク
    開発効率を高めるために、いくつかのgeneratorツールが開発されました.generatorはデータベース構造からエンティティ類、Mapperインターフェース、及び対応するXMLファイルを自動的に生成するツールです.よくあるゲナートにはmybatis-generator、ren-generatorなどがあります.mybatis-generatorはmybatisオフィシャルの一つのgeneratorです.mybatis-generatorが自動的に生成するSQL文では、order byは$つまり簡単な文字列スティッチングを使用しています.この場合はSQL注入が発生しやすいです.開発者の注意が必要です.ただし、mybatis-generatorで発生したlike文とin文は全部パラメータ記号で、非常に安全な実現です.