Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Запрет jave скриптов html-тегов в форме


Автор: Alexey007 31.3.2007, 07:31
Вообщем делаю гостевую книгу, и мне нужно чтоб никто не мог написать html теги.

Автор: -=Ustas=- 31.3.2007, 09:29
strip_tags() и поиск

Автор: skyboy 31.3.2007, 09:37
либо http://www.php.net/strip_tags сразу после ввода(как и подсказал -=Ustas=-)
либо http://www.php.net/htmlspecialchars перед выводом уже сохраненного.
вызывать htmlspecialchars перед выводом все равно придется(потому как надо будет заэкранировать "<",">","&" и другие), потому, в принципе, можно использовать только htmlspecialchars перед выводом, а хранить в неизменном виде(мало ли, может пригодится, чтоб доказывать злонамеренную деятельность горе-хакера  smile )
 

Автор: Alexey007 24.4.2007, 23:38
skyboy, strip_tags не подойдет, т.к. если тег случайно забыли закрыть, то удалится весь последующий текст. Поэтому выбираю htmlspecialchars.

Помогите пожалуйста сделать таблицу Options в базе данных.
Нужно поле, в котором включается и отключается запрет тегов. Как правильно сделать?

Автор: skyboy 25.4.2007, 00:07
Цитата(Alexey007 @  24.4.2007,  22:38 Найти цитируемый пост)
trip_tags не подойдет, т.к. если тег случайно забыли закрыть, то

при желании можно обработать текст и в конце его(текста) добавить все недостающие закрытые теги smile

Автор: Alexey007 25.4.2007, 16:38
как? smile 
Там же просто КУЧА всяких тегов... и как знать где именно закрывать?
Можно конешно сделать на проверку.. сколько есть < и >

Автор: skyboy 25.4.2007, 18:00
создаешь стек. в него пихаешь открывающие теги и вынимаешь закрывающие. в конце документа для всех тегов, оставшихся в стеке(не было соотвествующих закрывающих) генерируешь закрывающие и дописываешь в документ.
единственное: если в тексте появляются пересекающиеся пары(например: <b><u></b></u>) то их надо "выправлять". например, в моем примере "не принимать в расчет" тег </b> и просто его проигнорировать(несоотвествие порядка), потому в конце документа придется собственноручно добавить </b>.
Впрочем, этот подход хорош только для "обучения", потому что велосипед. С квадратными колесами: strip_tags НЕ обрезает аттрибуты тегов, которые ему сказано не выбрасывать. Т.е. всякие javascript - обработчики на onclick,onmousemove etc остаются вместе с тегами. А это уже - точно никому не надо.
Так что переходит на BBS коды(всякие так "","" и прочие - хотя бы на этом форуме глянь) и при выводе уже заменяй то же + на <b> + </b>. Решается сразу две проблемы:
1. Только теги, которые сам определишь, будут использоваться.
2. никаких javascript-обработчиков smile

Автор: Alexey007 25.4.2007, 19:05
ничего не понял. smile 
можешь показать на конкретном примере?

Автор: skyboy 25.4.2007, 19:12
Цитата(skyboy @  25.4.2007,  17:00 Найти цитируемый пост)
Впрочем, этот подход хорош только для "обучения", потому что велосипед. С квадратными колесами: strip_tags НЕ обрезает аттрибуты тегов, которые ему сказано не выбрасывать. Т.е. всякие javascript - обработчики на onclick,onmousemove etc остаются вместе с тегами. А это уже - точно никому не надо.
Так что переходит на BBS коды(всякие так "[ b ]","[ / b ]" и прочие - хотя бы на этом форуме глянь) и при выводе уже заменяй то же + на <b> + </b>. Решается сразу две проблемы:
1. Только теги, которые сам определишь, будут использоваться.
2. никаких javascript-обработчиков


Добавлено @ 19:17
Цитата(Alexey007 @  25.4.2007,  18:05 Найти цитируемый пост)
ничего не понял. 

то был бредне-рационализм. меня всегда в плохое настроение тянет строить велосипеды.

Добавлено @ 19:18
Цитата(Alexey007 @  25.4.2007,  18:05 Найти цитируемый пост)
можешь показать на конкретном примере? 

если ты говорил не про стек и "ручную" обработку тегов, а про BBS-коды, то посмотри хотя бы на этом форуме ;)

Добавлено через 8 минут и 1 секунду
впрочем, и BBS я зря приплел - как я понял, тебе вообще форматирование не надо. Ни жирный шрифт, ни красные буквы... и в самом деле - только special_chars при выводе и всё...

Автор: cereza 25.4.2007, 23:19
я новенький не судите строго но я бы сделал через str_replace()
замена к примеру html,div и так далее...

Автор: skyboy 25.4.2007, 23:34
Цитата(cereza @  25.4.2007,  22:19 Найти цитируемый пост)
замена к примеру html,div и так далее... 

да, в принципе, не надо. Можно менять только "<" на "&lt;" и всё... smile
так, наверное, намного быстрее будет...
правильная идея(только все теги менять не надо ;))

Автор: Alexey007 25.4.2007, 23:50
skyboy, &lt; будет очень портить вид(

Добавлено через 5 минут и 14 секунд
Кароче мне надо так
Если в поле есть теги - вошли все нафиг, добавлять не буду, убирайте, горе-хакерыsmile))
Если нет - Добро пожаловать. Добавляю ваш коментsmile))

Так и ещё ОЧ. важно.. чтобы эту функцию модно было включать и отключать, т.е. чтою в БД была таблица, которая отвечала за активность или неактивность отключения тегов.

Автор: skyboy 26.4.2007, 00:01
Цитата(Alexey007 @  25.4.2007,  22:50 Найти цитируемый пост)
&lt; будет очень портить вид( 

чем символ "меньше" будет тебе мешать?  smile 

Автор: Alexey007 26.4.2007, 00:05
Сори за оффтоп: А это меньше?smile Засыпаю...
А гл. задача - см. сверху

Автор: skyboy 26.4.2007, 00:28
Цитата(Alexey007 @  25.4.2007,  23:05 Найти цитируемый пост)
Сори за оффтоп: А это меньше?

да. насколько мне помниться, мнемокод для символа меньше: в браузере будет отображаться "<", т.е. по-человечески, но никакой здравомыслящий браузер не будет работать с "&lt;div>" как  с тегом "<div>"  smile 
В принципе, htmlspecialchars и меняет много разных символов(&,<,>,",') на их мнемокоды вида "&...;", что никак не влияет на отображение, зато эти символы уже не будут считаться "управляющими".
Вот только в сравнении с htmlspecialchars применение str_replace может увеличить скорость... Правда, и грабли там могут быть smile))))
ладно, забей. юзая htmlspecialchars

Автор: Alexey007 26.4.2007, 23:10
skyboy, ну в str_replace нужно самому, кажется теги прописывать...
Так как же настроить вклчение и отключение этой функции? smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)