Вопрос

Какой тип ввода наименее уязвим для атак межсайтового скриптинга (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

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