복붙노트

[SQL] 파라미터하는 SqlCommand SQL 주입에 내 프로그램의 면역을 사용합니까?

SQL

파라미터하는 SqlCommand SQL 주입에 내 프로그램의 면역을 사용합니까?

나는 SQL 주입 오히려 위험하다 알고 있어요. 이제 내 C # 코드에서 내가하는 SqlCommand 클래스를 매개 변수화 된 쿼리를 구성 :

SqlCommand command = ...;
command.CommandText = "SELECT * FROM Jobs WHERE JobId = @JobId;";
command.Parameters.Add("@JobId", SqlDbType.UniqueIdentifier ).Value = actualGuid;
command.ExecuteNonQuery();

이 자동으로 SQL 주입에 내 코드 면역을 할 것인가? 내가 뭔가를 추가 할 필요가 있습니까?

해결법

  1. ==============================

    1.나는 특정을 위해 말하고 싶지만, 아마도 정식, 예 매개 변수화 쿼리, 그래 충분하다.

    나는 특정을 위해 말하고 싶지만, 아마도 정식, 예 매개 변수화 쿼리, 그래 충분하다.

    그러나, 사람들은 종종이 같은 코드를 작성

    cmd.CommandText = string.Format("SELECT * FROM {0} WHERE col = @col;", tableName);
    cmd.Parameters.Add("@col", ...);
    

    잘못 여부 - 매개 변수와 할 수있는 욕망과 TABLENAME 자체를 통과 할 수있는 방법은 때때로 단순히 존재 없기 때문입니다. 종종 TABLENAME은 (아마도에만 모든 입력에서 파생하지 않는 정적 / 상수 값의 집합에서 읽을하지 않는 한) 실제로 SQL 주입을 허용 것을 간과 한 후 것 같다.

  2. ==============================

    2.이 MSDN 기사에 참고에 따르면, "특수 문자를 입력 위협에만 동적 SQL와 매개 변수화 된 SQL을 사용하지 않을 경우 포즈."

    이 MSDN 기사에 참고에 따르면, "특수 문자를 입력 위협에만 동적 SQL와 매개 변수화 된 SQL을 사용하지 않을 경우 포즈."

    내가 믿는 그래서 당신은 SQL 주입에 대한 안전합니다. Idendity 당신의 URL에 값 그러나 이것은 또 다른 이야기처럼 식별자를 사용할 때 몇 가지 논리적 인 위험이있을 수 있습니다.

  3. ==============================

    3.SQL 주입 동적 SQL의 실행에 주로 의존한다. 즉, SQL 문은 사용자가 입력 한 값을 SQL의 연결에 의해 건설했다.

    SQL 주입 동적 SQL의 실행에 주로 의존한다. 즉, SQL 문은 사용자가 입력 한 값을 SQL의 연결에 의해 건설했다.

    완전히 SQL 주입을 방지하기 위해,

    MSDN에서

  4. ==============================

    4.아주 좋은 연습하고 당신이하지 CONCATENATE SQL 문자열 어디서나처럼 (당신이 전화를 모든 저장 프로 시저 내부에 포함하여 - 즉 피하기 동적 SQL)하는 SqlCommand를 사용하면 SQL 주입 공격으로부터 면역 될 것입니다.

    아주 좋은 연습하고 당신이하지 CONCATENATE SQL 문자열 어디서나처럼 (당신이 전화를 모든 저장 프로 시저 내부에 포함하여 - 즉 피하기 동적 SQL)하는 SqlCommand를 사용하면 SQL 주입 공격으로부터 면역 될 것입니다.

  5. ==============================

    5.당신이 매개 변수를 통과하더라도 당신은 동적 SQL을 사용하는 경우 SQL 주입에 면역이되지 않습니다. 너무 나쁜 SQL Server는이 위생적으로 매개 변수로 기능을 내장하지 않습니다

    당신이 매개 변수를 통과하더라도 당신은 동적 SQL을 사용하는 경우 SQL 주입에 면역이되지 않습니다. 너무 나쁜 SQL Server는이 위생적으로 매개 변수로 기능을 내장하지 않습니다

  6. from https://stackoverflow.com/questions/7174792/does-using-parameterized-sqlcommand-make-my-program-immune-to-sql-injection by cc-by-sa and MIT license