로그인이란?
- 시스템에 자기 자신을 증명하는 것
- 로그인 과정은 크게 식별과 인증으로 나뉜다.
> 식별
시스템 내 수많은 사용자 중에서 특정한 사용자를 찾아내는 작업
사용자가 로그인할 때 식별정보를 입력하면 서버는 DB에 일치하는 식별정보가 존재하는지 확인한다.
하지만 만약 중복된 식별정보가 존재한다면?
서버는 특정한 사용자를 가려낼 수 없으므로 식별이 불가능하다. 따라서 식별정보는 중복될 수 없다는 특징이 있다.
시스템에 로그인할 때 흔히 사용하는 ID, Email이 대표적인 식별정보이다. 이러한 식별정보는 DB에 PK로 저장되기 때문에 실제로 중복체크를 우회해서 회원가입을 시도해도 DB 자체에서 거부되어 회원가입이 불가능하다.
> 인증
식별된 사용자가 본인이 맞는지 확인하는 작업
시스템은 사용자에게 식별정보와 관계되어 있는 인증정보를 추가적으로 요구함으로써 사용자가 식별정보의 주인이 맞는지 확인하는 인증과정을 수행한다.
대표적인 인증정보는 비밀번호가 있다.
일반적으로 시스템에 로그인하는 과정을 생각해보면 사용자는 로그인창에 ID와 PW를 동시에 입력한다. 서버는 받은 ID와 PW를 이용하여 식별과 인증과정을 수행하고, 정보가 일치하면 비로소 로그인이 된다.
cf) 식별정보는 유출되도 안전하지만, 인증정보는 유출 시 위험성을 가진다.
> 로그인 로직
위에서 설명한 식별과 인증을 통한 로그인 과정을 확인해보면 다음과 같다.
- 사용자가 id / pw 입력
- 서버는 db에서 id에 해당하는 데이터를 찾음 (식별)
- 찾은 데이터의 pw가 사용자가 입력한 pw와 일치하는지 확인 (인증)
- 일치한다면 로그인 성공, 일치하지 않으면 로그인 실패
식별과 인증을 통한 로그인을 구현하는 방법은 여러가지가 있다. 그 중 대표적인 방법 2가지를 소개하겠다.
1. 식별/인증 동시
식별정보와 인증정보를 select문의 조건에 동시에 삽입하여 식별과 인증을 동시에 수행한다.
수도코드로 확인하면 다음과 같다.
// id와 pw를 이용해서 식별과 인증을 동시에 수행
$sql = "select * from member where id='$userid' and pw='$userpw'";
$ret = $sql.execute();
if($ret){ // 실행 결과 데이터가 존재하면
// 로그인 성공
}else{
// 로그인 실패
}
2. 식별/인증 분리
식별/인증 분리방식은 select문의 조건에 식별정보만을 이용하여 일치하는 데이터를 추출한다.
이후 추출한 데이터의 인증정보와 사용자가 입력한 인증정보가 일치하는 지 확인하여 인증을 수행한다.
수도코드로 확인하면 다음과 같다.
// id로 식별 수행
$sql = "select * from member where id ='$userid’";
$ret = $sql.excute();
// pw로 인증 수행
$db_pass = $ret['pw'];
if($db_pass == $userpw){ // pw가 일치하면
// 로그인 성공
}else{
// 로그인 실패
}
하지만 위와 같이 사용자의 비밀번호를 데이터베이스에 평문(비밀번호 그대로)으로 저장하게 된다면 해킹에 매우 취약할 것이다. 그렇기 때문에 대부분 서버에서는 비밀번호를 해시값으로 바꿔서 저장한다. DB에 비밀번호 평문 대신 해시값을 저장하면 DB가 탈취되어도 피해를 일차적으로 방지할 수 있다. 해시값 크랙이 우선 수행되어야 추가적인 공격으로 이어지기 때문이다.
대소문자, 특수문자를 활용하여 비밀번호를 복잡하게 설정할수록 해시값 크랙은 어려워지므로 비밀번호는 최대한 복잡하게 설정하는 것이 좋다.
'웹 모의해킹 스터디 > 수업 정리' 카테고리의 다른 글
12주차 수업 정리 (CSRF, XSS와 CSRF 차이, CSRF 취약점, 공격 예시) (0) | 2024.01.18 |
---|---|
11주차 수업 정리 - 2 (JavaScript DOM, 정보 탈취) (0) | 2024.01.11 |
11주차 수업 정리 - 1 (XSS 공격 시나리오, XSS 대응 방안, 필터링은 대응방안이 아니다) (2) | 2024.01.11 |
모의해킹의 꽃 Burp Suite (버프슈트)와 proxy에 대해 알아보자 (2) | 2023.11.19 |
쿠키 vs 세션 vs 토큰(JWT) | 서버가 로그인 상태를 유지하는 방법 (2) | 2023.11.14 |