로그인을 위해서 일반적으로 아이디와 패스워드를 입력한다.
이를 서버 측으로 전달하여 데이터베이스에서 검증 이후 해당 사용자로 로그인을 진행하는데 이 때, 서버 측으로 패스워드를 평문으로 전달하게 된다면 악의적인 사용자가 중간에 가로채 정보가 유출될 가능성이 존재한다.
뿐만 아니라 주소, 이메일, 전화번호 등의 개인정보들이 네트워크 상에 평문으로 노출될 가능성이 존재한다.
이에 대해서는 두가지 대응방안이 존재한다.
1. HTTPS 통신
- HTTPS 통신을 위해서는 인증된 기관에서 발급한 SSL 인증서가 필요하다. 하지만 일반적으로 SSL 인증서는 유료이기 때문에 작은 규모의 사이트나 개인 블로그 같은 경우는 도입하지 않는 경우가 일반적이다.
- 하지만 유료가 아닌 무료로 SSL 인증서를 발급받아 적용이 가능한 경우도 있다.
1) 자체 발급한 인증서
- 자체 발급한 인증서의 경우 처음 접근 시 아래와 같은 경고창이 뜨며, 계속 탐색합니다 클릭 시 웹 서비스 이용이 가능하지만 여전히 주소창에는 발간색으로 [인증서 오류]가 노출된다.
2) 인증서 기관이 무료로 배포한 인증서
- 개인적으로 추천하는 방식으로 HTTPS 사용을 권장하기 위해 무료로 배포하는 것으로 대표적으로 Let's Encrypt가 있다.
- Let's Encrypt의 경우 모질라와 시스코 등 다수 굵직한 기업이 후원하는 것으로 믿을만하며 대표 사이트는 다음과 같다. ( https://letsencrypt.org/ko/ )
- 설치 과정은 이미 다수의 블로그에서 다루고 있기 때문에 패스합니다.
2. 암호화
- 만약 서버 측 제한 혹은 환경적인 제한으로 인해 HTTPS 적용이 힘들 경우 암호화를 통해 전송되는 데이터를 노출되지 않도록 할 수 있다.
- 비밀번호같은 경우는 일반적으로 원본 데이터가 필요하지 않으므로 현재 가장 많은 분야에서 채택하여 사용되고 있는 암호 방식인 SHA256 혹은 그 이상의 알고리즘을 이용하여 Hash한 상태로 전송할 것을 권고한다.
- 평문 데이터가 필요한 데이터의 경우는 복호화가 가능해야 한다. 복호화가 가능한 암호화 방식으로는 대표적으로 대칭형과 비대칭형 방식으로 나뉘는데 대칭형의 경우에는 암호화한 키를 통해 복호화가 이루어지기 때문에 보안적으로 안전하지 않다고 할 수 있다. 이에 따라 비대칭형 방식으로 암호화하기를 추천하며 대표적인 비대칭형 암호시스템으로는 RSA가 있다.
- 다수의 고객사가 JSP로 이루어진 만큼 JAVA 기반으로 RSA 암호화를 적용하는 방법을 알아보았는데 개인적으로 권남님의 블로그(http://kwon37xi.egloos.com/4427199)가 잘 정리되어 있다고 생각한다.
개인적으로 알아보며 정리한 것이니 잘못된 점이 있다면 댓글로 알려주시면 바로 확인하여 수정하도록 하겠습니다.
-----------------------------------------
※ 참고
- 암호화 알고리즘 : https://naleejang.tistory.com/218
'Hacking > Web' 카테고리의 다른 글
Sqlite Sql Injection Prevention (0) | 2019.12.30 |
---|---|
HTTP 인증 우회 (0) | 2019.12.16 |
0.0.0.0 의 의미 (0) | 2019.11.20 |
Mysql Special Comment (0) | 2019.11.20 |
JWT algorithm modify code (0) | 2019.11.19 |