EN JP CN

SV.SQL.DBSOURCE

SV.SQL.DBSOURCE

このエラーは、データベースクエリの結果が未チェックで別のデータベースクエリの作成に使用されており、SQL インジェクション攻撃の危険がある状況を検出します。

脆弱性とリスク

SQL インジェクションは、データベースのデータを危険な状態にします。未検証のユーザー入力が SQL 文で使用されているため、攻撃者は実行しようとする任意の SQL 文を挿入できるようになります。これには、データの削除、更新、作成などが含まれます。また、この種の脆弱性があるデータベースから機密データが取得される可能性もあります。この脆弱性は、SV.DATA.DB の脆弱性とともに攻撃されることがあります。

Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。

軽減と防止

詳細については、knowledge base (ナレッジベース) のパラメーターを参照してください。

例 1

11     public ResultSet getAllPeopleWithSameLastName(ServletRequest req, Connection con, int userId) throws SQLException {
12         Statement statement = con.createStatement();
13         ResultSet results = statement.executeQuery("SELECT lastName FROM user_data WHERE userid=" + userId);
14         String lastName = results.getString("lastName");
15         String query = "SELECT * FROM user_data WHERE lastName = '" + lastName + "'";
16         return statement.executeQuery(query);
17     }

SV.SQL.DBSOURCE が 16 行目に対して報告されています。'lastName' にはデータベースから取得されたデータ (14 行目) が含まれ、この値は 15 行目で定数文字列と連結され、'query' に保存されます。'query' は、16 行目で SQL 文として実行されます。すなわち、データベースから取得された情報が未チェックのまま、同一または別のデータベース上の SQL 文で実行されることになります。これは、データベースデータインジェクション ( SV.DATA.DB ) が可能な場合、任意の SQL 文のインジェクションに利用される可能性があります。

関連チェッカー

拡張機能

このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、Java 解析のチューニングを参照してください。