2017-07-26 22 views
0

CheckmarxはSQLインジェクションの脆弱性として以下のコードスニペットを示します。 checkmarxレポートにCheckmarxハイライトコードをsqlinjectionの脆弱性として

「のreadLine要素からのユーザ入力を取得

下に示すように、以下のコードスニペットをdescibe。この要素の値は、 が適切 これを消毒又は検証されずにコードが流れる可能にすることができますSQLインジェクション攻撃」

簡潔さのために、私は完全なテキストを含んでいません。

InputStreamReader isr = null; 
    BufferedReader br = null; 
        try{      
         ClassPathResource defaultReports = new ClassPathResource(dbVendor + "/sql_inserts.sql"); 

         isr = new InputStreamReader(defaultReports.getInputStream()); 
         br = new BufferedReader(isr); 

         c = session.connection(); 
         String sqlLine = null; 
         while((sqlLine = br.readLine()) != null) { 
          sqlLine = sqlLine.trim(); 
           Statement st = null; 
           try{ 
            st = c.createStatement(); 
            st.execute(sqlLine); 
           }catch(SQLException e){ 

           }catch(Exception e){ 

           }finally{ 
            if (st != null) 
             st.close(); 
           } 
          } 
         } 

//sql_inserts.sqlファイルには、私はそのチェックマークがコードスニペットとして高いSQLインジェクションの脆弱性を強調すべきではないway.After優しいcheckmarxするためのコードの上に変換するINSERTステートメントの

を設定する含まれています。

答えて

0

SQLインジェクション攻撃は、クライアントからアプリケーションへの入力データを介したSQLクエリの挿入または「注入」から成ります。

出典:Checkmarxツールによって示されるように、あなたのコードではSQL Injection - OWASP


、SQLクエリsqlLineは、完全に未チェックが実行されます。私たちはそれがある種のストリームから来ていることがわかりますが、質問は正確にこれらのクエリのソースです。

ストリームが完全に制御されている場合、ストリームに含まれている内容が正確にわかっている場合は、それを悪用できないとみなすことができます。そのような場合の例は、ハードコーディングされたクエリを使用するか、または定義された「ホワイトリスト」(既知の良好な/許可されたクエリのリスト)からの選択(またはそれとの比較)です。 重要:クエリ文字列が100%信頼できるソースによって制御されている場合、ストリームまたは自身が何らかの形で変更された/ユーザーによって影響を受ける/制御することができるクエリは、あなたがクエリを考慮しなければならない場合にのみ、それは

悪用可能ではないと考えることができます信頼できない、安全でない。この場合、SQLインジェクションを防止するための手順が必要です。クエリを作成する方法はコードスニペットからは分かりませんので、ここでは特定の推奨事項を提案することはできません。あなたは慎重にOWASP SQL Injection Prevention Cheat Sheetの予防方法に行き、適切な方法を選択する必要があります。

幸運を祈る!

+0

「これらのクエリのソースは正確に何か」 - コードパスに従って、クラスパス。 – Trejkaz