나는 mySQL 데이터베이스를 사용하는 웹 사이트를 가지고 있으며 사용자 추가, 일반 정보 수정 등과 같은 일반적인 작업을하고 싶습니다. 정규 쿼리로 완벽하게 처리 할 수 있습니다. Im 준비된 진술을 사용하여 보안을 향상시킵니다. 저장 프로 시저를 사용하여 보안을 증가시켜야합니까? 그렇지 않으면 결과가 동일해야합니까? 저장 프로 시저를 사용할 수도 있지만 공격자가 실제 쿼리에 대해 가질 수있는 직접적인 상호 작용을 제한 할 수 있습니다. 내가 틀렸다?mySQL : 저장 프로 시저가 쿼리보다 안전합니까?
답변
나는 그것이 당신이 사용하는 언어에 달려 있다고 생각합니다. 실행될 모든 sql을 포함하는 sql 문자열로 준비된 문을 사용하거나 저장 프로 시저를 실행하는 sql 문자열로 준비된 문을 사용하면 대부분의 언어에서 거의 동일합니다. 은 준비된 선언문 주변의 보안을 처리해야합니다. 예를 들어 C#은 입력의 유효성을 검사하므로 준비된 명령문이 잘못 작성되지 않으면 나쁜 (하지만 예상 값, 즉 1 대 0) 변수가 결과 집합을 크게 변경하지 않는 한 SQL 주입 취약점이 크게 감소합니다. 다른 언어는 동일한 수준의 유효성 검사를 제공하지 않을 수 있습니다. 따라서 저장된 proc이 어떻게 생겼는지에 따라 이점이있을 수 있습니다.
저장 프로 시저를 사용하면 유지 관리가 더 쉬울 수 있지만 프로그램이 제대로 시작되도록 설계된 경우 보안 수준이 변경 될 수있는 시나리오는 많지 않습니다. 내가 생각할 수있는 유일한 예는 사용자 입력에서 원시 SQL 문자열을 가져 와서 db에 대해 해당 SQL을 실행하는 저장 프로 시저입니다. 당신이 받아 들일 수있는 입력의 유효성을 검증하기 위해 많은 노력을 기울이지 않는 한, 준비된 명령문을 사용하는 것보다 실제로 안전성이 떨어집니다.이 경우, 처음에는 그러한 저장된 proc를 사용하는 것이 더 좋은 이유가 있습니다.
기본적으로 내가 말한 것은 준비된 문장에 대한 사용자의 언어 문서를 읽고 준비된 문장을 사용하여 어떤 취약점이 있는지 SQL 쿼리를 직접 실행하는 대신 저장 프로 시저를 호출하는 준비된 명령문으로 전환하여 특정 시나리오에서 제거 할 수 있습니다.
결과는 동일합니다 (저장 프로 시저를 오른쪽으로 설정했다고 가정).
꽤 좋은 글이 올라 오는 것처럼 보입니다. here. 나는 사용자 입력을 직접 피하려고 제안하지는 않겠지 만. (그들은 이것을 옵션 3으로 언급한다)
- 1. 저장 프로 시저가 쿼리보다 훨씬 느리게 실행됩니다.
- 2. SSMS의 쿼리보다 저장 프로 시저가 느립니다.
- 3. SQL 저장 프로 시저가 안전합니까?
- 4. 저장 프로 시저가 SQL 인젝션으로부터 안전합니까?
- 5. Mysql 저장 프로 시저가 있습니까?
- 6. 단순 저장 프로 시저가 표준 쿼리보다 느립니다! 왜?
- 7. mysql 저장 프로 시저가 잠금을 해제하지 않음
- 8. MySQL 저장 프로 시저가 null을 반환합니다.
- 9. MySQL 저장 프로 시저가 생성되지 않음
- 10. 이 mySQL 저장 프로 시저가 작동합니까?
- 11. MySQL 저장 프로 시저가 값을 반환하지 않습니다.
- 12. mysql 저장 프로 시저가 작동하지 않음을 선언합니다.
- 13. mysql 저장 프로 시저가 세미콜론 오류
- 14. django mysql : 저장 프로 시저가 실행되지 않습니다
- 15. MYSQL 저장 프로 시저가 열을 업데이트하지 않습니다.
- 16. MySQL 저장 프로 시저가 존재하는 경우
- 17. 저장 프로 시저가 존재하지 않습니다.
- 18. 저장 프로 시저가 :
- 19. 저장 프로 시저가 사라졌습니다.
- 20. 저장 프로 시저가
- 21. 저장 프로 시저가
- 22. 저장 프로 시저가
- 23. 저장 프로 시저가
- 24. MySQL 프로 시저 스레드가 안전합니까?
- 25. 저장 프로 시저가 작동하지 않습니다
- 26. 저장 프로 시저가 작동을 멈췄습니다
- 27. 저장 프로 시저가 유효하지 않음
- 28. 저장 프로 시저가 여기에서 도움이됩니까?
- 29. 저장 프로 시저가 작동을 멈췄습니다.
- 30. 저장 프로 시저가 밖으로 0.0
mysqli 태그를 제거했다. 특정 API는이 질문과 관련이 없습니다. – Barmar