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
Форумы портала PHP.SU :: Версия для печати :: Текст без кода и htmlspecialchars
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Текст без кода и htmlspecialchars

Страниц (4): [1] 2 3 4 »
 

1. sadex - 12 Июля, 2013 - 19:00:38 - перейти к сообщению
Пока не понимаю такой вещи. Если текст сообщения от юзера создается не в bb-разметке, а в html-разметке, надо ли для фильтрации от XSS и прочих атак прогонять этот текст через htmlspecialchars, если в тексте нет кода, предназначенного для отображения (вывода, показа) ?

Совсем у меня что-то мозги не просекают этого вопроса. Иногда просто кажется, что htmlspecialchars нужен только для вывода (отображения) кода. А если кода в сообщении нет - то и не нужен.
3. sadex - 12 Июля, 2013 - 19:44:32 - перейти к сообщению
AlexAnder пишет:
вася-хакер пишет:
привет всем <script>location.href='http://gogle.com';</script>
Вот не врубаюсь, как в этом случае помогает htmlspecialchars.

Имхо, полный провал в моих мозгах. Ну, преобразовал этот контейнер <script> htmlspecialchars в сущности, но не только этот контейнер, но и весь текст сообщения. А при выводе сообщения в браузер надо же все это обратно в нормальный html преобразовывать, и опять всплывет этот контейнер <script>... Чую, что туплю, может, по черному, но что-то в мозге у меня не укладывается.
4. DelphinPRO - 12 Июля, 2013 - 20:20:04 - перейти к сообщению
sadex, если вы разрешаете в полях ввода писать html разметку, то стоит фильтровать по-другому. Тут отталкиваемся от того, что вы всё-таки не весь набор html-тегов разрешаете, а только оформительские для текста (чаще всего). Таким образом следует удалить все неразрешенные теги

PHP:
скопировать код в буфер обмена
  1. $text = strip_tags($text, '<a><b><i>'); // перечисляются разрешенные теги
5. sadex - 13 Июля, 2013 - 00:39:33 - перейти к сообщению
DelphinPRO пишет:
sadex, если вы разрешаете в полях ввода писать html разметку, то стоит фильтровать по-другому.
Вот спасибо, мил человек, за здравую мысль... А то ведь везде эту htmlspecialchars не глядя рекомендуют... По другому - много всяких вариантов, и Ваш - один из вполне рабочих, при данных исходных условиях.
6. sadex - 13 Июля, 2013 - 05:53:34 - перейти к сообщению
DelphinPRO пишет:
sadex, если вы разрешаете в полях ввода писать html разметку,
Хорошо. Не разрешаем в полях ввода писать html-разметку текста, разрешаем писать bb-разметку. Кода (js, php и т.д.) в сообщениях юзеров нет. Чем и как в этом случае помогает htmlspecialchars ?
7. sadex - 13 Июля, 2013 - 08:53:41 - перейти к сообщению
Кое что интересное. Имеем в БД текст, сохраненный с простой 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 году &lt;b&gt;&lt;span style=color:purple&gt;государство&lt;/span&gt;&lt;/b&gt; взялось за развитие LTE в России и распределение пригодных частот для этой технологии. &lt;span style=color:blue&gt;Ситуация с частотами оказалась по-настоящему сложной и запутанной&lt;/span&gt;, каждый из участников рынка пытался использовать ее в собственных интересах, что привело к возникновению многочисленных конфликтов и &lt;b&gt;противоречий&lt;/b&gt;.


Неплохая иллюстрация работы htmlspecialchars.
8. AlexAnder - 13 Июля, 2013 - 09:23:38 - перейти к сообщению
Цитата:
Неплохая иллюстрация работы htmlspecialchars

справочники/мануалы наверное уже закрыли (закон о произвольных блокировках интернет-ресурсов)
9. sadex - 13 Июля, 2013 - 09:27:32 - перейти к сообщению
Практика - критерий истины и лучший справочник. И потом, где в справочнике сказано, что чтобы в браузере увидеть html-сущности надо прогнать текст через htmlspecialchars два раза?
AlexAnder пишет:
справочники/мануалы наверное уже закрыли (закон о произвольных блокировках интернет-ресурсов)
Зачем народ пугать... кто-то прочитает и поверит.
10. AlexAnder - 13 Июля, 2013 - 09:33:10 - перейти к сообщению
может мне тоже стоит выложить подробнейшее описание рандомной функции?

мануал пишет:
Производятся следующие преобразования:

