복붙노트

[SQL] 어떤 SQL 매개 변수 당신을 보호합니까에서?

SQL

어떤 SQL 매개 변수 당신을 보호합니까에서?

매개 변수는 악의적 인 사용자 입력으로부터 당신을 보호하는 데 사용됩니다.

매개 변수가 문자열을 기대한다면, 그것은 ... SQL로 해석됩니다 쓰기 입력, 그래서 악의적 인 사용자가 등 'DROP', 'TRUNCATE'같은 것들을 사용 할 수 있습니까?

ASP, asp.net, 자바 등의 매개 변수 사이의 보호가 차이가 있습니까?

SQL 주입을 방지하기 위해 정말 충분한 매개 변수는 참조 :?

해결법

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

    1.그것은 정상적인 SQL 사업자가 이와 같이 해석되지 않도록 장면 뒤에 문자열 인 경우 매개 변수화 된 쿼리는 일반적으로 매개 변수를 인용. 사용자가 악성 데이터는 단순한 문자열 입력으로 처리하고 SQL 운영자 / 명령으로 해석되지 들어가는 경우에도이 방법.

    그것은 정상적인 SQL 사업자가 이와 같이 해석되지 않도록 장면 뒤에 문자열 인 경우 매개 변수화 된 쿼리는 일반적으로 매개 변수를 인용. 사용자가 악성 데이터는 단순한 문자열 입력으로 처리하고 SQL 운영자 / 명령으로 해석되지 들어가는 경우에도이 방법.

    거기는 다양한 프레임 워크에서 구현하는 방법을 기술적 차이가 될 수 있지만 기본적인 아이디어 (및 결과) 동일 할 수있다.

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

    2.당신은 당신의 정의에주의 할 필요가있다. '매개 변수'여러 가지를 의미 할 수있다; 저장 프로 시저의 매개 변수, 예를 들어,과 자신의 모든에서 당신을 보호하지 않습니다. 예를 들어 자바를 사용하려면 :

    당신은 당신의 정의에주의 할 필요가있다. '매개 변수'여러 가지를 의미 할 수있다; 저장 프로 시저의 매개 변수, 예를 들어,과 자신의 모든에서 당신을 보호하지 않습니다. 예를 들어 자바를 사용하려면 :

    sql = "exec proc_SearchForUser '" + userNameToSearch + "'";
    

    더 좋든 나쁘 든 원시 이상 없다

    sql = "SELECT * FROM Users WHERE userName = '" + userNameToSearch + "'";
    

    그리고 사용자 이름만큼이나 취약

    ';DROP TABLE users;--
    

    매개 변수화 된 쿼리는, 다른 한편으로는, 안전합니다. 그들은 같은 보일 수 있습니다

    PreparedStatement statement = con.prepareStatement("SELECT * FROM Users WHERE userName = ?");
    

    또는 참

    PreparedStatement statement = con.prepareStatement("exec proc_SearchForUser ?");
    

    당신이 말하는, 사용 ... 값을 기입 할 때 때문에 안전 이유는있다

    statement.setString(1, userName);
    

    다음 문자열 - 같은 심지어 하나 " '; DROP 표 사용자는 -"- 제대로 DB 엔진에 의해 도주하고 무해한 렌더링됩니다.

    그것을 망치는 여전히 가능 - 예를 들어, 저장 프로 시저가 단지 내부적으로 SQL 문자열을 구축하고 실행하는 경우, 입력을 신뢰 -하지만 매개 변수를 사용하여 준비된 명령문이 더 이스케이프 데이터 이제까지 DB 서버에 얻을 것을 의미 완전히 그 공격 벡터를 절단하는.

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

    3.호 SQL 주입 공격은 SQL DB의 모든 언어에서 발생할 수 있습니다. 프로그래머가 'USER_NAME = SNAME'와 같은 자신의 소스에 동적 SQL을 사용하고 코멘트를 추가하고 다음과 같은 '등의 새로운 SQL 문을 입력 할 수 있도록 사용자가 사용자 이름을 무제한 텍스트를 입력 할 때 언급하는 공격의 종류는 DROP ','TRUNCATE '등

    호 SQL 주입 공격은 SQL DB의 모든 언어에서 발생할 수 있습니다. 프로그래머가 'USER_NAME = SNAME'와 같은 자신의 소스에 동적 SQL을 사용하고 코멘트를 추가하고 다음과 같은 '등의 새로운 SQL 문을 입력 할 수 있도록 사용자가 사용자 이름을 무제한 텍스트를 입력 할 때 언급하는 공격의 종류는 DROP ','TRUNCATE '등

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

    4.BindWhatever () 호출을 통해 매개 변수로 아무것도 당신이 입력은 적 SQL로 실행 할 수 없습니다.

    BindWhatever () 호출을 통해 매개 변수로 아무것도 당신이 입력은 적 SQL로 실행 할 수 없습니다.

    이 데이터는 SQL에 대한 오해받을 것이 단순히 불가능하므로 SQL은 이미 바인드 변수 데이터 전에 구문 분석되고 평가되고있다.

    데이터베이스가 충실하게 저장하고 아마도 누군가를 elses 브라우저에서 실행까지 될 것입니다 때 물론 누군가는 여전히 몇 가지 자바 스크립트를 전달할 수 있습니다!

    당신은 여전히 ​​귀하의 의견 (또는 적어도 탈출에) 어떤 ({[]}) \ 형식 문자를 제거 할 필요가 그래서;

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

    5.아니 매개 변수로. SQL 주입 후 해당 문자열에서 SQL 문을 실행하는 SQL 문자열로 악성 코드을 연결에 의존합니다. 준비된 문에 관계없이 내용의 매개 변수를 사용합니다. 준비된 문을 사용하여 SQL 문 자체의 실제 텍스트는 변경되지 않습니다.

    아니 매개 변수로. SQL 주입 후 해당 문자열에서 SQL 문을 실행하는 SQL 문자열로 악성 코드을 연결에 의존합니다. 준비된 문에 관계없이 내용의 매개 변수를 사용합니다. 준비된 문을 사용하여 SQL 문 자체의 실제 텍스트는 변경되지 않습니다.

  6. ==============================

    6.매개 변수화 된 문자열에 exec를 수행하는 경우에만 위험이 될 것입니다.

    매개 변수화 된 문자열에 exec를 수행하는 경우에만 위험이 될 것입니다.

    다른 모든 경우에는 매개 변수가있는 쿼리는 안전합니다.

  7. from https://stackoverflow.com/questions/446551/from-what-do-sql-parameters-protect-you by cc-by-sa and MIT license