2011-06-09 6 views
0

У меня есть страница PHP с текстовыми полями, которые пользователи могут изменять, а их значения сохраняются и отображаются на другой странице PHP - я боюсь, что это может быть уязвимо для атак XSS (или того, что злоумышленники используют сегодня) ... I см. http://htmlpurifier.org - это хорошее решение, чтобы избежать атак XSS, и я прочитал в потоке SO, что PHP-код, введенный в текстовое поле, игнорируется браузерами и не выполняется на стороне сервера. Я просто хочу знать, будет ли htmlpurifier полностью защищать мой сайт и если есть вероятность, что старые браузеры, такие как IE6, недостаточно умны, чтобы игнорировать такой PHP-код. Это мой первый опыт создания сложного сайта, поэтому я обсуждаю тему безопасности ... Спасибо :)Запретить пользователям вводить PHP-код в textarea?

На боковой ноте я использовал stripslashes и nl2br, чтобы избежать проблем с форматированием с апострофами и строкой перерывы, но есть ли что-нибудь еще, что я должен использовать, чтобы избежать неожиданных проблем с отображением?

ответ

7

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

PHP-код сам игнорируется браузером. Браузер будет думать, что это просто какой-то большой странный элемент <?php ... '?>.

+0

Технически, '

+0

Спасибо, я это проверю :) Мне просто интересно, почему сервер не выполнит то, что внутри написанных пользователем '' тегов, - он вытягивает текст из запись базы данных и повторение ее в ''. Я представил себе, что он будет обрабатывать ценность записи как текст, который был в файле PHP, и выполнялся, как обычно. Вы говорите, что это просто неправильное мышление? – tylerl

+0

@tylerl PHP-код в строке не выполняется. Для PHP строка - это всего лишь строка байтов. – alex

0

Код PHP - это код сервера. Браузеры не включают интерпретатор PHP, поэтому они не будут выполнять его.

+0

Ну, идея заключалась в том, что в PHP-документе будут теги , и вы думаете, что сервер выполнит все, что находится внутри тегов. Почему-то это не так? – tylerl

1

Чтобы ответить на ваши конкретные вопросы ...

Нет, вам не придется беспокоиться о браузере выполнения PHP кода, который пользователь введенному. Это, как правило, только то, о чем вам нужно беспокоиться, когда вы «включаете» внутри php-скриптов, и даже тогда, пока вы их правильно структурируете, вам не о чем беспокоиться. Это связано с тем, что PHP интерпретируется на стороне сервера (на вашем веб-сервере), а не на стороне клиента (в браузере). Кроме того, этот тип атаки будет более соответствовать требованиям RFI или Code Injection (если вы хотите использовать некоторые термины для google), а не XSS.

Stripslashes могут быть полезны для определенных вещей (потенциально применительно к атакам SQL и т. Д.), Но не являются основной защитой для атак XSS.

С HTMLPurifier работает сам по себе, вы будете отлично от XSS атак (при условии, настроить его правильно, и т.д.)

Тем не менее, это всегда лучше, чтобы фильтровать пользовательский ввод против белого списка, а не пытаться в черный список " плохих "символов. Какие типы данных вы хотите, чтобы пользователи могли вводить данные? Просто регулярный текст? BBCode + текст? Html?

+0

Ничего себе, спасибо за долгий ответ! Я действительно не хочу, чтобы они вводили ничего, кроме небольшого стиля (например, жирный и курсив), и я думаю, что соединение было бы неплохо. Вот и все ...Я никогда не пытался создать текстовое поле, подобное этому, и я не хочу, чтобы это было слишком сложно для них ... Я собираюсь настроить это: http://www.themaninblue.com/ Эксперимент/widgEditor/ Я не знал, что могу применить этот тип белого списка; не могли бы вы показать мне тот, который позволяет только смело, курсив и ссылки? Затем я настрою widgEditor соответственно и сделаю все возможное, чтобы настроить очиститель HTML :) Спасибо! – tylerl

Смежные вопросы