Cześć, chciałbym się dowiedzieć co nieco o zapobieganiu SQL Injection bezpośrednio z poziomu procedur. Rozważmy następujący scenariusz:
Mam tabelę panstwa_miasta z kolumnami panstwo oraz miasto. Napisałem prostą procedurę zlicz(IN VARCHAR, OUT INT), której zadaniem jest zliczenie miast w danym państwie. Wywołuję ją za pomocą CALL zlicz('Polska', @ilosc);, zaś samą ilość wyciągam potem zapytaniem SELECT @ilosc; Ciało procedury prezentuje się następująco:
CREATE DEFINER = `root`@`%` PROCEDURE `zlicz`(IN `panstwo_param` varchar(255), OUT `total` INT(11))
BEGIN
SELECT COUNT(*) INTO total FROM panstwa_miasta WHERE panstwo = panstwo_param;
END;
Zastanawiam się, czy samo użycie procedury zamiast zwykłego zapytania niweluje w tym przypadku możliwość wystąpienia ataku SQL Injection. Czy muszę podjąć dodatkowe kroki, by całkowicie zniwelować ryzyko wystąpienia tego ataku? Czy w ogóle da się wykryć taki atak z poziomu procedury? Niestety, nie mogę zastosować parametryzacji w aplikacji, ponieważ nie mam dostępu do jej kodu źródłowego. Pozdrawiam serdecznie