Какой тип ввода наименее уязвим для атак?
Вопрос
Какой тип ввода наименее уязвим для атак межсайтового скриптинга (XSS) и SQL-инъекций.
PHP, HTML, BBCode и т. д.Мне нужно знать, что я помогаю другу создать форум.
Решение
Нам нужно знать больше о вашей ситуации.Уязвимы как?Некоторые вещи, которые вам следует делать всегда:
- Экранируйте строки перед сохранением их в базе данных для защиты от SQL-инъекций.
- HTML-кодирование строк при их обратной печати пользователю из неизвестного источника, чтобы предотвратить вредоносный HTML/Javascript.
Я бы никогда не выполнил PHP, предоставленный пользователем.С BBCode/UBBCode все в порядке, поскольку они преобразуются в семантически правильный HTML, хотя вы можете захотеть изучить XSS-уязвимости, связанные с неверными тегами изображений.Если вы разрешите ввод HTML, вы можете внести определенные элементы в белый список, но это будет сложный подход, подверженный ошибкам.Итак, учитывая все вышесказанное, я бы сказал, что использование хорошего готового BBCode библиотека будет вашим лучшим выбором.
Другие советы
(Я только что опубликовал это в комментарии, но, похоже, у некоторых людей сложилось впечатление, что списки выбора, переключатели и т. д. не нуждаются в санитарной обработке.)
Не рассчитывайте на безопасность переключателей.Вам все равно следует очистить данные на сервере.Люди могут создать html-страницу на своем локальном компьютере и создать текстовое поле с тем же именем, что и ваш переключатель, и эти данные будут отправлены обратно.
Более продвинутый пользователь может использовать прокси, например ВебСкарабей, и просто настраивайте параметры по мере их отправки обратно на сервер.
Хорошее эмпирическое правило состоит в том, чтобы всегда использовать параметризованные операторы SQL и всегда экранировать созданные пользователем данные перед помещением их в HTML.
Ни один из них не является таковым.Всеми данными, которые ожидаются на сервере, могут манипулировать те, кто обладает знаниями и мотивацией.Браузер и форма, которые, как вы ожидаете, будут использовать люди, являются лишь одним из нескольких допустимых способов отправки данных на ваш сервер/скрипт.
Пожалуйста, ознакомьтесь с темой XSS и связанными с ней вопросами.
Любой тип логического значения.
Вы даже можете довольно легко отфильтровать недопустимый ввод.
;-)
Существует множество парсеров BB-кода, которые очищают входные данные для HTML и так далее.Если такого пакета нет, вы можете обратиться за советом к одному из пакетов программного обеспечения форума с открытым исходным кодом.
BB-код имеет смысл, поскольку он является «стандартом» для форумов.
Вход, который наименее уязвим для атаки, является «не-входом».
Вы задаете правильный вопрос?
Ради Одина, пожалуйста, не дезинфицируйте входные данные.Не бойтесь, что пользователи будут вводить в ваши формы все, что хотят.
Пользовательский ввод не является по своей сути небезопасным.Принятый ответ ведет к таким веб-интерфейсам, как у моего банка, где г-н.О'Рейли не может открыть счет, поскольку в его имени указан нелегальный персонаж.Небезопасно всегда то, как вы используете пользовательский ввод.
Правильный способ избежать SQL-инъекций — использовать подготовленные операторы.Если уровень абстракции вашей базы данных не позволяет вам их использовать, строго используйте правильные экранирующие функции (myslq_escape и др.).Правильный способ предотвратить XSS-атаки никогда не использовать Striptags().Избегайте всего - в PHP вам нужно что-то вроде htmlentities(), но это зависит от того, выводите ли вы строку как часть текста HTML, атрибут HTML или внутри Javascript и т. д.Используйте правильный инструмент для правильного контекста.И НИКОГДА просто не печатайте вводимые пользователем данные непосредственно на странице.
Наконец, взгляните на 10 основных уязвимостей веб-приложений и примите правильные меры для их предотвращения. http://www.applicure.com/blog/owasp-top-10-2010