JAVA.ASSERT.ARG

メソッド引数の検証には決してアサートを使用しない

脆弱性とリスク

引数の検証は、メソッドの機能のために不可欠なものとなる場合があります。アサーションは無効になる可能性があり、その結果、引数の検証が削除されたり、未処理の例外が発生したりすることがあります。

軽減と防止

アサーション検証以外の方法を使用して引数を検証してください。パラメーターのアサートチェックを削除して、if/関数チェックに置き換えてください。

脆弱コード例 1

コピー
package com.klocwork;

public class JAVA_ASSERT_ARG_POSITIVE_1 {
    public void test(int i, String args) {
        assert args != null;
    }
}

脆弱コード例 2

コピー
package com.klocwork;

public class JAVA_ASSERT_ARG_POSITIVE_2 {
    public void test(String[] args, int i) {
        assert args != null;
    }
}

脆弱なコード例 3

コピー
package com.klocwork;

public class JAVA_ASSERT_ARG_POSITIVE_3 {
    public void test(boolean b, String args[], int i) {
        assert args != null;
    }
}

脆弱コード例 4

コピー
package com.klocwork;

import java.util.List;

public class JAVA_ASSERT_ARG_POSITIVE_4 {
    public void test(List<String> args) {
        assert args != null;
    }
}

修正コード例

コピー
package com.klocwork;

public class JAVA_ASSERT_ARG_NEGATIVE {
    public static void test(String args[]) {
        int x = 123;

        assert x > 1;

        System.out.println("hello world");
    }
}