Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Текст без кода и htmlspecialchars
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
Пока не понимаю такой вещи. Если текст сообщения от юзера создается не в bb-разметке, а в html-разметке, надо ли для фильтрации от XSS и прочих атак прогонять этот текст через htmlspecialchars, если в тексте нет кода, предназначенного для отображения (вывода, показа) ?
Совсем у меня что-то мозги не просекают этого вопроса. Иногда просто кажется, что htmlspecialchars нужен только для вывода (отображения) кода. А если кода в сообщении нет - то и не нужен.
AlexAnder
Отправлено: 12 Июля, 2013 - 19:12:31
Частый посетитель
Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012 Откуда: Россия
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
AlexAnder пишет:
вася-хакер пишет:
привет всем <script>location.href='http://gogle.com';</script>
Вот не врубаюсь, как в этом случае помогает htmlspecialchars.
Имхо, полный провал в моих мозгах. Ну, преобразовал этот контейнер <script> htmlspecialchars в сущности, но не только этот контейнер, но и весь текст сообщения. А при выводе сообщения в браузер надо же все это обратно в нормальный html преобразовывать, и опять всплывет этот контейнер <script>... Чую, что туплю, может, по черному, но что-то в мозге у меня не укладывается.
DelphinPRO
Отправлено: 12 Июля, 2013 - 20:20:04
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
sadex, если вы разрешаете в полях ввода писать html разметку, то стоит фильтровать по-другому. Тут отталкиваемся от того, что вы всё-таки не весь набор html-тегов разрешаете, а только оформительские для текста (чаще всего). Таким образом следует удалить все неразрешенные теги
$text=strip_tags($text,'<a><b><i>');// перечисляются разрешенные теги
----- Чем больше узнаю, тем больше я не знаю.
sadex
Отправлено: 13 Июля, 2013 - 00:39:33
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
DelphinPRO пишет:
sadex, если вы разрешаете в полях ввода писать html разметку, то стоит фильтровать по-другому.
Вот спасибо, мил человек, за здравую мысль... А то ведь везде эту htmlspecialchars не глядя рекомендуют... По другому - много всяких вариантов, и Ваш - один из вполне рабочих, при данных исходных условиях.
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
DelphinPRO пишет:
sadex, если вы разрешаете в полях ввода писать html разметку,
Хорошо. Не разрешаем в полях ввода писать html-разметку текста, разрешаем писать bb-разметку. Кода (js, php и т.д.) в сообщениях юзеров нет. Чем и как в этом случае помогает htmlspecialchars ?
sadex
Отправлено: 13 Июля, 2013 - 08:53:41
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
Кое что интересное. Имеем в БД текст, сохраненный с простой html-разметкой:
Цитата:
В 2011 году <b><span style=color:purple>государство</span></b> взялось за развитие LTE в России и распределение пригодных частот для этой технологии. <span style=color:blue>Ситуация с частотами оказалась по-настоящему сложной и запутанной</span>, каждый из участников рынка пытался использовать ее в собственных интересах, что привело к возникновению многочисленных конфликтов и <b>противоречий</b>.
Выводим этот текст в браузер:
Цитата:
В 2011 году государство взялось за развитие LTE в России и распределение пригодных частот для этой технологии. Ситуация с частотами оказалась по-настоящему сложной и запутанной, каждый из участников рынка пытался использовать ее в собственных интересах, что привело к возникновению многочисленных конфликтов и противоречий.
Перед выводом в браузер прогоняем текст один раз через htmlspecialchars
$text = htmlspecialchars($text);
Получаем просмотр текста с кодом разметки:
Цитата:
В 2011 году <b><span style=color:purple>государство</span></b> взялось за развитие LTE в России и распределение пригодных частот для этой технологии. <span style=color:blue>Ситуация с частотами оказалась по-настоящему сложной и запутанной</span>, каждый из участников рынка пытался использовать ее в собственных интересах, что привело к возникновению многочисленных конфликтов и <b>противоречий</b>. <br />
Перед выводом в браузер прогоняем текст два раза через htmlspecialchars
$text = htmlspecialchars($text);
$text = htmlspecialchars($text);
Получаем просмотр текста с html-сущностями:
Цитата:
В 2011 году <b><span style=color:purple>государство</span></b> взялось за развитие LTE в России и распределение пригодных частот для этой технологии. <span style=color:blue>Ситуация с частотами оказалась по-настоящему сложной и запутанной</span>, каждый из участников рынка пытался использовать ее в собственных интересах, что привело к возникновению многочисленных конфликтов и <b>противоречий</b>.
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
Практика - критерий истины и лучший справочник. И потом, где в справочнике сказано, что чтобы в браузере увидеть html-сущности надо прогнать текст через htmlspecialchars два раза?
AlexAnder пишет:
справочники/мануалы наверное уже закрыли (закон о произвольных блокировках интернет-ресурсов)
Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012 Откуда: Россия
Помог: 34 раз(а)
может мне тоже стоит выложить подробнейшее описание рандомной функции?
мануал пишет:
Производятся следующие преобразования:
'&' (амперсанд) преобразуется в '&'
'"' (двойная кавычка) преобразуется в '"' в режиме ENT_NOQUOTES is not set.
"'" (одиночная кавычка) преобразуется в ''' только в режиме ENT_QUOTES.
'<' (знак "меньше чем") преобразуется в '<'
'>' (знак "больше чем") преобразуется в '>'
думаю этого достаточно, чтобы понять смысл функции:
первый раз > преобразуется в > (на выходе >)
потом > преобразуется в &gt; (преобразование & в & и на выходе будет >) (Добавление)
Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012 Откуда: Россия
Помог: 34 раз(а)
ёмаё как всё запущено у тебя, ты не подумал почему в коментарии у меня пробелы?
p.s. я не заметил что параметр функции преобразовался (Добавление)
надеюсь смысл пробелов то знаешь ... (Добавление)
Цитата:
Оказывается, недостаточно читать справочники, чтобы правильно писать коды.
действительно, го смотреть попова, я создал! (Добавление)
Цитата:
echo htmlspecialchars('>'); // выводит >
// второе
echo htmlspecialchars('>'); // тоже выводит >
ну это вообще глупо, интересно а на стопервый раз тоже '>' будет?
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
sadex пишет:
Хорошо. Не разрешаем в полях ввода писать html-разметку текста, разрешаем писать bb-разметку.
почитайте эту темку там как раз сейчас спорят по этому поводу.
UPD
ох ты ж ё-моё, темка-то ваша (Добавление)
Ладно, отвечая на ваш вопрос
sadex пишет:
Чем и как в этом случае помогает htmlspecialchars ?
скажу: htmlspecialchars используют как раз для того, чтобы предотвратить выполнение нежелательного кода в браузере. И тут уже программист должен думать, где использовать преобразования в сущности, а где нет.
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
DelphinPRO пишет:
чтобы предотвратить выполнение нежелательного кода в браузере.
точнее отобразить html код а не интерпретировать его в верстку
sadex
Отправлено: 13 Июля, 2013 - 11:02:39
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Июнь 2013
Помог: 1 раз(а)
LIME пишет:
точнее отобразить html код а не интерпретировать его в верстку
Ну наконец-то, подходим к чему-то вразумительному. У меня есть такое описание (не из справочнка):
Цитата:
Эта функция полезна для отображения введенных пользователем данных, которые могут содержать нежелательные HTML тэги, например для отображения сообщения, введенного в форуме или гостевой книге. Также эта функция полезна для отображения кодов (html, js, php и т.д.) при запрете на исполнение этих кодов.
Сам откуда-то брал и уточнял это описание, не помню по какому поводу.
Цель темы я изложил довольно точно, в первом посте темы:
Цитата:
Если текст сообщения от юзера создается не в bb-разметке, а в html-разметке, надо ли для фильтрации от XSS и прочих атак прогонять этот текст через htmlspecialchars, если в тексте нет кода, предназначенного для отображения (вывода, показа) ?
Пока пришел к выводу, что htmlspecialchars есть смысл применять только для фильтрации текста из полей формы, в которой всякая разметка через html-теги запрещена (случай 1). Либо для отображения, но не исполнения html, js, php и прочего кода (случай 2). Случай 2 имеет место только на сайтах программистов, для новостных и прочих сайтов непрограммистов его нет смысла применять.
При этом, в случае 1, если это сайт непрограммистов, имхо, проще пропустить текст из формы ввода через strip_tags, чем всякий мусор преобразовывать в tmlspecialchars и хранить и отображать его потом. Могу быть неправ. Но возражения должны быть доказательными.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.