Я недавно узнал, что не использовал методы .set() PreparedStatements - довольно серьезный недостаток безопасности.Насколько безопасны PreparedStatements?
После изучения некоторых примеров кода у меня есть несколько вопросов относительно PreparedStatements и их безопасности.
Если кто-то может атаковать MySQL-запрос, чтобы изменить данные, как именно методы PresetStatement .set() предотвращают атаку?
Например, если запрос
INSERT INTO table_name(?, ?);
(Предполагая, что оба вопросительных знаков будут строки)
не мог кто-то просто изменить table_name к другой таблице?
Другой пример; Если запрос
UPDATE table_name SET column_name=?;
не мог человек изменить column_name сделать запрос изменить Поменяй столбец?
Последний пример, о котором я мог думать; Если запрос
SELECT column_name FROM table_name WHERE column2_name = ?;
Будет ли возможность злоумышленника изменить имя_столбец, table_name и т.д. Или вводить другие действия в запрос?
Как вы, наверное, можете сказать, я мало знаю о безопасности и MySQL, поэтому извините меня, если это очень очевидные вопросы. Спасибо!
Хорошо. Итак, суть в том, что атаки SQL-инъекций могут только изменять данные, отправленные в запросе, а не сам запрос?И что атаки MITM действительно могут изменить запрос? (Спасибо за ответ кстати). –
Успешная инъекция SQL-инъекций будет означать, что ваши данные являются частью самой строки запроса, а уязвимость заключается в том, что запрос делает то, что вы не намеревались, помимо только некорректных данных, поступающих в db. Если данные отделены от запроса, то любой вредоносный ввод является лишь частью данных. MITM может потенциально повлиять на то, что ваше приложение проходит через злоумышленника, если злоумышленник может читать и изменять данные. (Но обратите внимание, что MITM только для чтения может быть опасным.) – jbafford