[Week-2] 로그인 인증/식별
0. 서론
이번주부터는 수업시간에 배운 내용을 살짝 정리하고 해당 내용을 복습할 때 한번 읽어보려고 합니다.
중간에 갑자기 생각이 안나고 그럴 때가 많은 것 같아 정리가 필요할 것 같습니다.
1. 단어정리
SQL injection : 단어 그대로 정상적인 SQL문에 악의적인 SQL문을 삽입하여 DB를 비정상적으로 조작하는 공격 방법
쿠키 : 웹사이트 방문했을 때 만들어지는 파일(정보 = 방문기록 비밀번호 등), 클라이언트 측에 저장됨
세션 : 서버에 저장되는 정보
세션ID : 쿠키에 저장되는 세션 식별 정보를 가진 ID
식별(Identification) : 해당 사용자의 계정정보를 DB에서 찾아내는 것(ID,사번 등), Promary key, 보호 X
인증(Authentication) : 식별된 DB의 정보를 사용자 정보와 비교하는 행위 (PW, OTP 등), 식별에 사용되는 정보
hash: 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수로 일방향성을 가지는 함수입니다.
암호화를 하면 복호화가 불가능하다는 개념으로 주요 알고리즘은 MD5,SHA시리즈 등이 있습니다.
2. SQL쿼리를 통해 식별/인증하는 5가지 유형
1. 식별/인증을 동시에 처리하는 유형
SQL문을 작성시 식별과 인증을 AND로 사용하여 검색
SELECT * FROM [테이블명] WHERE id = '$username' AND pass = '$pass';
쿼리문을 실행했을 때 결과값이 존재하면 로그인 성공 아니면 로그인 실패로 나오는 형태
(== 해당 방법은 매우 취약한 로그인 인증방식)
2. 식별/인증 분리하여 처리하는 유형
로그인 페이지에서 입력받은 id,PW값을 각각 변수 값에 저장하고 아래 쿼리문을 실행하여 실행 결과의 비밀번호와 유저값이 일치하는지 확인한 후 같으면 로그인 성공 아니면 로그인 실패로 나오는 형태
SELECT pass FROM [테이블명] WHERE id = '$username';
sql1.execute
if(pass == res.pass) ## 입력받은 PW와 DB값이 같으면 로그인 성공
else: ##다르면 로그인 실패
3.식별/인증을 동시에 처리하는 유형(with. hash)
pass부분을 hash 알고리즘을 통해 변경하여 쿼리문을 전달하고 로그인함.
SELECT * FROM [테이블명] WHERE id = '$username' AND pass = hash('$pass');
4. 식별/인증 분리하여 처리하는 유형(with. hash)
SELECT pass FROM [테이블명] WHERE id = '$username';
sql1.execute
if(hash(pass) == res.pass) ## 입력받은 PW와 DB값이 같으면 로그인 성공
else: ##다르면 로그인 실패
5. 식별/인증 분리하여 처리하는 유형(with.개행(\n))
해당 방법을 통해 작성된 쿼리문은 주석을 사용하지 못함
SELECT * FROM [테이블명] WHERE id = '$username' AND \n pass = '$pass';
금일은 2주차 수업을 정리해보았습니다.
다음 회차에서는 각 로그인 페이지를 만들어보고 해당 페이지를 우회하는 방법에 대해 확인해보겠습니다.