JavaでRAWタイプを使用することのセキュリティへの影響は何ですか?
-
29-09-2019 - |
質問
現在、大規模なJava EEアプリケーションでさまざまな警告のセキュリティへの影響を確認しています。コードのほとんどは数年前のものであるため、生のコレクションタイプの多くの用途が含まれています。
List items = new List();
パラメータ化されたコレクションタイプではなく:
List<Item> items = new List<Item>();
私が考えることができる唯一のセキュリティの意味合いは、RAWタイプをコンパイル時に静的にタイプチェックできず、潜在的に実行時エラーをもたらす可能性があるということです。 ClassCastException
これは、これが発生するコードの場所に応じて、サービスの拒否につながる可能性があります。
私が考えていない生のタイプを使用することの他の意味はありますか?
解決
他のセキュリティへの影響は考えられません。
非セキュリティへの影響のために、汎用タイプは、汎用を返すタイプのバイトコードで明示的なキャスト*も行います。もちろん、これはユーザーにとって透明であり、返されるタイプは汎用型であるように見えます。
例えば:
List<Item> items = new ArrayList<Item>();
// .get(int) and remove(int) return Item automatically
*これはために発生します タイプ消去.
他のヒント
タイプの安全性の欠如は、セキュリティの問題につながる可能性があります。たとえば、このリストがクエリを作成するために使用されていたとしましょう。
"select name from users where id="+items[x]
アイテムにの文字列値が含まれている場合 union select load_file('/var/passwd')
攻撃者は、システム上の任意のファイルを読み取ることができます。これは、MySQLを使用していると仮定していると仮定しています。アイテムが整数のリストである場合、このクエリはSQLインジェクションに対して脆弱ではありません。