2016-12-21 11 views
1

私は私の学校のプロジェクトをやっています。私はHPE Fortifyを使って見つかった問題をすべてデバッグする作業をしています。アプリケーションによって生成されたレポートは、SQLインジェクションになりやすい以下のコードを示します。この種のコードはSQLインジェクションを受けやすいのですか?

 String sql = " select Distinct p1.desc1,p2.desc2 from parameter p1" 
      +" inner join parameter p2" 
      +" on p1.ParaCode1='CR_DERIVE' and p1.ParaCode2=p2.Desc2" 
      +" inner join parameter p3" 
      + " on p2.ParaCode3=p3.ParaCode1 and p3.ParaCode3=p2.Desc2" 
      +" where p2.paracode1='ATTRIBUTE'" 
      + " and p2.ParaCode2='" + ddl_attribute.SelectedValue + "'"; 

ではなく、以下のコード:私はSQLについて不明確だとして理由を知りたいのです

strSQL = "SELECT Paracode2 FROM Parameter WHERE Paracode1 = 'PROGMGR' AND Desc1 = '" + login + "' AND Status = 'A' "; 

注射と私はこれに新しいです。応答をありがとう

+3

マイルール:あなたはSQLインジェクションを理解するための詳細については

PreparedStatement stmt = con.PreparedStatement(sql); stmt.setString(1, login); ResultSet rs = stmt.executeQuery(); 

、あなたが私のプレゼンテーションSQL Injection Myths and Fallacies、またはその話を提供する私のビデオを好むかもしれないあなたは文字列操作を使用している場合と、クエリパラメータではなく、おそらく脆弱です。クエリパラメータを使用するだけです。 –

+1

どちらも同じように脆弱です。アプリケーションが間違っています。ただ1つのルールに従ってください。* SQLを連結しないでください。**特にユーザーの入力と連動しないでください***あなたは大丈夫でしょう。 –

答えて

0

あなたはSQLクエリ文字列にいくつかのアプリケーション変数を連結するので、安全性はそれらの変数の値がどのように設定されたかによって決まります。彼らは信頼できない入力から来たのでしょうか?または、安全なアプリケーションデータから設定されていましたか?

HPE Fortifyがコードを分析し、login変数にその値がどのように割り当てられているかを知っている場合は、SQL式で使用するのが安全であることがわかります。一方、変数SelectedValueについては結論を出すことができない可能性があるため、安全でないと判断してSQL脆弱性を引き起こす可能性があります。

Perl言語は、HPE Fortifyなどのツールを使用せずに、何か類似しています。すべてのPerl変数は、その値がどこにあるかに応じて、「汚染された」か「未取得の」のいずれかです。したがって、変数がSQLやeval()などのコードインジェクション状況で安全に使用できるかどうかを判断できます。同じ言語をサポートしていない言語が多いことは残念です。

しかし、私はクエリパラメータを使用することを学ぶべき他のコメント作成者に同意します。それは簡単で安全です。また、あなたが引用符内の引用符を正しくバランスさせているかどうかを見極めることを止めることができます。

コードサンプルがJavaのように見えます。ここでは、Javaの例です:

strSQL = "SELECT Paracode2 FROM Parameter" 
     + " WHERE Paracode1 = 'PROGMGR' AND Desc1 = ? AND Status = 'A' "; 

通知は、パラメータの?プレースホルダは、SQL文字列内で周りに一重引用符を持っていません。プレースホルダの周りにSQL引用符を付ける必要はありません。親指のhttps://www.youtube.com/watch?v=VldxqTejybk

+0

私にもっと不確実なガイドをくれてありがとう!本当にありがとうalot :) –

関連する問題