Java/오류노트

[Java/오류노트] SonarLint : "Random" objects should be reused

adjh54 2023. 12. 5. 18:10
728x170
해당 글에서는 Java에서 SornarLint에서 발생하는 오류에 대한 해결방법에 대해 알아봅니다.


 

1) 문제점


 💡 "Random" objects should be reused 문제점

- 객체를 재 사용해야 한다는 의미입니다. 이는 일반적으로 프로그래밍에서 객체를 생성하고 사용할 때 발생하는 비용을 줄이기 위해 권장되는 접근 방식입니다.
- 객체를 반복적으로 생성하고 버리는 것보다, 이미 생성된 객체를 재사용하여 성능을 향상시킬 수 있습니다. 이를 통해 메모리 사용량을 줄이고 시스템 리소스를 효율적으로 활용할 수 있습니다.

 

 

💡 아래와 같이 new Random()으로 객체를 생성해서 만드는 코드 부분에서 해당 Lint 오류가 발생하였습니다.

 

 

 

 

 

 

2) 해결방안


💡 해결방안

- new Random() 형태로 객체를 만드는 방식이 아닌 Random rnd = SecureRandom.getInstanceStrong(); 형태로 구성을 합니다.

- 이는 SecureRandom의 인스턴스를 생성합니다. 기존에 객체를 사용하는 방법 보다 SecureRandom 클래스를 사용하면 보안에 강화된 랜덤 숫자를 생성할 수 있습니다.

 

💡 getInstanceStrong() 

- SecureRandom 클래스의 인스턴스를 반환하는 정적 메서드입니다. 이 코드를 사용하면 안전한 랜덤 숫자 생성기를 생성하여 사용할 수 있습니다.
- 또한 getInstanceStrong()메서드를 사용하면 NoSuchAlgorithmException이 발생할 수 있으므로 예외처리를 해주어야 합니다.
StringBuffer getGroupCode(int number) {
    StringBuffer buf = new StringBuffer();

    try {
        Random rnd = SecureRandom.getInstanceStrong();
        for (int i = 0; i < number; i++) {
            if (rnd.nextBoolean()) {
                buf.append((char) (rnd.nextInt(26)) + 97);
            } else {
                buf.append((rnd.nextInt(10)));
            }
        }
    } catch (Exception e) {
        log.debug("Exception :: " + e.getMessage());
    }
    return buf;
}

 

 

 

 💡 [참고] API Document
 

SecureRandom (Java Platform SE 8 )

This class provides a cryptographically strong random number generator (RNG). A cryptographically strong random number minimally complies with the statistical random number generator tests specified in FIPS 140-2, Security Requirements for Cryptographic Mo

docs.oracle.com

 

 

💡 [참고] Javascript에서 동일한 오류에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
 

[RN/오류노트] Math.random() 취약점에 대한 해결방법 : Make sure that using this pseudorandom number generator is sa

해당 글에서는 Math.random() 함수를 사용하였을 때 Weak Cryptography 보안 취약점 문제가 발생함에 따라 이를 해결하는 방법에 대해 확인해 봅니다. 1) 문제점 💡 문제점 - SonarQube로 React-native를 수행하

adjh54.tistory.com

 

 

 

 

 

오늘도 감사합니다. 😀

그리드형