
첨부파일 업로드 / 다운로드 기능이있느데
거기서 파일명 정할때 어쩌구 저쩌구 하면서 랜덤값을 생성해야하는 부분이 있음
그 때 쓰이는 코드!
public class GenerateRandomString {
public static String generateString() {
String AlphaNumericString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "0123456789"
+ "abcdefghijklmnopqrstuvxyz";
StringBuilder sb = new StringBuilder(10);
for (int i = 0; i < 10; i++) {
int index
= (int)(AlphaNumericString.length()
* Math.random());
sb.append(AlphaNumericString
.charAt(index));
}
return sb.toString();
}
}
위 코드에서 이런 취약점 분석 진단을 받았다.
– 부적절한 난수 생성 체커는 예측 가능한 난수를 사용하는 코드를 검출.
– 사용을 금지할 난수 생성 메소드를 옵션으로 지정할 수 있습니다.
– 예측 불가능한 숫자가 필요한 상황에서 예측 가능한 난수를 사용한다면,
공격자는 SW에서 생성되는 다음 숫자를 예상하여 시스템을 공격하는 것이 가능하게 됩니다.
– 옵션으로 지정된 금지 메소드보다 안전한 방식을 사용하여 난수를 생성합니다
코드 중 *Math.random() 부분을 수정해야함
import java.security.SecureRandom;
public class GenerateRandomString {
public static String generateString() {
String AlphaNumericString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "0123456789"
+ "abcdefghijklmnopqrstuvxyz";
SecureRandom random = new SecureRandom();
StringBuilder sb = new StringBuilder(10);
for (int i = 0; i < 10; i++) {
int index = random.nextInt(AlphaNumericString.length());
sb.append(AlphaNumericString.charAt(index));
}
return sb.toString();
}
}
Math.random()대신 SecureRandom 클래스를 사용해 난수를 생성하는 것으로 변경.
이유는 Math.random()는 내부적 알고리즘을 사용해 시드값이 노출될 우려, 예측 가능한 우려가 있다고한다.
SecureRandom은 시드가 외부에서 추론되기때문에 보안 측면에서 더 권장된다고함
반응형
'Chapter01 > Sping boot' 카테고리의 다른 글
[ Springboot ] final (0) | 2024.12.28 |
---|---|
[ 보안 취약점 ] 부적절한 예외 처리 catch(Exception e) (0) | 2024.12.27 |
[node] 노드 버전 여러 개 사용하기 (5) | 2024.12.09 |
[ swagger ] Failed to load remote configuration. (0) | 2024.12.06 |
[Spring boot] 한글로된 첨부파일명이 ______ 로 다운받아질 때 (0) | 2024.11.28 |