본문 바로가기
Q&A2021년 1월 24일1분 읽기

SQL Injection 기초 질문입니다

변
변서영
조회 900댓글 3

웹 해킹 공부를 시작했는데 SQL Injection이 정확히 어떤 원리인지 궁금합니다. 로그인 폼에서 'OR 1=1-- 이런 걸 입력하면 왜 통과가 되는 건가요?

댓글 3

김김영삼5년 전

SQL Injection은 사용자 입력이 SQL 쿼리에 직접 삽입될 때 발생합니다.

예를 들어 로그인 쿼리가 이런 식이라면:

SELECT * FROM users WHERE id='입력값' AND pw='입력값'

'OR 1=1--을 넣으면 WHERE 조건이 항상 참이 되고, -- 뒤는 주석 처리됩니다.

방어법은 Prepared Statement(파라미터 바인딩)를 사용하는 것입니다. 절대 문자열 결합으로 쿼리를 만들면 안 됩니다.

오오수빈(guest)5년 전
그러면 Prepared Statement를 쓰면 완전히 안전한 건가요? 다른 방어법도 있나요?
김김영삼5년 전

Prepared Statement가 가장 근본적인 방어입니다. 추가로 입력값 검증(화이트리스트), WAF(Web Application Firewall), 최소 권한 DB 계정 사용도 병행하면 좋습니다. ORM을 쓰는 것도 좋은 방법이고요.

Ctrl+Enter로 등록