문제

LINQ의 ExecuteCommand 메소드를 사용하여 인서트를 실행 해야하는 상황이 있습니다.

(이 질문의 목적으로 단순화 됨)와 같은 것 : :

object[] oParams = { Guid.NewGuid(), rec.WebMethodID };

TransLogDataContext.ExecuteCommand (
"INSERT INTO dbo.Transaction_Log (ID, WebMethodID) VALUES ({0}, {1})",
oParams);

문제는 이것이 매개 변수화 된 쿼리와 같은 방식으로 SQL 주입 증명인지 여부입니다.

도움이 되었습니까?

해결책

약간의 연구를했고 나는 이것을 발견했습니다.

간단한 테스트에서는 ExecuteQuery 및 ExecuteCommand 메소드에 전달 된 매개 변수가 제공되는 값에 따라 자동으로 SQL 인코딩 된 것처럼 보입니다. 따라서 '문자가있는 문자열을 전달하면 자동으로 SQL을' '으로 탈출합니다. DateTimes, Decimals 등과 같은 다른 데이터 유형에 비슷한 정책이 사용된다고 생각합니다.

http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx
(당신은 그것을 찾기 위해 아래로 스크롤되어 있습니다)

이것은 나에게 조금 이상해 보인다 - 대부분의 다른 .NET 도구는 SQL 탈출보다 더 잘 알고있다. 대신 실제 쿼리 매개 변수를 사용합니다.

다른 팁

LINQ에서 SQL을 사용합니다 exec_sql Ad-Hoc 쿼리 문자열에 연결하는 것보다 훨씬 안전합니다. SQLCOMMAND 및 그 매개 변수 수집을 사용하는 것만 큼 안전한 SQL 주입이되어야합니다 (실제로 LINQ에서 SQL에서 내부적으로 사용하는 것일 수 있음). 그런 다음 다시, 얼마나 안전한 지 저것?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top