Надо ли что-то еще делать для избежания SQL инъекций?
Составляю запрос с помощью сборщика (не знаю как называется). надо ли что-то еще делать для избежания неприятностей?
self.cursor.execute("INSERT INTO `users` (`tg_id`, `fname`, `lname`, `uname`, `nickname`) VALUES (?, ?, ?, ?, ?)", ( id, fname, lname, uname, fname )) self.connect.commit() |
self.cursor.execute("INSERT INTO `users` (`tg_id`, `fname`, `lname`, `uname`, `nickname`) VALUES (?, ?, ?, ?, ?)", ( id, fname, lname, uname, fname )) self.connect.commit()
Дополнительно:
(не знаю как называется)
Называется подготовленные выражения/prepared statements, почитать можно тут.
Конкретно для защиты от одной из многих атак - sql injection, да
А еще нужно проверять на ошибки, проверять на валидность самих значений соответственно бизнес модели и состояний (например пользователь редактирует запись, указывая идентификатор связанной таблицы, так вот нужно проверить имеет ли он права в принципе указывать полученный id)
- а чтобы от всего от греха подальше, что надо делать? есть какая-нибудь хорошая статься на эту тему?
- боюсь простых ответов тут нет, на эту тему целые курсы оканчивают.
- rPman,
пользователь редактирует запись, указывая идентификатор связанной таблицы
по большому счету это никак не относится к инъекциям. Чисто логика ролей.
- RimMirK, чтобы от всего от греха подальше - это обесточить компьютер.
А чтобы безопасность - это не искать волшебные палочки, а изучать предметную часть и защиты от конкретных векторов атак. Без магии.
Нет. Ничего больше не нужно делать. Вообще не нужно делать никаких действий которые нельзя доказать или как-то протестировать. Иначе программирование превращается в черную магию и колдунство.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для избежания SQL инъекций помимо использования подготовленных запросов (prepared statements) с параметризованными запросами, существует несколько дополнительных мер безопасности, которые можно применить:
1. Фильтрация входных данных: перед тем, как вставлять данные в SQL запрос, необходимо провести фильтрацию входных данных. Например, можно использовать функцию `filter_var()` для фильтрации данных в PHP.
2. Использование ORM (Object-Relational Mapping): ORM позволяет работать с базой данных через объекты, а не напрямую через SQL запросы. ORM фреймворки, такие как Doctrine для PHP, автоматически обрабатывают входные данные и предотвращают SQL инъекции.
3. Ограничение прав доступа: убедитесь, что пользователи имеют минимально необходимые права доступа к базе данных. Не давайте пользователям прав на выполнение опасных операций, таких как удаление или обновление данных.
4. Использование хэширования паролей: при хранении паролей в базе данных, необходимо хэшировать их с использованием надежного алгоритма хэширования, такого как bcrypt.
5. Регулярные аудиты безопасности: регулярно проверяйте ваш код на наличие уязвимостей и обновляйте его, чтобы избежать устаревших методов защиты.
6. Использование белого списка (whitelist) вместо черного списка (blacklist): при фильтрации данных, лучше использовать белый список, указывая разрешенные символы, чем черный список, указывая запрещенные символы.
Применение всех этих методов в комбинации с использованием подготовленных запросов поможет значительно уменьшить риск SQL инъекций в вашем приложении.