매개 변수를 사용하여 모든 SQL 주입 공격을 피할 수 있습니까?
그리고이 경우 SQL 주입에 대해 걱정하지 않아도됩니까?
또는 프로그래머가 더 많은주의를 요하는 공격 유형이 있습니까?매개 변수를 사용하여 모든 SQL 주입 공격을 피할 수 있습니까?
답변
아니요, 매개 변수를 사용하여 모든 SQL 주입 공격을 피할 수는 없습니다. 동적 SQL이 중요한 문제이며, 이는 스토어드 프로 시저와 애플리케이션 코드에서 발생할 수 있습니다.
예 : 이것은 SQL 주입 공격을 받기 쉽습니다. 매개 변수가있는 쿼리는 사용자 이름을 저장 프로 시저에 전달하고 저장 프로 시저 내에서 매개 변수는 SQL 명령에 연결되어 실행됩니다.
많은 종류의 SQL 주입 공격에 대한 예는 SQL Injection Cheat Sheet을 참조하십시오. 작은 따옴표를 그냥 이스케이프하는 것은 표면을 긁는 것일 뿐이며 그 주위에는 여러 가지 방법이 있다는 것을 알 수 있습니다.
이러한 매개 변수 (예 : 저장 프로 시저에 전달됨)를 사용하여 동적 SQL 쿼리를 작성하려는 경우 예방 조치가 취해지지 않으면 SQL 주입 가능성이 있습니다.
예 아니요. 예, 모든 SQL 문이 실제로 정적이며 매개 변수 만 사용하는 경우 SQL 주입 공격으로부터 100 % 보호됩니다.
매개 변수 자체가 동적 SQL 문을 구성하는 데 사용되는 경우 문제가 발생합니다. 하나의 모 놀리 식 문장이 비현실적인 여러 옵션을 쿼리하기 위해 동적으로 SQL 문을 생성하는 저장 프로 시저가 그 예입니다. 이 문제에 대한 더 나은 해결책이 있지만, 일반적인 문제입니다.
100 %, 즉 MS 또는 Novell이 실수하지 않았다고 가정합니다. –
데이터베이스 엔진이 지원하는 경우 준비된 문을 사용하여 SQL 주입 위험을 최소화 할 수 있습니다.
어쨌든 prepared statements는 아마도 SQL 주입을 차단하는 가장 안전한 방법 일 것입니다.
예 그렇습니다. 매개 변수를 사용하여 모든 SQL-injection 공격을 피할 수 있습니다. 매개 변수를 까지만 호출하면 호출 스택까지 내려갈 수 있습니다. 예 :
- 응용 프로그램 코드는 데이터베이스에서 저장 프로 시저 또는 동적 SQL을 호출합니다. 매개 변수를 사용하여 모든 값을 전달해야합니다.
- 저장 프로 시저 또는 동적 SQL은 다른 저장 프로 시저 또는 동적 SQL 문에 대한 호출을 내부적으로 생성합니다. 또한 매개 변수를 사용하여 모든 값을 전달해야합니다.
- 코드가 다 떨어질 때까지 ad-infinitum을 반복하십시오.
SQL Server에서 프로그래밍하는 경우 sp_executesql
을 사용하여 동적 SQL을 실행할 수 있으며 매개 변수화 된 값을 정의하고 실행중인 문으로 전달할 수 있습니다.
+1 사람들은 동적 SQL에서 매개 변수를 사용할 수 있다는 사실을 잊어 버린 것 같습니다. – dotjoe
문제는 동적으로 SQL 문을 작성하는 것입니다.
예를 들어 사용자가 선택한 열을 기준으로 결과를 정렬 할 수 있습니다. 대부분의 데이터베이스에서 여기서 매개 변수를 사용할 수 없습니다 ("ORDER BY?"가 작동하지 않음). 따라서 "ORDER BY"+ 컬럼을 사용해야합니다. 이제 "column"이 String 인 경우 웹 응용 프로그램의 사용자가 코드를 삽입 할 수 있습니다 (쉽지는 않지만 가능한 경우).
- 1. Like 연산자로 매개 변수를 사용하여 SQL 쿼리에서 SQL 삽입을 피할 수 있습니까?
- 2. union 및 load_file()을 사용하여 SQL 주입
- 3. LINQ to SQL InsertOnSubmit()은 SQL 주입 공격을 받습니까?
- 4. SQL 주입 및 XSS 공격을 피하기 위해 FILTER_SANITIZE_STRING만큼 충분합니까?
- 5. 의심되는 SQL 주입 공격을 데이터베이스에 안전하게 저장하려면 어떻게합니까?
- 6. Java의 제네릭으로 모든 ClassCastExceptins을 피할 수 있습니까?
- 7. SqlCeResultSet을하고 SQL 주입
- 8. Ibatis에서 SQL 주입 방지
- 9. SQL 일치 쿼리에서 SQL 주입
- 10. XQuery 매개 변수를 사용하여 SQL 함수 작성
- 11. XSS 및 기타 공격을 피하기 위해 $ _GET 매개 변수를 sanitize
- 12. PHP에서 객체 매개 변수로 $ this를 과도하게 사용하면 피할 수 있습니까?
- 13. 장고 캐싱 - 선제 공격을 할 수 있습니까?
- 14. SQL 매개 변수를 사용하여 IN 절의 데이터를 처리합니까?
- 15. 어떻게 jquery를 사용하여 상호 참조 공격을 구현할 수 있습니까?
- 16. Linq에서 SQL 및 SQL 주입 공격
- 17. Magento 라우터 : 모든 URL에서 매개 변수를 어떻게 잡을 수 있습니까?
- 18. SQL Server 2008 테이블 값 매개 변수는 SQL 주입 공격에 취약합니까?
- 19. SQL 주입
- 20. 클래스 생성자에서 매개 변수를 사용할 수 있습니까?
- 21. 목록 상자를 사용하여 SQL 문에 매개 변수를 선언하십시오.
- 22. System.Enum 형식의 매개 변수를 사용하여 메서드를 디자인 할 수 있습니까?
- 23. 모든 매개 변수를 전달 하시겠습니까?
- 24. 매개 변수를 사용하여 실행
- 25. SQL 서버에 SQL 주입 버그가 있습니까?
- 26. 매개 변수를 사용하여 바인딩
- 27. Nant 작업에 매개 변수를 보낼 수 있습니까?
- 28. C#에서 매개 변수를 '출력'할 수 있습니까?
- 29. Regex : 함수에서 매개 변수를 가져올 수 있습니까?
- 30. C# 메서드 매개 변수를 잠글 수 있습니까?
그래서 해결책은 무엇입니까? –
@MH : 모두 'with'로 바꾸기 –
해결 방법은 동적 SQL을 절대로 사용하지 않는 것입니다. 이것이 가능하지 않다면 극단적 인 길이로 가서 SQL 문에 연결될 문자열을 올바르게 이스케이프 처리하고 문자열이 도메인 전체에 정렬되는 방식을 고려해야합니다 (예 : HTML -> Javascript - -> URL 인코딩 ->), 이러한 변환으로 인해 추가로 복잡 할 수 있습니다. – RedFilter