| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 перед выводом, а хранить в неизменном виде(мало ли, может пригодится, чтоб доказывать злонамеренную деятельность горе-хакера |
| Автор: Alexey007 24.4.2007, 23:38 |
| skyboy, strip_tags не подойдет, т.к. если тег случайно забыли закрыть, то удалится весь последующий текст. Поэтому выбираю htmlspecialchars. Помогите пожалуйста сделать таблицу Options в базе данных. Нужно поле, в котором включается и отключается запрет тегов. Как правильно сделать? |
| Автор: Alexey007 25.4.2007, 16:38 |
| как? Там же просто КУЧА всяких тегов... и как знать где именно закрывать? Можно конешно сделать на проверку.. сколько есть < и > |
| Автор: skyboy 25.4.2007, 18:00 |
| создаешь стек. в него пихаешь открывающие теги и вынимаешь закрывающие. в конце документа для всех тегов, оставшихся в стеке(не было соотвествующих закрывающих) генерируешь закрывающие и дописываешь в документ. единственное: если в тексте появляются пересекающиеся пары(например: <b><u></b></u>) то их надо "выправлять". например, в моем примере "не принимать в расчет" тег </b> и просто его проигнорировать(несоотвествие порядка), потому в конце документа придется собственноручно добавить </b>. Впрочем, этот подход хорош только для "обучения", потому что велосипед. С квадратными колесами: strip_tags НЕ обрезает аттрибуты тегов, которые ему сказано не выбрасывать. Т.е. всякие javascript - обработчики на onclick,onmousemove etc остаются вместе с тегами. А это уже - точно никому не надо. Так что переходит на BBS коды(всякие так "","" и прочие - хотя бы на этом форуме глянь) и при выводе уже заменяй то же + на <b> + </b>. Решается сразу две проблемы: 1. Только теги, которые сам определишь, будут использоваться. 2. никаких javascript-обработчиков |
| Автор: Alexey007 25.4.2007, 19:05 |
| ничего не понял. можешь показать на конкретном примере? |
| Автор: skyboy 25.4.2007, 19:12 | ||
Добавлено @ 19:17 то был бредне-рационализм. меня всегда в плохое настроение тянет строить велосипеды. Добавлено @ 19:18 если ты говорил не про стек и "ручную" обработку тегов, а про BBS-коды, то посмотри хотя бы на этом форуме ;) Добавлено через 8 минут и 1 секунду впрочем, и BBS я зря приплел - как я понял, тебе вообще форматирование не надо. Ни жирный шрифт, ни красные буквы... и в самом деле - только special_chars при выводе и всё... |
| Автор: cereza 25.4.2007, 23:19 |
| я новенький не судите строго но я бы сделал через str_replace() замена к примеру html,div и так далее... |
| Автор: skyboy 25.4.2007, 23:34 |
да, в принципе, не надо. Можно менять только "<" на "<" и всё... так, наверное, намного быстрее будет... правильная идея(только все теги менять не надо ;)) |
| Автор: Alexey007 25.4.2007, 23:50 |
| skyboy, < будет очень портить вид( Добавлено через 5 минут и 14 секунд Кароче мне надо так Если в поле есть теги - вошли все нафиг, добавлять не буду, убирайте, горе-хакеры Если нет - Добро пожаловать. Добавляю ваш комент Так и ещё ОЧ. важно.. чтобы эту функцию модно было включать и отключать, т.е. чтою в БД была таблица, которая отвечала за активность или неактивность отключения тегов. |
| Автор: skyboy 26.4.2007, 00:01 |
чем символ "меньше" будет тебе мешать? |
| Автор: Alexey007 26.4.2007, 00:05 |
| Сори за оффтоп: А это меньше? А гл. задача - см. сверху |
| Автор: skyboy 26.4.2007, 00:28 |
да. насколько мне помниться, мнемокод для символа меньше: в браузере будет отображаться "<", т.е. по-человечески, но никакой здравомыслящий браузер не будет работать с "<div>" как с тегом "<div>" В принципе, htmlspecialchars и меняет много разных символов(&,<,>,",') на их мнемокоды вида "&...;", что никак не влияет на отображение, зато эти символы уже не будут считаться "управляющими". Вот только в сравнении с htmlspecialchars применение str_replace может увеличить скорость... Правда, и грабли там могут быть ладно, забей. юзая htmlspecialchars |
| Автор: Alexey007 26.4.2007, 23:10 |
| skyboy, ну в str_replace нужно самому, кажется теги прописывать... Так как же настроить вклчение и отключение этой функции? |