SQL 주입에 대해 잘 알고 있습니다. 사용자가 앱, 웹 사이트, 클라이언트에 악의적 인 값을 삽입 할 때 예상되는 SQL 쿼리, 무엇을왜 매개 변수가있는 쿼리 또는 엔티티 프레임 워크를 사용하면 SQL 삽입을 방지합니까?
SELECT FirstName, LastName
FROM Customers
WHERE CustomerId = '' ; DROP DATABASE Foo --
같은 쿼리로 바뀌 가져옵니다
SELECT FirstName, LastName
FROM Customers
WHERE CustomerId = @valueFromApplication
같은 것을 할 때입니다 .. 또한 DB를 삭제하는 대신 공격자가 테이블 이름을 찾고 정보를 얻으려고 시도 할 수 있음을 알고 있습니다.
나는 또한 방지하는 데 도움이 몇 가지를 알고이 있습니다 : 매개 변수 (SQL 서버) 매개 변수화 SQL을 사용하여
- (C#을 , 아마도 F #?)
이러한 것들이 실제로 SQL 주입을 어떻게 방지합니까? 공격자가 이미 사용하고있는 입력에 동일한 악의적 인 가치를 전달할 수없는 이유는 무엇입니까?
매개 변수로 보낼 내용이 있으면 SQL Server는이를 매개 변수로 처리하므로 \ SQL 코드로 처리하지 않습니다. 따라서 매개 변수의 내용은 실행되지 않습니다 –
첫 번째 SQL 문은 매개 변수화되었으며 SQL 삽입에 취약하지 않습니다. C# 코드'string sql = "고객의 성, 성을 선택하십시오 CustomerId ="+ valueFromApplication; "은 취약합니다. – Blorgbeard
매개 변수에 '-'또는 ';'와 같은 일부 코드 분리 구문을 전달하면 일반 문자로 처리하고이를 단순히 열 필드에 삽입하거나 업데이트하거나 다른 작업을 수행합니다. 예를 들어 LIKE 연산자는 대신 문자열 자체로 매개 변수 값 "; 데이터베이스 삭제"를 검색합니다. – sir4ju1