Какой тип ввода наименее уязвим для атаки? - PullRequest
1 голос
/ 01 октября 2008

Какой тип ввода наименее уязвим для атак межсайтового скриптинга (XSS) и SQL-инъекций.

PHP, HTML, BBCode и т. Д. Мне нужно знать для форума, я помогаю настроить друга.

Ответы [ 7 ]

6 голосов
/ 01 октября 2008

(я только что опубликовал это в комментарии, но, похоже, у некоторых людей сложилось впечатление, что выборочные списки, переключатели и т. Д. Не нужно очищать.)

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

Более опытный пользователь может использовать прокси-сервер, например WebScarab , и просто настраивать параметры по мере их отправки обратно на сервер.

Хорошее эмпирическое правило: всегда используйте параметризованные операторы SQL и всегда экранируйте сгенерированные пользователем данные перед их помещением в HTML.

3 голосов
/ 01 октября 2008

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

Пожалуйста, ознакомьтесь с темой XSS и смежными вопросами

3 голосов
/ 01 октября 2008

Нам нужно больше узнать о вашей ситуации. Уязвимый как? Некоторые вещи, которые вы всегда должны делать:

  • Спасение строк перед сохранением их в базе данных для защиты от SQL-инъекций
  • HTML кодирует строки при печати их пользователю из неизвестного источника, чтобы предотвратить вредоносный html / javascript

Я бы никогда не запустил php, предоставленный пользователем. BBCode / UBBCode хороши, потому что они преобразованы в семантически правильный HTML, хотя вы можете захотеть взглянуть на уязвимости XSS, связанные с искаженными тегами изображений. Если вы разрешите ввод HTML, вы можете внести в белый список определенные элементы, но это будет сложный подход, который подвержен ошибкам. Итак, учитывая все вышесказанное, я бы сказал, что лучше всего использовать хорошую готовую библиотеку BBCode .

2 голосов
/ 01 октября 2008

Любой логический тип.

Вы даже можете легко отфильтровать неверные данные.

; -)

1 голос
/ 01 октября 2008

Существует множество парсеров BB-кода, которые очищают ввод для HTML и так далее. Если он не доступен в виде пакета, вы можете обратиться за рекомендациями к одному из пакетов программного обеспечения форума с открытым исходным кодом.

BB-код имеет смысл, поскольку он является «стандартным» для форумов.

0 голосов
/ 29 мая 2012

Ради Одина, пожалуйста, не очищайте входные данные. Не бойтесь, что пользователи вводят в ваши формы все, что захотят.

Пользовательский ввод не является небезопасным. Принятый ответ приводит к таким веб-интерфейсам, как мой банк, где г-н О'Рейли не может открыть счет, потому что в его имени есть нелегальный персонаж. Что небезопасно, так это то, как вы используете пользовательский ввод.

Правильный способ избежать SQL-инъекций - использовать подготовленные операторы. Если уровень абстракции вашей базы данных не позволяет вам использовать их, строго используйте правильные экранирующие функции (myslq_escape et al). Правильный способ предотвращения XSS-атак никогда не бывает подобен стрип-тегам (). Избегайте всего - в PHP вам нужно что-то вроде htmlentities (), но это зависит от того, выводите ли вы строку как часть текста HTML, атрибут HTML или внутри Javascript и т. Д. Используйте правильный инструмент для правильного контекста. И НИКОГДА не распечатывайте вводимые пользователем данные прямо на странице.

Наконец, взгляните на 10 самых уязвимых мест веб-приложений и сделайте все возможное, чтобы их предотвратить. http://www.applicure.com/blog/owasp-top-10-2010

0 голосов
/ 01 октября 2008

Ввод, который наименее уязвим для атаки, - это «не ввод».

Вы задаете правильный вопрос?

...