방어방법
기본적으로 유저에게 받은 값을 직접 SQL 로 넘기면 안된다.
-
Prepared Statements 사용 : Prepared Statements (또는 Paramterized Queries) 는 SQL 쿼리를 실행하기 전에 미리 컴파일하고, 실행 시점에만 사용자 입력을 전달한다.
- 이 방법은 SQL 쿼리의 구조를 변경할 수 없기 때문에 SQL Injection 을 막는 효과적인 방법이다.
-
ORM (Object-Relational Mapping) 사용 : ORM 라이브러리는 SQL 코드를 직접 작성하는 대신 객체지향 코드를 사용하여 데이터베이스와 상호 작용 한다.
- 대부분의 ORM 라이브러리는 내부적으로 Prepared Statements 를 사용하여 SQL Injection 을 방지한다.
-
입력검증 :
- 클라이언트 측에서 입력을 받을 웹 사이트에서 폼 입력값 검증
- 백엔드는 정규표현식 등으로 클라이언트의 요청을 한번 걸러내고, SQL 쿼리로 넘길 때 해당 파라미터를 prepared statement 로 입력받고, 이를 프로시저로 처리한다.
-
데이터베이스 권한 최소화 :
- 데이터를 오직 조회만 해야 하는 기능에 대해서는 SELECT 권한만 부여한다.