2009-05-29 2 views
10

데이터베이스 쿼리에서 SQL 삽입을 방지하는 데 권장되는 방법은 SqlParameters입니다. 이 매개 변수를 내부적으로 소독하는 코드/함수는 어디에서 찾을 수 있습니까? 내 사용자 지정 구현에서이 함수를 다시 사용하고 싶습니다. 반사경을 사용하여 그것을 찾으려고했지만 실패했습니다.SqlCommand는 매개 변수를 어떻게 sanitize합니까?

+0

위대한 질문 - 매개 변수화 된 쿼리를 사용하여 보안이 얼마나 중요한지 이해하는 것이 중요합니다. – RedFilter

답변

24

XSS가 아닌 SQL 삽입을 방지하고 은 코드 데이터 또는 매개 변수 데이터를 암호화하는 코드가 없습니다.

매개 변수 값을 쿼리 문자열과 별도로 서버에 전송하여 값이 이 아닌이 SQL 문으로 직접 대체되도록 보호합니다.

DECLARE @ParamValue int 
    -- //@ParamValue variable is populated from the framework in a safe way 
SELECT * FROM [table] WHERE [column] = @ParamValue 

이 빠르고 훨씬 더 안전하고 강력한 기능보다이 같은

그래서 대신 SQL 서버 실행 뭔가 : 그것은 이런 식으로 뭔가를 실행하는 것처럼

SELECT * FROM [table] WHERE [column] = ParameterValue 

그것은 더 매개 변수 데이터를 평가해야합니다. 이러한 함수는 custom escape characters 및 향후 개선 사항을 처리하기 위해 매우 복잡해야합니다 (읽기 : 오류가 발생하기 쉬운).

데이터가 데이터이고, 코드가 코드이며, 두 가지가 만나는 일은 결코 없습니다.


다른 지금, 삭제, 답변에 대한 귀하의 의견 :

내가 값 러키에 전달하면, 그것은이 중단되지 않도록 O''Rourke을로 인코딩합니다 쿼리. 옳은?

아니요, 정확하지 않습니다. 변수는 데이터 블록에서 직접 생성되므로 특수 이스케이프 또는 인코딩이 필요하지 않습니다.

+0

OK, 감사합니다. "// @ ParamValue 변수는 안전한 방식으로 프레임 워크에서 채워집니다."이렇게 안전한 방식으로 어떻게 채워지나요? –

+0

그것은 sql이 아닙니다. 변수는 클라이언트에서 전송 된 _data_ 블록에서 SQL Server에 의해 생성되지만 데이터 세그먼트에 보관되고 코드로 처리되지 않으므로 데이터를 이스케이프하거나 인코딩 할 필요가 없습니다. –

+0

자세한 내용은 알고 계십니까? 나는 정말로 전체 과정을 이해하고 싶다. –

관련 문제