2009-10-26 2 views
1

SQL 주입 공격을 제거하기 위해 저장 프로 시저를 사용할 수 있지만이를 유지하고 유지하는 데 비용이 많이 드는 것 이상으로 코드가 부 풀릴 수 있습니다.동적 SQL 쿼리에 대한 검색 문자열 살균

내 동적 SQL 쿼리에서 내 테이블 중 하나에서 2 열의 텍스트 문자열을 검색하려고하지만 그 전에는 C#으로 작성된 비즈니스 계층에 입력 위생을 위생 처리하고 싶습니다. . 입력에 특수 문자 (예 : #,!, $ 등)를 지정하고 싶습니다. 검색 문자열에서 삭제해야하는 최소 문자 집합은 무엇입니까? 단일 및 이중 따옴표를 제거하는 것으로 충분하다고 생각합니다. 그 맞습니까?

감사

답변

1
또한

이후의 문을 중지 세미콜론은 당신은 안전하지 않은 방향에서이 문제를 접근하고

0

(필요하지만 충분하지) 정의 시작한다. 허용되어야하는 문자 세트를 정의하고 (특별한 것이 아닌지 확인한 후), 그 세트에없는 모든 것을 제거하려고합니다.

아마도 DB로 전송 된 문자열을 작성하는 더 안전한 방법으로 SqlCommand을 조사해야합니다.

3

안전을 위해 저장 프로 시저를 사용할 필요가 없습니다. 사실 저장 프로 시저가 저장 프로 시저 자체가 동적 쿼리를 구성하는 경우 주입 공격에 대한 안전성을 반드시 보장하지는 않습니다. 수동 이탈은 100 % 안전하게 수행하기 어렵고 권장되지 않습니다.

대신 거의 모든 데이터베이스에서 지원하는 매개 변수가있는 쿼리를 사용하십시오.

1

저장 프로 시저 또는 매개 변수화 된 문을 사용하는 경우 프로 시저 내에서 동적 SQL에 문자열을 맹목적으로 작성하지 않는 한 아무 것도 위생하지 않아도됩니다. 그렇다면 Erland의 동적 SQL에 대한 훌륭한 기사 :

http://sommarskog.se/dynamic_sql.html