'&' (амперсанд) преобразуется в '&amp;'
'"' (двойная кавычка) преобразуется в '&quot;' в режиме ENT_NOQUOTES is not set.
"'" (одиночная кавычка) преобразуется в ''' только в режиме ENT_QUOTES.
'<' (знак "меньше чем") преобразуется в '&lt;'
'>' (знак "больше чем") преобразуется в '&gt;'

думаю этого достаточно, чтобы понять смысл функции:
первый раз > преобразуется в &gt; (на выходе >)
потом &gt; преобразуется в &amp;gt; (преобразование &amp; в & и на выходе будет &gt;)
(Добавление)
PHP:
скопировать код в буфер обмена
  1. echo htmlspecialchars('>'); // & g t ;
  2. echo htmlspecialchars('& g t ;'); // & a m p ; g t ;
11. sadex - 13 Июля, 2013 - 10:00:18 - перейти к сообщению
Неверно.
PHP:
скопировать код в буфер обмена
  1. echo htmlspecialchars('>'); // выводит >
  2. // второе
  3. echo htmlspecialchars('>'); // тоже выводит >
Оказывается, недостаточно читать справочники, чтобы правильно писать коды.
AlexAnder пишет:
Отредактировано автором: 13 Июля, 2013 - 10:19:51
Отредактированное - верно.
12. AlexAnder - 13 Июля, 2013 - 10:20:48 - перейти к сообщению
ёмаё как всё запущено у тебя, ты не подумал почему в коментарии у меня пробелы?
p.s. я не заметил что параметр функции преобразовался
(Добавление)
надеюсь смысл пробелов то знаешь ...
(Добавление)
Цитата:
Оказывается, недостаточно читать справочники, чтобы правильно писать коды.

действительно, го смотреть попова, я создал!
(Добавление)
Цитата:
echo htmlspecialchars('>'); // выводит >
// второе
echo htmlspecialchars('>'); // тоже выводит >

ну это вообще глупо, интересно а на стопервый раз тоже '>' будет?
13. DelphinPRO - 13 Июля, 2013 - 10:27:07 - перейти к сообщению
sadex пишет:
Хорошо. Не разрешаем в полях ввода писать html-разметку текста, разрешаем писать bb-разметку.

почитайте эту темку там как раз сейчас спорят по этому поводу.

UPD
ох ты ж ё-моё, темка-то ваша Улыбка
(Добавление)
Ладно, отвечая на ваш вопрос
sadex пишет:
Чем и как в этом случае помогает htmlspecialchars ?
скажу: htmlspecialchars используют как раз для того, чтобы предотвратить выполнение нежелательного кода в браузере. И тут уже программист должен думать, где использовать преобразования в сущности, а где нет.
14. LIME - 13 Июля, 2013 - 10:33:50 - перейти к сообщению
DelphinPRO пишет:
чтобы предотвратить выполнение нежелательного кода в браузере.
точнее отобразить html код а не интерпретировать его в верстку
15. sadex - 13 Июля, 2013 - 11:02:39 - перейти к сообщению
LIME пишет:
точнее отобразить html код а не интерпретировать его в верстку
Ну наконец-то, подходим к чему-то вразумительному. У меня есть такое описание (не из справочнка):
Цитата:
Эта функция полезна для отображения введенных пользователем данных, которые могут содержать нежелательные HTML тэги, например для отображения сообщения, введенного в форуме или гостевой книге. Также эта функция полезна для отображения кодов (html, js, php и т.д.) при запрете на исполнение этих кодов.
Сам откуда-то брал и уточнял это описание, не помню по какому поводу.

Цель темы я изложил довольно точно, в первом посте темы:
Цитата:
Если текст сообщения от юзера создается не в bb-разметке, а в html-разметке, надо ли для фильтрации от XSS и прочих атак прогонять этот текст через htmlspecialchars, если в тексте нет кода, предназначенного для отображения (вывода, показа) ?
Пока пришел к выводу, что htmlspecialchars есть смысл применять только для фильтрации текста из полей формы, в которой всякая разметка через html-теги запрещена (случай 1). Либо для отображения, но не исполнения html, js, php и прочего кода (случай 2). Случай 2 имеет место только на сайтах программистов, для новостных и прочих сайтов непрограммистов его нет смысла применять.

При этом, в случае 1, если это сайт непрограммистов, имхо, проще пропустить текст из формы ввода через strip_tags, чем всякий мусор преобразовывать в tmlspecialchars и хранить и отображать его потом. Могу быть неправ. Но возражения должны быть доказательными.

 

Powered by ExBB FM 1.0 RC1