2016-12-23 8 views
0

저장 프로 시저에서 동적 SQL을 사용해야합니다.SQL 삽입을 일으킬 수있는 문자를 제거하는 함수

동적 SQL은 SQL 개체를 생성하므로 매개 변수화를 수행하고 sp_executesql으로 실행할 수 없습니다.

저장 프로 시저 매개 변수 변수를 검사하고 불법 문자가 있는지 알려주는 SQL 함수가 있습니까? 아니면 그들을 제거하거나 이러한 문자 목록이 있습니까?

DECLARE @variable = 'password OR 1=1' 

IF IsSqlInjectionPossible(@variable) 
BEGIN 
    RAISERROR('Illegal input characters',16,1) 
    RETURN 
END 

또는 그렇게 어떻게

SET @variable = removePossibleSqlInjection(@variable) 

같은

뭔가?

답변

2

일부 저장 프로 시저 매개 변수 변수를 검사하고 잘못된 문자가 있는지 알려주는 SQL 함수가 있습니까? NO "SQL 주입을 일으킬 수있는 문자"가없는 간단하기 때문에

는 그런 기능이없고 단지가 될 수 없습니다. 주사에 사용 된 모든 문자는 완벽하게 합법적입니다. SQL 주입에 대한 귀하의 아이디어가 잘못되었습니다. 그것은 바이러스 나 박테리아와 같이 쿼리에 외계인이 아닌 일반적인 SQL입니다. 그래서 당신이 할 수있는 일은 SQL 쿼리에 사용되는 문자를 금지하는 것입니다.이 기능은이 함수가 효과적으로 쿼리를 지울 수있게합니다.

어떤 문자가 불법으로 간주되는 'password OR 1=1'에서 올 수 있습니까?

1

사용자가 친구의 공개 데이터를 요청할 수있는 양식이 있다고 가정 해 보겠습니다. 우리가 더 그 양식 게시물 ID를 가정하자 당신은 당신의 쿼리에서 숫자 값으로하는 것이 사용

select public_details 
from users 
where ID = 5 

ID는 사용자로부터 얻을 값입니다. 사용자가 검색하려는 ID를 선택할 수있는 것은 전혀 안전하지 않지만 예제를 위해 지금은 무시하겠습니다. 사용자가 다음과 같이 게시물을 보내면

5 or 1=1 

아포스트로피조차도 존재하지 않습니다. 따라서이 문제는 비즈니스 논리 문제이므로 응용 프로그램 수준에서 해결해야합니다.