내가 보는 방식으로 SQL 인젝션 공격은 다음과 같이 방지 할 수 있습니다.
- 신중하게 선별, 필터링, 인코딩 입력 (SQL에 삽입하기 전에)
- 준비된 명령문 사용 / 매개 변수화 된 쿼리
나는 각각에 장단점이 있다고 가정하지만 왜 # 2가 사출 공격을 막는 사실상의 방법으로 이륙하여 고려 되었습니까? 더 안전하고 오류가 적은 경향이 있습니까? 아니면 다른 요인이 있습니까?
내가 이해하는 것처럼 # 1이 올바르게 사용되고 모든 경고가 처리되면 # 2만큼 효과적 일 수 있습니다.
살균, 필터링 및 인코딩
살균 , 필터링 및 인코딩의 의미가 혼동되었습니다 . 필자는 내 목적을 위해 위의 모든 옵션 1을 고려할 수 있다고 말합니다.이 경우 살균 및 필터링은 입력 데이터 를 수정하거나 버릴 가능성 이 있지만 인코딩 은 그대로 데이터를 보존 하지만 인코딩합니다. 주입 공격을 피할 수 있습니다. 나는 탈출하는 데이터를 인코딩하는 방법으로 간주 할 수 있다고 생각합니다.
매개 변수화 된 쿼리 및 인코딩 라이브러리
개념 parameterized queries
과 개념이 encoding libraries
상호 교환 적으로 취급 되는 답변이 있습니다 . 내가 틀렸다면 정정하되, 그들이 다르다는 인상을 받고 있습니다.
내가 이해 하는 것은 SQL이 RDBMS로 전송되기 전에 SQL 자체를 변경하기 때문에 SQL "프로그램"을 수정할 수 encoding libraries
있는 잠재력 이 아무리 우수하더라도 항상 이해 하는 것 입니다.
Parameterized queries
반면, RDBMS에 SQL 프로그램을 전송하면 RDBMS에 쿼리를 최적화하고, 쿼리를 최적화하고, 쿼리 실행 계획을 정의하고, 사용할 인덱스를 선택하는 등의 작업을 수행 한 다음 RDBMS 내부의 마지막 단계로 데이터를 연결합니다. 그 자체.
인코딩 라이브러리
data -> (encoding library)
|
v
SQL -> (SQL + encoded data) -> RDBMS (execution plan defined) -> execute statement
매개 변수화 된 쿼리
data
|
v
SQL -> RDBMS (query execution plan defined) -> data -> execute statement
역사적 중요성
일부 답변에 따르면 성능상의 이유로 그리고 인젝션 공격 이전에 대상 지정 인코딩 문제가 대중화되기 전에 역사적으로 매개 변수화 된 쿼리 (PQ)가 생성되었다고합니다. 어느 시점에서 PQ가 주입 공격에 대해서도 매우 효과적이라는 것이 분명해졌습니다. 내 질문의 정신을 유지하기 위해 왜 PQ가 선택한 방법으로 남아 있었으며 SQL 주입 공격을 방지 할 때 다른 방법보다 왜 번성 했습니까?