Вопрос

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

  • Убедитесь, что ввод не пуст или слишком длинный.

  • Экранируйте строки запроса, чтобы предотвратить SQL-инъекцию.

  • Использование регулярных выражений для отклонения недопустимых символов (это зависит от того, что отправляется)

  • Кодирование определенных тегов HTML, например <script> (все теги кодируются при хранении в базе данных, а некоторые декодируются при запросе для отображения на странице)

Есть ли что-то, что мне не хватает?Приветствуются примеры кода или регулярные выражения.

Это было полезно?

Решение

Вам не нужно «экранировать» строки запроса, чтобы предотвратить SQL-инъекцию — вместо этого вам следует использовать подготовленные операторы.

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

Не забудьте закодировать HTML-объекты при выводе — чтобы предотвратить XSS-атаки.

Другие советы

Вы должны кодировать каждый тег html, а не только «недействительные».Это горячие дебаты, но в основном они сводятся к тому, что всегда будет какая-то недопустимая комбинация HTML, которую вы забудете правильно обработать (вложенные теги, несовпадающие теги, которые некоторые браузеры интерпретируют «правильно» и так далее).Поэтому, на мой взгляд, самый безопасный вариант — сохранить все как htmlentities, а затем на выходе распечатать проверенное дерево HTML-безопасного подмножества (в виде сущностей) из содержимого.

Запускайте все проверки на стороне сервера в библиотеке, предназначенной для этой задачи, чтобы улучшения в одной области повлияли на все ваше приложение.

Дополнительно включите защиту от известных атак, таких как обход каталогов и попытки доступа к оболочке.

На этот вопрос/ответ есть несколько хороших ответов, которые вы ищете.
(Ориентирован на PHP, но опять же вы не указали язык/платформу, и некоторые из них применимы за пределами мира PHP.):

Какой лучший метод очистки пользовательского ввода с помощью PHP?

Вы можете проверить Расширение фильтра для фильтрации данных.Это не гарантирует, что вы полностью герметичны, но лично я чувствую себя намного лучше, используя его, потому что за этим кодом просматривает множество глаз.

Также считайте подготовленные заявления поддержанными.Экранирование данных в ваших SQL-запросах осталось в прошлом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top