설명
WebViewClient.onReceivedSslError에서 handler.proceed()를 호출하면 TLS 인증서 오류가 발생해도 WebView가 페이지 로드를 계속합니다. 운영 환경에서 이 동작은 중간자 공격을 가능하게 하며 사용자가 신뢰할 수 없는 콘텐츠를 정상 페이지로 오인하게 만들 수 있습니다.
잠재적 영향
- HTTPS 통신 탈취 또는 변조
- 로그인 정보와 세션 토큰 노출
- 악성 스크립트 삽입
해결 방법
- 인증서 오류가 발생하면
handler.cancel()을 호출하고 로드를 중단하세요. - 개발 서버의 테스트 인증서가 필요하면 Network Security Config의
debug-overrides로 디버그 빌드에서만 테스트 CA를 신뢰하세요. 인증서 오류 자체를 무시하지 마세요. - 인증서 고정이 필요한 경우 Android Network Security Config를 검토합니다.
예시
변경 전
java
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
변경 후
java
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.cancel();
}
설명:
- 변경 전: WebViewClient.onReceivedSslError에서 handler.proceed()를 호출하면 TLS 인증서 오류를 무시하고 페이지를 계속 로드합니다.
- 변경 후: 인증서 오류가 발생하면 handler.cancel()을 호출합니다.