Очистить ввод перед передачей его в качестве переменной в хранимую процедуру из java - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть код java, который вызывает хранимую процедуру и возвращает результат поиска в веб-браузер. Проблема, с которой я сталкиваюсь, заключается в том, что процедура принимает параметры из браузера, теперь даже если я использую PreparedStatement в java пользовательский ввод очищается только для вызова процедуры, но как только переданное значение входит в хранимую процедуру, оно снова становится уязвимым для SQL Injection,

здесь есть фрагмент кода

Java код

stmt=con.prepareStatement("call myProcedure(?,?)");  
.
.
rs = stmt.executeQuery();

my mysql Процедура: -

CREATE PROCEDURE myProcedure(IN userinput1 VARCHAR(255), IN unserinput2 VARCHAR(255))
BEGIN
SELECT 
    *
FROM
    myTable
where 
    col1 = userinput1
    and col2 = userinput2
ORDER BY id;  


END$$
DELIMITER ;

Теперь я могу решить эту проблему, если перепроектировать свою процедуру следующим образом: -

CREATE PROCEDURE myProcedure(IN userinput1 VARCHAR(255), IN unserinput2 VARCHAR(255))
BEGIN
SET @query = concat(“SELECT * FROM myTable WHERE col1 = ? and col2 = ?“);
SET @a = userinput1;
SET @b = unserinput2; 
PREPARE stmt from @query;
EXECUTE stmt using @a, @b;
END$$
DELIMITER ;

Но моя проблема в том, что приложение, над которым я работаю, уже имеет множество процедур и функций, спроектированных как таковые, и я не хочу вводить go и перепроектировать все процедуры по одной.

Есть ли какой-нибудь особый способ, которым я мог бы предварительно санировать ввод перед передачей его самой процедуре.

Кроме того, отфильтровывать ключевые слова SQL нельзя, так как есть несколько кодов, допускающих свободный текст, это старая реализация многоцелевой хранимой процедуры, которая отлично работает в сценарии инъекции.

1 Ответ

1 голос
/ 10 апреля 2020

SQL Инъекция,
Обычно в выражениях содержатся SQL ключевые слова, такие как ["master", "truncate", "insert", "select", "delete", "update", "Declare "," alter "," drop "], вам необходимо отфильтровать ваши параметры. the Если ключевое слово включено, вывести в браузер сообщение об ошибке

...