입력값에서 SQL 인젝션 시도를 탐지하는 데 정규표현식을 활용할 수 있다. WAF에서 많이 쓰는 방식이다.
기본 패턴
작은따옴표, 주석 문자 같은 SQL 특수문자를 찾는 패턴을 쓴다. 정규표현식 테스터에서 의심 입력을 테스트해보자.
UNION 기반 공격
대소문자 무시하고 UNION SELECT 패턴을 찾는다. SQL 인젝션에서 흔히 쓰이는 패턴.
한계점
정규표현식만으로 모든 인젝션을 막을 수 없다. 우회 기법이 많다. 근본적으로는 prepared statement를 쓰는 게 맞다. 정규표현식은 보조 수단으로만. 테스터로 패턴은 확인하되 이것만 믿지는 말자.
에러 처리 고려하기
잘못된 정규표현식은 런타임 에러를 일으킬 수 있다. 동적으로 패턴을 만들 때는 try-catch로 감싸거나 미리 검증하자. 정규표현식 테스터에서 문법 오류를 미리 확인할 수 있다.
유니코드 처리
한글이나 이모지 같은 유니코드 문자를 처리할 때는 u 플래그가 필요할 수 있다. 다국어 지원이 필요하면 유니코드 문자 클래스를 활용하자.
보안 측면에서
사용자 입력으로 정규표현식을 만들면 ReDoS 공격에 취약할 수 있다. 신뢰할 수 없는 입력을 패턴으로 쓰지 말고, 꼭 필요하면 타임아웃을 설정하자. 테스터로 다양한 입력에 대한 동작을 확인하고 안전하게 사용하자.
정규표현식 테스터에서 실시간으로 패턴을 테스트하고 결과를 확인하면서 학습하면 정규표현식 실력이 빠르게 늘어난다.