Надо ли что-то еще делать для избежания SQL инъекций?

Ссылка скопирована
1 ответ

Составляю запрос с помощью сборщика (не знаю как называется). надо ли что-то еще делать для избежания неприятностей?

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, чтобы от всего от греха подальше - это обесточить компьютер.
    А чтобы безопасность - это не искать волшебные палочки, а изучать предметную часть и защиты от конкретных векторов атак. Без магии.

Нет. Ничего больше не нужно делать. Вообще не нужно делать никаких действий которые нельзя доказать или как-то протестировать. Иначе программирование превращается в черную магию и колдунство.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Сергей Миронов Ответ

Для избежания 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 инъекций в вашем приложении.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно