Комплексная проверка на стороне сервера - PullRequest
3 голосов
/ 29 сентября 2008

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

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

  • Экранирование строк запроса для предотвращения внедрения SQL

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

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

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

Ответы [ 5 ]

8 голосов
/ 29 сентября 2008

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

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

Не забудьте кодировать сущности HTML на выходе - чтобы предотвратить атаки XSS.

2 голосов
/ 29 сентября 2008

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

1 голос
/ 29 сентября 2008

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

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

1 голос
/ 29 сентября 2008

Этот вопрос / ответ содержит несколько хороших ответов, которые вы ищете
( PHP-ориентированный, но опять же вы не указали язык / платформу, и некоторые из них применимы за пределами мира php ):

Какой самый лучший метод для дезинфекции ввода пользователя с помощью PHP?

1 голос
/ 29 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...