SQL 인젝션 공격에서 사용되는 인코딩 문자들은 데이터베이스 쿼리에서 특수 문자를 회피하거나 조작하는 데 사용됩니다. 아래는 일반적으로 사용되는 인코딩 문자와 그에 매칭되는 문자, 그리고 공격 예시를 정리한 표입니다.
| 인코딩 문자 | 매칭되는 문자 | 
|---|---|
%27 | ' (Single Quote) | 
%22 | " (Double Quote) | 
%3D | = (Equal Sign) | 
%3B | ; (Semicolon) | 
%2C | , (Comma) | 
%20 | (Space) | 
%2F | / (Slash) | 
%5C | \ (Backslash) | 
가정: 로그인 폼에서 사용자 이름과 비밀번호를 입력받는 경우
SELECT * FROM users WHERE username = 'admin' AND password = 'password';
악의적인 사용자가 입력 필드에 다음과 같은 값을 입력할 경우:
admin' --결과적으로 쿼리는 다음과 같이 변환됩니다:
SELECT * FROM users WHERE username = 'admin' -- ' AND password = '';
이 쿼리는 실제 비밀번호 확인 없이 admin 사용자에 대한 접근을 허용합니다.
위와 같은 공격을 URL 인코딩을 통해 수행할 수도 있습니다. 예를 들어, HTTP 요청의 URL에서 다음과 같은 형식으로 전달할 수 있습니다.
http://example.com/login?username=admin%27%20--&password=
이 URL에서 %27은 '로 인코딩된 것입니다. 서버는 이를 해석하여 SQL 쿼리를 실행하게 됩니다.
SQL 인젝션 공격은 입력값을 적절히 검증하지 않아서 발생합니다. 위의 인코딩 문자와 예시를 통해 공격자가 어떻게 입력값을 조작할 수 있는지 이해할 수 있습니다. 이를 방지하기 위해서는 항상 사용자 입력을 검증하고, 파라미터화된 쿼리를 사용하는 것이 중요합니다.