Today I Learned …
[예습] 2주차 : 로그인 인증/식별, 로그인 로직, SQL Injection 인증 우회 본문
* 다음 주차의 수업 내용을 예습합니다.
1. 로그인 인증/식별
[0] 접근 통제 절차
선택된 대상만 접근이 가능함
① 식별 : 사용자가 본인의 신원정보를 밝히고 확인하는 행위 (ID)
② 인증 : 신원정보/신원확인의 유효성 확립 (토큰, PW, 서명 등)
③ 인가/권한부여 : 누가 무엇을 할 수 있는지 결정하는 규칙
[1] 식별 (Identification)
주체가 누구라고 스스로 밝히는 것 (사람→시스템)
① 책임추적성 분석에 중요한 자료가 됨
② 반드시 유일한 것을 사용해야 함 (ID, Email Addr, MAC Addr, IP Addr, RFID)
[2] 인증 (Authentication)
시스템이 사용자가 승인된 사용자라는 것을 인정해주는 것 (시스템→사람)
① 인증 방식에 따른 분류
- Type 1 : 지식 기반 (PW, PIN)
- Type 2 : 소유 기반 (신분증, 카드, 토큰 등의 물리적 증표)
- Type 3 : 존재 기반 (홍채, 지문, 음성 등의 생체 인식)
② 다중체계 인증 (Multi-factor Authentication)
- 서로 다른 여러 타입을 함께 사용 (ATM카드 + PIN, PW + 지문 등)
참고 포스팅
https://limetok.tistory.com/218
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=wnrjsxo&logNo=221727680845
http://www.ktword.co.kr/test/view/view.php?id=827&m_temp1=1794&nav=2
http://www.ktword.co.kr/test/view/view.php?m_temp1=2250&id=767
2. 로그인 로직 개발 케이스 (5 Cases)
[1] 식별/인증 동시
이게 뭘 말하는걸까 했는데... 아마!
if 아이디 = 맞고 || 비번 = 맞으면 { 로그인 처리 }
이걸 말하는게 아닐까 싶다.
⇒ 예습 범위 아니었다ㅎ 2주차 강의 듣고 복습 때 정리
[2] 식별/인증 분리
위의 가정에 따르면 얘는 아마
if 아이디 = 맞으면 { if 비번 = 맞으면 { 로그인 처리 } }
이거 아닌가 싶다.
⇒ 여기도 2주차 강의에서 배울 예정!
[3] 해시 사용
유저의 PW는 해싱하여 DB에 저장한다.
① 암호화 하지 않으면 DB가 해킹 당했을 경우, 유저의 PW가 그대로 노출된다.
② 외부 해킹이 아니더라도, 내부 개발자나 인력이 유저들의 PW를 볼 수 있게 된다.
③ PW 암호에는 일반적으로 단방향 해시 함수가 쓰인다.
[3-1] 해싱 (Hashing)
https://choco4study.tistory.com/11
3. SQL Injection 개념 및 실습
[0] SQL Injection 개념 및 공격 기법
https://choco4study.tistory.com/10
[1] SQL Injection 인증 우회
① 웹 애플리케이션의 일반적인 인증 절차
- 로그인 창에 ID, PW 입력
- SQL Query 생성
- DB에 Query 전송
- DB에서 Query 실행
- 반환되는 Return 값에 따라 인증 여부 판단
② 웹 페이지에서 로그인 인증 우회
- Query문을 이용하여 정상적인 사용자 ID와 PW를 입력하지 않고 로그인 인증을 수행함
▶ EXAMPLE 1 (FALSE OR TRUE = TRUE 조건 이용)
- user_id = '' → FALSE, '1' = '1' → TRUE : 이 두 조건을 OR 연산 하므로 최종 조건이 TRUE가 된다.
- 즉, 사용자 ID와 PW를 ' or '1' = '1 로 입력하여 로그인한다.
▶ EXAMPLE 2 (비밀번호 주석 처리*)
- ID : ' or '1' = '1' --
- PW : 아무 값이나 입력
- PW를 입력하지 않아도 Query문 상에서는 TRUE지만 개발 과정에서 PW 폼을 required 처리해놨기 때문에 아무 값이나 입력해준다. 또한 다른 조건에 걸리게 되는 경우가 있으니 가급적 입력해준다. PW가 틀려도 Query문에 의해 모두 TRUE 처리가 되니 걱정하지 말자.
* 주의 : 주석 처리 시 -- 뒤에 띄어쓰기를 하나 넣어주어야 정상적으로 처리됨
▶ EXAMPLE 3 (ID를 아는 경우)
- ID : choco' --
- PW : 아무 값이나 입력
* 주의 : 주석 처리 시 -- 뒤에 띄어쓰기를 하나 넣어주어야 정상적으로 처리됨
참고 포스팅
https://noirstar.tistory.com/264
https://m.blog.naver.com/jk130694/220502186904