매개 변수가있는 SQL 쿼리가 사용자 입력이 포함 된 쿼리를 작성할 때 사용자 입력을 소독하는 가장 좋은 방법이라는 것을 알고 있지만 사용자 입력을 가져 와서 작은 따옴표를 이스케이프 처리하고 전체 문자열을 작은 따옴표로 묶는 것이 어떤 문제인지 궁금합니다. 코드는 다음과 같습니다.
sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"
사용자가 입력하는 작은 따옴표는 큰 따옴표로 대체되어 사용자가 문자열을 종료하는 기능을 제거하므로 세미콜론, 퍼센트 기호 등과 같이 입력 할 수있는 모든 것이 문자열의 일부가되고 실제로 명령의 일부로 실행되지 않았습니다.
우리는 작은 따옴표가 유일한 문자열 구분 기호이고 문자열 구분 기호를 이스케이프 처리하는 유일한 방법이라고 생각하는 Microsoft SQL Server 2000을 사용하고 있으므로 사용자가 입력 한 내용을 실행할 수있는 방법이 없습니다.
나는 이것에 대해 SQL 주입 공격을 시작하는 방법을 보지 못하지만, 이것이 나에게 보이는 것처럼 방탄이라면 다른 사람이 이미 그것을 생각했을 것이고 일반적인 관행이라는 것을 알고 있습니다.
이 코드에 어떤 문제가 있습니까? 이 살균 기술을지나 SQL 주입 공격을받을 수있는 방법이 있습니까? 이 기술을 이용하는 샘플 사용자 입력은 매우 유용합니다.
최신 정보:
나는 여전히이 코드에 대한 SQL 인젝션 공격을 효과적으로 시작하는 방법을 모른다. 소수의 사람들은 백 슬래시가 작은 따옴표를 이스케이프하고 다른 하나는 문자열을 끝내도록 남겨두고 나머지 문자열은 SQL 명령의 일부로 실행되도록 제안했습니다.이 방법은 SQL을 MySQL 데이터베이스이지만 SQL Server 2000에서는 작은 따옴표를 피할 수있는 유일한 방법은 다른 작은 따옴표를 사용하는 것입니다. 백 슬래시는 그것을하지 않습니다.
작은 따옴표 이스케이프를 중지하는 방법이 없으면 나머지 사용자 입력은 모두 하나의 연속 문자열로 간주되므로 실행되지 않습니다.
입력을 삭제하는 더 좋은 방법이 있다는 것을 알고 있지만 위에 제공된 방법이 효과가없는 이유를 배우는 데 더 관심이 있습니다. 이 소독 방법에 대해 SQL 주입 공격을 수행하는 특정 방법을 아는 사람이 있다면 그것을보고 싶습니다.