728x90
반응형
Java 자주발생하는 오류 정리 #13
Frequent Java Cleanup Errors #13
FileNotFoundException
FileNotFoundException은 파일을 찾을 수 없을 때 발생하는 예외입니다. 주로 파일 처리 작업에서 발생합니다.
취약점
- FileNotFoundException은 주로 파일 처리 오류와 관련이 있으며, 직접적인 보안 취약점을 나타내지는 않습니다. 그러나 파일을 열거나 읽을 때 파일의 존재 여부를 확인하는 것은 중요합니다.
오류상황
import java.io.*;
public class FileNotFoundExceptionExample {
public static void main(String[] args) {
try {
FileInputStream fileInputStream = new FileInputStream("nonexistent-file.txt"); // 존재하지 않는 파일 열기 시도
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
솔루션
import java.io.*;
public class FileNotFoundExceptionSolution {
public static void main(String[] args) {
try {
File file = new File("existing-file.txt");
if (file.exists()) {
FileInputStream fileInputStream = new FileInputStream(file); // 파일이 존재하는 경우 열기
} else {
// 파일이 존재하지 않는 경우 처리
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
솔루션 설명
- 파일이 존재하는지 확인하고, 파일이 존재하지 않는 경우에 대한 처리를 수행하면 FileNotFoundException을 방지할 수 있습니다.
SocketTimeoutException
SocketTimeoutException은 소켓 연결 또는 읽기 작업에서 시간 초과가 발생했을 때 발생하는 예외입니다. 주로 네트워크 통신과 관련된 작업에서 발생합니다.
취약점
- SocketTimeoutException은 주로 네트워크 연결 및 데이터 통신 관련 오류와 관련이 있으며, 직접적인 보안 취약점을 나타내지는 않습니다. 그러나 네트워크 연결 및 읽기 작업의 시간 제한을 설정하는 것은 중요합니다.
오류상황
import java.io.*;
import java.net.*;
public class SocketTimeoutExceptionExample {
public static void main(String[] args) {
try {
Socket socket = new Socket("example.com", 80);
socket.setSoTimeout(1000); // 1초 동안 데이터를 읽기를 시도하고 시간 초과 발생
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int bytesRead = inputStream.read(buffer);
} catch (SocketTimeoutException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
솔루션
import java.io.*;
import java.net.*;
public class SocketTimeoutExceptionSolution {
public static void main(String[] args) {
try {
Socket socket = new Socket("example.com", 80);
socket.setSoTimeout(5000); // 5초 동안 데이터를 읽기를 시도하고 시간 초과 발생
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int bytesRead = inputStream.read(buffer);
} catch (SocketTimeoutException e) {
// 시간 초과 처리
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
솔루션 설명
- 소켓의 시간 초과 설정을 조정하고, SocketTimeoutException을 예외 처리하여 시간 초과 시 어떻게 대처할지 정의해줍니다.
SSLHandshakeException
SSLHandshakeException은 SSL/TLS 연결을 수행할 때 SSL 핸드셰이크 과정 중에 문제가 발생할 때 발생하는 예외입니다. 주로 보안 및 암호화된 통신에서 발생합니다.
취약점
- SSLHandshakeException은 주로 SSL/TLS 연결 오류와 관련이 있으며, 잘못된 구성 또는 인증서 문제로 인해 발생할 수 있습니다. 적절한 SSL/TLS 구성 및 인증서 관리가 중요합니다.
오류상황
import javax.net.ssl.*;
import java.io.*;
import java.security.cert.X509Certificate;
public class SSLHandshakeExceptionExample {
public static void main(String[] args) {
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[] {
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
throw new CertificateException("Untrusted server");
}
}
}, null);
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket("example.com", 443);
sslSocket.startHandshake(); // SSL 핸드셰이크 중 오류 발생
} catch (SSLHandshakeException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
솔루션
import javax.net.ssl.*;
import java.io.*;
import java.security.cert.X509Certificate;
public class SSLHandshakeExceptionSolution {
public static void main(String[] args) {
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[] {
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
// 신뢰할 수 있는 인증서인 경우 처리
}
}
}, null);
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket("example.com", 443);
sslSocket.startHandshake(); // SSL 핸드셰이크 중 오류 발생
} catch (SSLHandshakeException e) {
// SSL 핸드셰이크 오류 처리
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
솔루션 설명
- SSL 핸드셰이크 오류를 처리하고, 신뢰할 수 있는 서버에서 인증서를 사용하도록 구성하면 SSLHandshakeException을 방지할 수 있습니다.
728x90
반응형