1

.edmx 파일에 SQL Server 저장 프로 시저를 가져 왔습니다. EF에서 저장 프로 시저 입력 유효성 검사

entity.MySP(stringInput) 

stringInput 매개 변수는 EF를 사용하는 경우 (SQL 인젝션 등을 위해) 검증해야합니까

, 아니면 EF 나를 위해 것을 않는 가정 할 수있다 : 내가 좋아하는 생성 된 메소드를 호출하는거야? 그렇지 않다면 입력 매개 변수를 이스케이프/유효성 검사를 호출 할 수있는 메서드가 있습니까?

SQL Server 2008 R2, .NET 4.0, C#, ASP.NET MVC 4, VS2010을 사용하고 있습니다.

편집 : 나는 대신 SP를 호출하는 LINQ를 사용하고 싶습니다,하지만 난 FREETEXT를 사용하고, 그래서 이것은 더 우아한 솔루션입니다 생각 참고.

답변

1

여기 LINQ to Entity Framework Security에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/cc716760.aspx을 참조하십시오. "질의에 대한 보안 고려 사항"절을보십시오.

특히 질문에 대답하기 위해 Entity Framework는 저장 프로 시저를 호출하고 stringInput 값을 전달합니다. 즉, stringInput이 데이터베이스에 유해한 것을 주입하는 SQL 문이라도 저장 프로 시저로 전달하면 SQL 주입 공격이 발생하지 않습니다.

그러나 저장 프로 시저에서 stringInput을 사용하는 방법에 따라 공격을받을 수 있습니다. 특히 실행중인 동적 SQL 문에서 stringInput을 사용하면 공격에 노출 될 수 있습니다. SELECT 문의 WHERE 섹션에서 비교를 수행하는 경우 안전해야합니다.

+0

저는 이것을 FREETEXT와 CONTAINS 함수에 직접 넣을 것입니다. 나는 안전하다고 생각하니? – Howie

+0

예, 문제가되지 않습니다. sp_executesql 명령은 SQL 주입을 허용 할 수있는 커다란 명령입니다. –

1

정말로 저장된 프로 시저 내부에서 수행중인 작업에 따라 다릅니다. 단순히 저장된 procs를 사용함으로써, 당신은 SQL Injection에 면역이되지 않습니다. 반대로 LINQ to Entity 코드의 변수를 사용하면 쿼리가 올바르게 매개 변수화되어 SQL 주입이 안전합니다. 불행히도 전체 텍스트 인덱싱은 Entity Framework에서 지원되지 않으므로 성능 문제를 해결하기 위해 procs 또는 함수를 사용해야합니다. 그러나 LINQ 생성 쿼리보다 더 "우아"하다고 말할 수는 없습니다.