[SQL] 어떤 SQL 매개 변수 당신을 보호합니까에서?
SQL어떤 SQL 매개 변수 당신을 보호합니까에서?
매개 변수는 악의적 인 사용자 입력으로부터 당신을 보호하는 데 사용됩니다.
매개 변수가 문자열을 기대한다면, 그것은 ... SQL로 해석됩니다 쓰기 입력, 그래서 악의적 인 사용자가 등 'DROP', 'TRUNCATE'같은 것들을 사용 할 수 있습니까?
ASP, asp.net, 자바 등의 매개 변수 사이의 보호가 차이가 있습니까?
SQL 주입을 방지하기 위해 정말 충분한 매개 변수는 참조 :?
해결법
-
==============================
1.그것은 정상적인 SQL 사업자가 이와 같이 해석되지 않도록 장면 뒤에 문자열 인 경우 매개 변수화 된 쿼리는 일반적으로 매개 변수를 인용. 사용자가 악성 데이터는 단순한 문자열 입력으로 처리하고 SQL 운영자 / 명령으로 해석되지 들어가는 경우에도이 방법.
그것은 정상적인 SQL 사업자가 이와 같이 해석되지 않도록 장면 뒤에 문자열 인 경우 매개 변수화 된 쿼리는 일반적으로 매개 변수를 인용. 사용자가 악성 데이터는 단순한 문자열 입력으로 처리하고 SQL 운영자 / 명령으로 해석되지 들어가는 경우에도이 방법.
거기는 다양한 프레임 워크에서 구현하는 방법을 기술적 차이가 될 수 있지만 기본적인 아이디어 (및 결과) 동일 할 수있다.
-
==============================
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.호 SQL 주입 공격은 SQL DB의 모든 언어에서 발생할 수 있습니다. 프로그래머가 'USER_NAME = SNAME'와 같은 자신의 소스에 동적 SQL을 사용하고 코멘트를 추가하고 다음과 같은 '등의 새로운 SQL 문을 입력 할 수 있도록 사용자가 사용자 이름을 무제한 텍스트를 입력 할 때 언급하는 공격의 종류는 DROP ','TRUNCATE '등
호 SQL 주입 공격은 SQL DB의 모든 언어에서 발생할 수 있습니다. 프로그래머가 'USER_NAME = SNAME'와 같은 자신의 소스에 동적 SQL을 사용하고 코멘트를 추가하고 다음과 같은 '등의 새로운 SQL 문을 입력 할 수 있도록 사용자가 사용자 이름을 무제한 텍스트를 입력 할 때 언급하는 공격의 종류는 DROP ','TRUNCATE '등
-
==============================
4.BindWhatever () 호출을 통해 매개 변수로 아무것도 당신이 입력은 적 SQL로 실행 할 수 없습니다.
BindWhatever () 호출을 통해 매개 변수로 아무것도 당신이 입력은 적 SQL로 실행 할 수 없습니다.
이 데이터는 SQL에 대한 오해받을 것이 단순히 불가능하므로 SQL은 이미 바인드 변수 데이터 전에 구문 분석되고 평가되고있다.
데이터베이스가 충실하게 저장하고 아마도 누군가를 elses 브라우저에서 실행까지 될 것입니다 때 물론 누군가는 여전히 몇 가지 자바 스크립트를 전달할 수 있습니다!
당신은 여전히 귀하의 의견 (또는 적어도 탈출에) 어떤 ({[]}) \ 형식 문자를 제거 할 필요가 그래서;
-
==============================
5.아니 매개 변수로. SQL 주입 후 해당 문자열에서 SQL 문을 실행하는 SQL 문자열로 악성 코드을 연결에 의존합니다. 준비된 문에 관계없이 내용의 매개 변수를 사용합니다. 준비된 문을 사용하여 SQL 문 자체의 실제 텍스트는 변경되지 않습니다.
아니 매개 변수로. SQL 주입 후 해당 문자열에서 SQL 문을 실행하는 SQL 문자열로 악성 코드을 연결에 의존합니다. 준비된 문에 관계없이 내용의 매개 변수를 사용합니다. 준비된 문을 사용하여 SQL 문 자체의 실제 텍스트는 변경되지 않습니다.
-
==============================
6.매개 변수화 된 문자열에 exec를 수행하는 경우에만 위험이 될 것입니다.
매개 변수화 된 문자열에 exec를 수행하는 경우에만 위험이 될 것입니다.
다른 모든 경우에는 매개 변수가있는 쿼리는 안전합니다.
from https://stackoverflow.com/questions/446551/from-what-do-sql-parameters-protect-you by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 자바 SQL : Statement.hasResultSet ()? (0) | 2020.06.17 |
---|---|
[SQL] SQL Server 2008의 쉼표에 의해 분할 기능 (0) | 2020.06.17 |
[SQL] 당신은 MS Access 2003에서 매개 변수가있는 쿼리를 작성하고 매개 변수를 채우기 위해 다른 쿼리 / 양식을 사용하고 결과 집합을 어떻게받을 수 있습니까 (0) | 2020.06.17 |
[SQL] WM_CONCAT 함수의 SQL 서버 당량 [중복] (0) | 2020.06.17 |
[SQL] REGEXP_SUBSTR 오라클의 구분 기호로 공간과 문자로 분할 문자열 (0) | 2020.06.17 |