1

이것은 정말 멍청한 질문 일지 모르지만 나는 왜 그렇지 않은지 추측합니다 ...여기에 SQL 주입의 가능성이 있습니까?

저는 RIA Services with Entity Framework를 백 엔드로 사용하고 있습니다. 필자는 사용자 입력을 받아들이고 데이터를 사용하여 직접 RIA 서비스 (그리고 EF와 차례로 데이터베이스)에 질문하는 앱의 일부 장소를 가지고 있습니다. 이 레이어 중 하나라도 보안 문제를 방지하는 데 도움이됩니까? 또는 데이터를 직접 스크럽해야합니까? 새 사용자 등록이 응용 프로그램과 함께, 나는이 메소드를 호출 할 때마다 예를 들어

:

[Query] 
public IEnumerable<EmailVerificationResult> VerifyUserWithEmailToken(string token) 
{ 
    using (UserService userService = new UserService()) 
    { 
     // token came straight from the user, am I in trouble here passing it directly into 
     // my DomainService, should I verify the data here (or in UserService)? 
     User user = userService.GetUserByEmailVerificationToken(token); 
     ... 
    } 
} 

(그리고 난 내 자신의 사용자 검증 시스템이 완전히 다른 문제입니다 압연 수 있는지 여부, 우리는 과정에있다 MS의 멤버쉽 프레임 워크를 채택했다. 나는 일반적으로 SQL 인젝션과 RIA 서비스에 더 관심이있다.)

답변

3

SQL 인젝션은 예 원시 SQL 스트링

를 생성 할 때 사용되는 이스케이프 문자열에 기초

$name의 값이 '마크를 포함하며, 따라서 의미를 수정할 수 있기 때문에
"SELECT * FROM `user` WHERE `name` = '" . $name . "'" 

은 취약 SQL 문. 내가

이 주위에 올바른 방법 '이 탈출하는 당신에게 :) 말할 수있는 암호 검사를 우회 매우 유용

"SELECT * FROM `user` WHERE `name` = '' OR 1=1; --'" 

: $ 이름을 따라서 그 SQL 쿼리를 만드는 ' OR 1=1; -- 경우 좋은 예입니다 문자를 \ '(mysql의 경우). 그래서 PHP와 같은 언어는 mysql_real_escape_string을 제공합니다. 그러나 적절한 매개 변수화 된 쿼리 시스템을 사용하면 원하는 것을 통과시킬 수 있고 라이브러리가 올바르게 이스케이프 처리합니다.

당신의 UserService 일부 사기 SQL 문자열 생성을하지 않는 코드를보고

token의 값을 확인 할 이유가 없다 (그리고 당신이 잘해야한다 그래서, 엔티티 프레임 워크가 그 일을하지 않는 확신)

+0

어디서 왔는지 상관없이 데이터베이스 쿼리를 항상 스크럽해야합니다. 프로그래머가 예상하지 못했던 곳에 SQL injection을하는 매우 흥미로운 방법이 있습니다. 그리고 입력을 제거하는 것은 자원을 전혀 소모하지 않습니다. – TheLQ

+0

라이브러리/프레임 워크가 이미 해당 라이브러리를 제거하는 경우가 아닙니까? 그렇지 않으면 올바르지 않은 데이터 (예 : 이중 이스케이프 된 데이터)가 발생할 수 있습니다. – oedo

2

EF는 데이터베이스에서 데이터를 검색하기 위해 매개 변수화 된 쿼리를 생성하고있다.

3

EF가이 값을 매개 변수로 사용하지만 실제로 시작하려면 SQL Profiler을 시작하고 무엇이 SQL Server로 보내지는지 확인하십시오.

관련 문제