웹 해킹 공부를 시작했는데 SQL Injection이 정확히 어떤 원리인지 궁금합니다. 로그인 폼에서 'OR 1=1-- 이런 걸 입력하면 왜 통과가 되는 건가요?
'OR 1=1--
SQL Injection은 사용자 입력이 SQL 쿼리에 직접 삽입될 때 발생합니다.
예를 들어 로그인 쿼리가 이런 식이라면:
SELECT * FROM users WHERE id='입력값' AND pw='입력값'
'OR 1=1--을 넣으면 WHERE 조건이 항상 참이 되고, -- 뒤는 주석 처리됩니다.
방어법은 Prepared Statement(파라미터 바인딩)를 사용하는 것입니다. 절대 문자열 결합으로 쿼리를 만들면 안 됩니다.
Prepared Statement가 가장 근본적인 방어입니다. 추가로 입력값 검증(화이트리스트), WAF(Web Application Firewall), 최소 권한 DB 계정 사용도 병행하면 좋습니다. ORM을 쓰는 것도 좋은 방법이고요.
댓글 3
SQL Injection은 사용자 입력이 SQL 쿼리에 직접 삽입될 때 발생합니다.
예를 들어 로그인 쿼리가 이런 식이라면:
'OR 1=1--을 넣으면 WHERE 조건이 항상 참이 되고, -- 뒤는 주석 처리됩니다.방어법은 Prepared Statement(파라미터 바인딩)를 사용하는 것입니다. 절대 문자열 결합으로 쿼리를 만들면 안 됩니다.
Prepared Statement가 가장 근본적인 방어입니다. 추가로 입력값 검증(화이트리스트), WAF(Web Application Firewall), 최소 권한 DB 계정 사용도 병행하면 좋습니다. ORM을 쓰는 것도 좋은 방법이고요.