17. 17. 다음의 HTTP Request 로그를 보고 물음에 답하시오.
[HTTP request] GET /member/login.php?user_id=1' or '1' = '1'# &user_pw=foo HTTP/1.1 GET /member/login.php?user_id=1' or '1' = '1 &user_pw=foo HTTP/1.1 1) 해당 취약점은 무엇인가? 2) 그렇게 판단한 이유는? 3) 대응 방안은?
정답 확인 | 맞췄어요 O | 틀렸어요 X |
2) user_id에 특수 문자를 포함한 1' or '1'='1'#을 넣어서 로그인 검증을 하기 위한 SQL 문을 참으로 만들어 인증 로직을 우회하려는 시도를 하고 있기 때문임.
3-1) 입력값에 특수 문자가 포함되지 않도록 필터링 로직을 구현(이 경우 클라이언트 단이 아닌 서버에 검증 로직을 반드시 넣어야 함. 자바스크립트로 클라이언트 단에서만 검증하는 경우 Paros, Burpsuite와 같은 proxy툴로 검증 로직을 우회할 수 있기 때문임)
3-2) 서버의 DB Connection 구문을 Prepared Statement 방식으로 변경(사용자가 입력한 값이 SQL 명령의 일부가 아닌 매개 변수로 처리되기 때문에 해당 컬럼에만 들어가고 SQL문 전체에 영향을 주지 않음)