2014-11-27 1 views
2

스토어드 프로 시저 사용자 이외에 사용자 입력을 위생해야 할 필요가 있다고 생각해야합니다. 잘 나는 미친 소리가 난다는 것을 안다. 그러나 나는 상점 절차에 의해서만 충분히 편안하다고 느끼지 않는다. 내 첫 번째 이유는 저장 프로 시저에서 오류가 발생할 수 있지만 응용 프로그램 자체에서 오류 메시지가 코딩되어 외부에서 코드 내용을 이해하기가 어렵 기 때문입니다. 그러나 나는 여전히 이것이 안전하지 않다고 생각한다.은 SQL 인젝션에 대해 실제로 안전하게 저장되는 프로 시저입니다.

의견이 있습니까? 또는 저장 프로 시저를 의심하는 것은 잘못된 것입니까?

+1

동적 SQL 문자열을 작성하고 실행하도록 코딩 된 저장 프로 시저가 주입 공격에 취약 할 수 있습니다. 그러나 입력 매개 변수를 승인하고 비 동적 SQL에서이 매개 변수를 사용하도록 구축 된 프로 시저는 취약하지 않습니다. 문제의 SP에 대한 정의를 게시하십시오. –

+0

당신은 그를 [Bobby tables] (http://bobby-tables.com);)로 소개 할 수 있습니다 (농담처럼 들리지만 링크를보고 데이터베이스 입력을 살균하지 않으면 어떻게되는지보십시오) – Barranka

+0

@MichaelBerkowski 비 동적 SQL의 매개 변수가 의미하는 것은 매개 변수가 사용자 입력에 의존하지 않는 경우입니까? – user4237435

답변

2

아니요, 안전하지 않습니다. 당신은 또한이 같은 저장 프로 시저 뭔가를 수행 할 수 있습니다

SET @sql = 'Select * from products where name like ''' [email protected]+''' '; 
exec(@sql); 

당신이 코드를 삽입 할 수 @spinput에 잘못된 값으로.

그러나 SQL 주입에 안전 한 저장 프로 시저를 작성할 수 있습니다.

1

적절한 매개 변수를 사용하더라도 데이터베이스를 계속 망칠 수 있습니다. 매개 변수로 들어가는 스크립트를 삽입 할 수는 있지만 웹 페이지에 표시 될 때 어떤 일을 시작하면 안됩니다. 매개 변수를 사용하여 데이터베이스가 의도 한대로 사용되는지 확인하고 나중에 출력을 살균하십시오. 사용자가 입력 한 데이터를 절대 신뢰하지 마십시오.

+2

당신이 설명하는 것은 SQL 주입이 아닌 지속적인 XSS 주입입니다 – overflowed

0

저장 프로 시저를 사용하면 일반적으로 SQL 삽입을 방지 할 수 있지만 SQL 주입을 방지하는 유일한 솔루션은 아니며 모든 형태의 SQL 주입을 방지하지 못합니다.

큰 차이는 있지만 저장 프로 시저를 호출하는 가장 일반적인 방법 인 매개 변수가있는 쿼리는 아닙니다. 쿼리에서 사용하는 값을 매개 변수에 넣으면 데이터베이스 라이브러리에서 직접 이스케이프 처리하지 않고 처리 할 수 ​​있습니다.

매개 변수화 된 쿼리를 사용하지 않고도 SQL 삽입에 안전한 코드를 작성할 수는 있지만 어렵습니다. 사용하고있는 특정 데이터베이스에 대해 문자열에서 벗어날 필요가있는 문자를 정확히 알아야합니다. 잘못 입력하면 SQL 인젝션에 대해 전혀 알지 못하는 것처럼 보호받지 못합니다.

매개 변수화 된 쿼리를 사용하는 경우 데이터베이스에 값을 보내는 단계는 SQL 주입으로 안전하지만 쿼리 자체는 아닐 수도 있습니다. 쿼리가 SQL 코드 자체를 생성하고 실행하면 문자열 이스케이프와 동일한 문제가 발생합니다. 그러나 SQL 코드에서 SQL 코드를 작성하는 것은 그리 평범하지는 않습니다. 그렇게 할 경우 수행중인 작업을 매우 잘 알고 있습니다.

+0

@Gumbo : 첫 번째 문장을 넘어 읽었습니까? – Guffa

+0

하지만 "저장 프로 시저를 사용하면 SQL 주입을 방지 할 수 있습니다."라는 잘못된 내용이 있습니다. – Gumbo

+0

@Gumbo : 한숨. 어떤면에서 틀린가? – Guffa

관련 문제