sql injection 을 차단하기 위해서 동적쿼리를 구현할 사항이 생기면 아래와 같이 sp_executesql 함수를 호출하며, 파라미터 순서는 동적쿼리 구문, 파라미터화, 변수 순으로 명시해야 합니다.
다음과 같은 원칙을 지킨다면 이러한 SQL Injection을 사전에 방지할 수 있습니다
① 프로그래머의 적극적인 의지가 있어야 합니다!
-. 여러가지 신경써야 할곳도 많고 입력값에 대한 체크로직 또한 늘어날 것입니다
많은 귀차니즘이 생길겁니다
머 누가 장난치겠어? 라는 생각이 많은 빵꾸를 만듭니다
② 사용자가 직접 입력하는 파라미터는 절대 신뢰하지 않아야 합니다!
-. 입력값은 javascript 뿐만 아니라 서버측에서도 체크를 해야 합니다
숫자만 받은 입력칸이면 반드시 javascript 체크와 동시에 서버측에서도 숫자만 입력되었는지 체크해야 합니다
-. 필요하다면 특수문자는 필터링해 버립시다 ( ‘ “ / \ : ; Space < > )
-. 또 가능하다면 SQL 명령도 필터링 해버립시다 (UNION, SELECT, DELETE, INSERT, UPDATE, DROP..)
③ 사용자 입력을 받아 SQL을 작성하는 부분은 반드시 PreparedStatement를 사용하여 바인딩 처리 합니다!!
-. PreparedStatement는 SQL Injection을 원천적으로 봉쇄합니다
-. 꼬~옥 필요한곳만 Statement를 사용합니다
④ 웹에서 사용하는 유저는 OS계정 뿐만 아니라 데이터베이스 계정또한 가능한 권한을 낮춥니다!!
⑤ 에러 메세지를 노출하지 않습니다!!
-. 에러 메세지는 해커들에게 많은 정보를 제공해 줍니다
가능하면 유저에게 알리지 말고 은밀하게 보관해야 합니다
⑥ 동적 SQL은 가능하면 생성하지 않는다!!
-. 가능한 동적 SQL은 지양하며, 비지니스로직상 동적 SQL이 어쩔수 없다면 파라미터 검사를 충분히 해야한다
출처 : http://blog.naver.com/classic2u/50002735625