[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Фильтрование входящих переменных
Ka4_0k
PHP
if ($SERVER['REQUEST_METHOD'] == 'POST') {exit();};

Имеет ли смысл использовать данное выражение?
P.S. В скрипт не должно приходить ни каких параметров по POST.
Все переменные фильтруются с помощью:
PHP
intval(); //только числовые
mysql_escape_string();
htmlspecialchars();
stripslashes();

Будет ли достаточно данной фильтрации?



Спустя 9 минут, 22 секунды (7.07.2009 - 13:39) twin написал(а):
Ужос. Вот тут в середине красными буквами и все что рядом почитай.

А по первому лучше редирикт куда нибудь подальше.

Спустя 7 минут, 3 секунды (7.07.2009 - 13:46) Ka4_0k написал(а):
У меня на локалхосте такого нету=)
А по первому норм, только редирект?

Спустя 4 минуты, 36 секунд (7.07.2009 - 13:51) twin написал(а):
Сенк, поправил.
Да. Можно и без редирикта. Это так, для смеха. Допустим сюда

Спустя 41 минута, 15 секунд (7.07.2009 - 14:32) Ka4_0k написал(а):
Хм...
Я никогда не обрабатывал полностью массив, а только переменные, которые реально используются, например:
PHP
if (isset($_GET['id'])) {$id=intval($_GET['id']);} else {$id='1';}

Из статьи я увидел что htmlspecialchars(); используется только для вывода. А если переменная которая приходит выводится без занесения в базу? Тогда разумнее экранировать её на входе, например:
name='Vasya', а кто-то возьмёт и впишет name='Vasya<br> ..(30 <br>).. <br>' =)??
Вывод будет очень интересен), да и каждый раз при выводе писать htmlspecialchars(); долго, быстрее ведь будет сделать это единожды в начале).

"mysql_escape_string() - работает только при открытом соединении" У меня оно открывается с самого начала:) т.е. в принципе тоже можно использовать + она используется в функции совместно с stripslashes, как я и писал выше.
Так почему тогда ужос?


Спустя 20 минут, 59 секунд (7.07.2009 - 14:53) twin написал(а):
Цитата
Тогда разумнее экранировать её на входе

А если потом захочется её где нибудь использовать?
Функция htmlspecialchars() предназначена для обработки данных для корректного отображения браузером. И только для этого. А в браузер данные отдаются не на входе, а на выходе.
В скрипте данные должны быть в том виде, в каком они получены.
Цитата
да и каждый раз при выводе писать htmlspecialchars(); долго, быстрее ведь будет сделать это единожды в начале).

Иначе получется через ж выход. smile.gif Зачем переваривать пищу, когда можно сразу скушать г производный продукт...

Спустя 3 минуты, 7 секунд (7.07.2009 - 14:56) twin написал(а):
Цитата
+ она используется в функции совместно с stripslashes,

А в этом какой смысл, если нет проверки get_magic_quotes_gpc()?
По крайней мере ты об этом не упоминал.

Спустя 22 минуты, 12 секунд (7.07.2009 - 15:19) Ka4_0k написал(а):
Цитата
А если потом захочется её где нибудь использовать?

Насколько я себя знаю, этого не произойдёт, т.к. таким образом фильтруются только переменные вывода, например: логин, текст комментария и т.д. =)
Например, написал пользователь комментарий "/> (это из моей практики!), и? Естественно в базу лучше записать то отфильтрованное значиние.

Цитата
А в этом какой смысл, если нет проверки get_magic_quotes_gpc()?
По крайней мере ты об этом не упоминал.

magic_quotes_gpc() включена в конфиге, вместе с register_globals и выключеным safe_mode sad.gif

Спустя 23 минуты, 29 секунд (7.07.2009 - 15:42) twin написал(а):
Цитата
Естественно в базу лучше записать то отфильтрованное значиние.

Не знаю я какое это
Цитата
то отфильтрованное значиние.

но в базе должно храниться то, что написал юзер. А именно "/> а не &quot;/&gt; Иначе
1. Будучи повторно обработанными при выдаче функцией htmlspecialchars(), это и вылезет на экран в таком виде: &quot;/&gt;
2. Это сделает невозможным корректный поиск по базе.
3. Код, в которов все кверхногами, (а именно функции предназначенные для вывода используются на входе) становится трудночитаемым.
По этому такой вывод:
1. См мой предыдущий пост. Накормили базу тем, что нужно было нести в туалет.
2.
Цитата
Насколько я себя знаю,
вспомнишь эти слова через некоторое время, когда захочешь чего нибудь модернизировать.
3. Если пишешь на корзину, то волен делать что хочешь конечно. Зачем тогда задавать вопросы... Напиши
$text = htmlspecialcars(trim(strip_tags(substr(stripslashes(и_так_далее и спи спокойно. Но посаран! Юзеры тоже.
Проще написать все в кучу, чем разобраться и расставить на свои места.

Спустя 7 минут, 47 секунд (7.07.2009 - 15:50) Kuliev написал(а):
twin
laugh.gif

Спустя 34 секунды (7.07.2009 - 15:50) Ka4_0k написал(а):
Цитата
1. Будучи повторно обработанными при выдаче функцией htmlspecialchars(), это и вылезет на экран в таком виде: &quot;/&gt;

Вроде я писал что для вывода не использую эту функцию)
Цитата
2. Это сделает невозможным корректный поиск по базе.

Почему же blink.gif ? Если на входе поиска делать то же....
Цитата
3. Код, в которов все кверхногами, (а именно функции предназначенные для вывода используются на входе) становится трудночитаемым.

Код? Я ведь вроде бы говорил что это используется для комментариев, логинов и прочей мелкой чепухи. unsure.gif
Ладно, если всё дело заключалось только в особенностях написания каждого, а не безопасности и правильности отображения, тогда пойду дописывать)

Спустя 6 минут, 37 секунд (7.07.2009 - 15:57) Alchemist написал(а):
Ka4_0k, не слушай его. Данные могут храниться в любой удобной тебе форме. Главное, чтобы руки росли откуда надо, тогда не будет проблем ни с кодом, ни с поиском.

Спустя 2 часа, 34 минуты, 15 секунд (7.07.2009 - 18:31) twin написал(а):
Цитата
Ka4_0k, не слушай его. Данные могут храниться в любой удобной тебе форме. Главное, чтобы руки росли откуда надо, тогда не будет проблем ни с кодом, ни с поиском.

Вот именно. В удобной тебе форме. То есть эта база будет жестко привязана к скрипту. Даже не к скрипту, а к его кривому исполнению.
База данных предназначена для хранения данных, а не особенностей мест, откуда растут руки. Данные эти могут быть обработаны и в другом скрипте. Полно случаев, даже далеко не надо ходить, тут на форуме, люди плачут и взывают о помощи, что им досталась кривая база по наследству.
Еще раз говорю, если пишешь на корзину, то делай что хочешь.
А если делать по человечески, нужно придерживаться общих правил.

Вот я потратил время, что бы раз и навсегда закрыть такие темы.
У кого возникают такие вопросы: сюда, плиз.

Спустя 22 минуты, 51 секунда (7.07.2009 - 18:54) Alchemist написал(а):
twin, мы с тобой уже спорили по этому поводу и не раз, и я не собираюсь делать это снова. Я прекрасно помню что для тебя "есть только два мнения..."

Ka4_0k, обработаные данные в БД хранить можно, поверь мне. Только обрабатывать надо таким образом, чтобы им всегда можно было (при необходимости) вернуть первоначальную форму.

Спустя 13 минут, 24 секунды (7.07.2009 - 19:08) twin написал(а):
Мнения тут не два, а одно. И не мое вовсе.

Вот скажи пожалуйста, как ты допустим экспортируешь эту адскую смесь в эксель? Если нет под рукой htmlspecialchars_decode() и вообще php? Ведь с мускулом не только он работает.

В третий раз говорю - каждый волен писать как он хочет. Но советовать такое на твоем месте я бы не стал.

Спустя 17 минут, 22 секунды (7.07.2009 - 19:25) FatCat написал(а):
Цитата (twin @ 7.07.2009 - 16:42)
но в базе должно храниться то, что написал юзер.

Распространенное мнение, и мне оно кажется ошибочным.
Обосную на примере стандартных форумных ББ-кодов:
Пользователь вводит:
Код
[b]Текст выделен жирным[/b]
при просмотре отдается:
Код
<b>Текст выделен жирным</b>


Предположим, страницу топика в среднем просматривают 1000 посетителей (на большинстве форумов больше, но возьмем эту цифру).
Если хранить в базе преобразованный код, преобразование выполняется ОДИН раз: при записи в базу.
Если хранить в базе исходный код, преобразование потребуется выполнять при КАЖДОМ запросе страницы.
Таким образом, хранение в базе преобразованного кода снизит ресурсоемкость движка в 1000 и более раз...

Спустя 4 минуты, 26 секунд (7.07.2009 - 19:29) twin написал(а):
Вопрос тут не в BB кодах вовсе, а в htmlspecialchars().
Вот именно в этом случае по совету Alchemist'a потребуеися лишнее преобразование. В случае с поиском.

И кстати, ВВ это не то, что написал юзер. Это форматирование уже. А не данные.

Спустя 7 минут, 2 секунды (7.07.2009 - 19:36) FatCat написал(а):
Цитата (twin @ 7.07.2009 - 20:29)
Вопрос тут не в BB кодах вовсе, а в htmlspecialchars().

ИМХО, вопрос в задачах скрипта.
Например в форуме мы не разрешаем пользователям никакой ХТМЛ-код.

Спустя 6 минут, 6 секунд (7.07.2009 - 19:43) twin написал(а):
Ну причем тут задачи... Ты как хранишь брички в базе? Так: <> или так &lt;&gt;?

Спустя 22 минуты, 35 секунд (7.07.2009 - 20:05) FatCat написал(а):
Цитата (twin @ 7.07.2009 - 20:43)
Ну причем тут задачи... Ты как хранишь брички в базе? Так: <> или так &lt;&gt;?

Если пользователь ввел <b>, тогда в базе буду хранить &lt;b&gt;
Если пользователь ввел [b], тогда в базе буду хранить <b>

Спустя 57 минут, 54 секунды (7.07.2009 - 21:03) twin написал(а):
Это штатная задумка ipb или переделка?

Спустя 1 час, 24 минуты, 11 секунд (7.07.2009 - 22:27) FatCat написал(а):
Штатная в первой линейке.

Спустя 10 минут, 59 секунд (7.07.2009 - 22:38) Ka4_0k написал(а):
Ребат, спасибо конечно biggrin.gif , но как уже писал не раз база будет пользоваться только мной и только для коментов и мелких текстов. В админке вообще фильтров практически нету, чтобы админу (т.е. мне было удобнее=))) Вопрос стоял про защищённость в первую очередь)

Спустя 3 минуты, 26 секунд (7.07.2009 - 22:42) kirik написал(а):
Цитата (Ka4_0k @ 7.07.2009 - 14:38)
база будет пользоваться только мной и только для коментов и мелких текстов. В админке вообще фильтров практически нету, чтобы админу (т.е. мне было удобнее=)))

Не правильный подход. Проверяться/защищаться должно все и вся, даже есть у тебя есть 100% уверенность что доступа в админку ни у кого кроме тебя не будет.
Взломают админку - утащут всю базу (самое безобидное).

Спустя 10 минут, 54 секунды (7.07.2009 - 22:52) twin написал(а):
Цитата
Штатная в первой линейке.

Вот я и смотрю, нет у меня такого.
Я почему спросил. Во первых такую базу можно пользовать только под этим движком, перенести на другой уже сложно. Но это пол беды.
Главные проблемы (как я понял именно из за такой схемы), это вот:

PHP
<?php
echo $text;
?>
<form action="?"&nbs
и иже с ней. Особенно при редактировании, рвется постоянно.
Там обратное преобразование должно как то быть, я вообще не понял. Как ты в бб для редактирования переводишь html?
Не знаю, может я и не прав, но мне кажется так делать совсем ни к чему. Если
Цитата
Предположим, страницу топика в среднем просматривают 1000 посетителей
то тогда это надо кэшировать. И не только из за разметки а вообще. Что по моему у тебя очень грамотно реализовано. А в кэше уже должен быть html с эквивалентами, как и положено для html страничек. Это уже вывод.
А хранить разметку в базе...
Впрочем каждый сам решает, что ему больше по душе.

Спустя 7 минут, 40 секунд (7.07.2009 - 23:00) twin написал(а):
Цитата
но как уже писал не раз база будет пользоваться только мной и только для коментов

Тут дело не в этом вовсе, а в подходе. Если начинаешь изобретать велосипед, то можно такое седло ему приделать, что геморрой неминуем. Привычка рулит. И в мыслях не должно быть где то халявить, для себя любимого пишешь или на публику.

Спустя 3 часа, 4 минуты, 8 секунд (8.07.2009 - 02:04) FatCat написал(а):
Цитата (twin @ 7.07.2009 - 23:52)
Особенно при редактировании, рвется постоянно.

Проблема в другом.
Чтобы корректно работала highlight_string, нужен открывающий и закрывающий тег независимо от того, ввели его в коде или нет, поэтому используется конструкция:
PHP
$code="<?php\n".trim($code)."\n?>";

Если же в коде после ?> используются еще какие-то ХТМЛ-теги, начинаются глюки.

Если напишешь лучше функционал подсветки синтаксиса - охотно использую. А тут я завяз и забросил.



Цитата (twin @ 7.07.2009 - 23:52)
тогда это надо кэшировать.

Не вижу смысла. База содержит тот код, который отдается на экраны пользователей.
Тут же практически ситуация с вложенными циклами: цикл считывания записей из БД и для каждой записи цикл регулярок преобразования ББ в ХТМЛ.
Нерационально гонять вложенные циклы и затем кешировать, рационально один цикл провести при вводе информации в базу, а при выводе считывать цикл по строкам из БД.

Спустя 5 часов, 51 минута, 54 секунды (8.07.2009 - 07:56) twin написал(а):
Попробуй так:
PHP
if(!strpos($code,"<?") && substr($code,0,2)!="<?")
$code="<?php\n".trim($code)."\n?>";


Цитата
Тут же практически ситуация с вложенными циклами: цикл считывания записей из БД и для каждой записи цикл регулярок преобразования ББ в ХТМЛ.

Мне сложно судить, я плохо понимаю, как у тебя устроен кэш. Но сдается мне ты писал, что хранишь тексты в файлах, откуда и отдаешь в поток. Хотя может и путаю. Если так, то зачем на выдаче преобразования... А если нет, то что это за кэш такой интересный.
Бес с ним, не станем же сейчас препарировать форум smile.gif

Спустя 5 часов, 28 минут, 53 секунды (8.07.2009 - 13:25) FatCat написал(а):
Цитата (twin @ 8.07.2009 - 08:56)
Попробуй так:

Основная кака с закрывающим тегом.
Если после него есть хоть один символ - глюки. Если два закрывающих - тоже глюки.

Руки не доходят выдернуть из геши массивы подстрок для окраски, и сделать обычными str_replace обрамление тегами цвета.

Спустя 21 минута, 6 секунд (8.07.2009 - 13:46) twin написал(а):
Joker'a надо попросить. Он его по косточкам разобрал. Вечеркрм стукну.

Только я так и не понял. Если в базе хранится готовый отформатированный текст, как он обратно на редактирование возвращается? Обратными преобразованиями что ли?

И с кэшем ничего не понял... Я был уверен что страницы у тебя хранятся в текстовом виде, в файлах. А перезапись в момент модификации...

Если страницы генерятся на основании запросов, то конечно. Только все равно это геммор.

А глюки мне кажется все таки неспроста. Тут же не только с подсветкой глючит.

Спустя 1 час, 56 минут, 22 секунды (8.07.2009 - 15:43) FatCat написал(а):
Цитата (twin @ 8.07.2009 - 14:46)
Если в базе хранится готовый отформатированный текст, как он обратно на редактирование возвращается? Обратными преобразованиями что ли?

Именно так.
Например, для использования css в сообщении (кнопки нет, а возможность есть wink.gif):
PHP
function convert(...)
{
// ...
$txt preg_replace\"#\[span\s*=\s*(\S+?)\s*\](.*?)\[\/span\]#is\"\"<span class='\\1'>\\2</span>\"$txt );
// ...
}

function 
unconvert(...)
{
// ...
$txt preg_replace\"#(<span class=')(.+?)('>)(.+?)(</span>)#is\"\"\[SPAN=\\2\]\\4\[/SPAN\]\"$txt );
// ...
}




Цитата (twin @ 8.07.2009 - 14:46)
с кэшем ничего не понял... Я был уверен что страницы у тебя хранятся в текстовом виде, в файлах.

Это не кеширование, это раздельное хранение.
Если размер сообщения больше 4000 знаков, в БД пишется один пробел, а текст пишется в файл.
При генерации страницы топика в цикле по строчкам таблицы БД условие: если в поле текста один пробел, то считывать из файла.

Кеширование тоже есть, например главная страница кешируется. При первом заходе мембера в сессию, кешируется информация его прав доступа, и при листании страниц она уже повторно не запрашивается из БД. Кешируются результаты поиска.


Цитата (twin @ 8.07.2009 - 14:46)
Тут же не только с подсветкой глючит.

Код без подсветки, HTML и SQL не глючат. Глючит только пхп...

Спустя 36 минут, 16 секунд (8.07.2009 - 16:19) twin написал(а):
Совсем запутал. А подсветка тогда как хранится?
Цитата
Это не кеширование, это раздельное хранение.
Если размер сообщения больше 4000 знаков, в БД пишется один пробел, а текст пишется в файл.

Ну тогда я вообще ничего не понимаю. Если реализован такой механизм, для чего в базе хранить разметку.
Во первых это увеличивает объём. Особенно подсветка. И не на маленько, а не порядки.
Во вторых, проблемы, описанные выше.
В третьих - обратное преобразование. Ты конечно сделал это уже, но ведь это как то не по людски...
4000 знаков, это ведь совсем не много. И вообще логичнее было бы просто уменьшить, если есть потребление. Или еще лучше - писать в файлы кроме объёмных рейтинговые страницы.

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



Спустя 2 часа, 3 минуты, 58 секунд (8.07.2009 - 18:23) FatCat написал(а):
Цитата (twin @ 8.07.2009 - 17:19)
Если подсчитать (трудно это конечно) сколько ресурсов тратится на преобразование бб в разметку (на выдаче) при низкочастотных запросах и малом количестве текста с тем, сколько потребляется на вытаскивание текста с разметкой (то есть большего объёма), то не думаю, что будет выигрыш.

Можно посчитать. Страница текстового поиска по файлам совершает поиск за 4 секунды, считывая 3500 файлов (общий вес 160 Мб).
Значит, среднее время доступа к файлу 0,001 секунды при среднем размере файла 40 Кб.
В среднем на странице 15 сообщений. Страница с 600 Кб информации съест серверного времени 0,015 секунды.

Время запроса
SQL
SELECT FROM ibf_posts ... LIMIT {$st} , 15
при размере ячейки всего 4 Кб составляет в среднем 0,04 секунды, а при размере ячеек в 1 байт всего 0,005 секунды.
Значит, из БД страница весов 60 Кб будет генерироваться 0,025 секунды, а 600 Кб - вдесятеро дольше: 0,25 секунды.

Вывод: При равном размере, хранение в файлах дает выигрыш в скорости почти в 20 раз.

Хранение в БД текстов меньше 4 Кб оправдано по причине кластерности файловой системы. Если все мелкие сообщения скидывать в файлы, скорость-то возрастет, но будет с бешеной скоростью расходоваться дисковое пространство на хостинге.

Спустя 42 минуты, 26 секунд (8.07.2009 - 19:05) twin написал(а):
Ну а база тут причем? У тебя форум построен практически на файловой системе, база используется как вспомогательный инструмент,это совсем другой вопрос. Хотя и тут принцип особо не меняется, я совсем не то имел ввиду.
Я имел ввиду разницу потребления ресурса на преобразование разметки и на считывание дополнительной информации.
Вот этот код:
Свернутый текст
PHP
if (!is_array($notify)) $notify = array($notify);
                                for (
$i=0$n=sizeof($notify); $i<$n$i++) {
                                  
$check_query tep_db_query("select count(*) as count from " TABLE_PRODUCTS_NOTIFICATIONS " where products_id = '" $notify[$i] . "' and customers_id = '" $customer_id "'");
                                  
$check tep_db_fetch_array($check_query);
                                  if (
$check['count'] < 1) {
                                    
tep_db_query("insert into " TABLE_PRODUCTS_NOTIFICATIONS " (products_id, customers_id, date_added) values ('" $notify[$i] . "', '" $customer_id "', now())");
                                  }
                                }
                                
tep_redirect(tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action''notify'))));
                              } else {
                                
$navigation->set_snapshot();
                                
tep_redirect(tep_href_link(FILENAME_LOGIN'''SSL'));
                              }
                              break;
      case 
'notify_remove' :  if (tep_session_is_registered('customer_id') && isset($HTTP_GET_VARS['products_id'])) {
                                
$check_query tep_db_query("select count(*) as count from " TABLE_PRODUCTS_NOTIFICATIONS " where products_id = '" $HTTP_GET_VARS['products_id'] . "' and customers_id = '" $customer_id "'");
                                
$check tep_db_fetch_array($check_query);
                                if (
$check['count'] > 0) {
                                  
tep_db_query("delete from " TABLE_PRODUCTS_NOTIFICATIONS " where products_id = '" $HTTP_GET_VARS['products_id'] . "' and customers_id = '" $customer_id "'");
                                }
                                
tep_redirect(tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action'))));
                              } else {
                                
$navigation->set_snapshot();
                                
tep_redirect(tep_href_link(FILENAME_LOGIN'''SSL'));
                              }
                              break;
      case 
'cust_order' :     if (tep_session_is_registered('customer_id') && isset($HTTP_GET_VARS['pid'])) {
                                if (
tep_has_product_attributes($HTTP_GET_VARS['pid'])) {
                                  
tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO'products_id=' $HTTP_GET_VARS['pid']));
                                } else {
                                  
$cart->add_cart($HTTP_GET_VARS['pid'], $cart->get_quantity($HTTP_GET_VARS['pid'])+1);
                                }
                              }
                              
tep_redirect(tep_href_link($gototep_get_all_get_params($parameters)));
                              break;
    }
  }

В чистом виде весит 3 kb, а с подсветкой (отформатированный) - 18 kb, то есть в 6 раз больше.
Что экономичнее преобразовать найденный результат при выдаче или искать по объёму в несколько раз большему, чем с чистым текстом?
Причем если поиск, то все равно нужно преобразование, иначе как найти...

А вообще, делить так делить, но по моему оптимальнее, проще и эфективнее искать в базе по чистому тексту, а выдавать результат из файлов. А там естественно готовые страницы.

Конечно, если только лимит жестко ограничен, нужно искать компромисы.


Спустя 34 минуты, 59 секунд (8.07.2009 - 19:40) FatCat написал(а):
Цитата (twin @ 8.07.2009 - 20:05)
В чистом виде весит 3 kb, а с подсветкой (отформатированный) - 18 kb, то есть в 6 раз больше.

У нас gZIP, поэтому разница будет 0,6 и 0,9 - всего в полтора раза.
И при ширине канала в 400 Мбит это такая мелочь, которой можно просто пренебречь.
Я в тестах использую 7-меговый текст, 1,3 Мб под gZIP-ом. Это предел, который может вытянуть наш движок на 24-х Мб, выделенных пхп.
Мы же на выводе делаем массу замен; те же макросы, те же шаблоны.

На ввод я могу вколотить и 15-меговый текст, он нормально преобразуется и запишется, только на экран его не получишь, "эксцид мемори".


Но главной для меня является даже не столько ресурсоемкость, сколько безопасность.
В нашем движке в принципе запрещено принимать на вход служебные символы: никаких кавычек никакого формата, никаих амперсандов, никаких угловых скобок, даже восклицательный знак преобразуется в метасимвол #33.
Паранойя? Зато линейку 1.х не удалось взломать ни разу с 2005 года. В других форумах случаи взлома и выходы новых патчей безопасности происходят практически ежемесячно.

Спустя 24 минуты, 42 секунды (8.07.2009 - 20:05) kirik написал(а):
FatCat
А где вы хоститесь?

Насчет подСветки.. Может реализуем подсветку с помощью JS? Пусть юзер сам себе все подсвечивает, если ему нужно. Я вчере разбирал библиотечку SHJS - неплохо подсвечивает. Даже немного дописал ее, чтобы ставила ссылки на php.net, если функция стандартная, и добавил подсветку всех предустановленных контстант. Седня еще посижу, о результатах сообщу.

Кстати плюсы в JS подсветке:
(из озвученных выше)
1. В бд хранится только код
2. Юзеру отдается чистый код, вес которого минимален
3. JS, который подсвечивает, будет кэшироваться у юзера.
4. Также те юзеры (читай боты) у которыхх не работает яваскрип не будут есть траффик smile.gif

Спустя 1 минута, 46 секунд (8.07.2009 - 20:07) twin написал(а):
Цитата
Паранойя?

Не знаю. Преобразование символов в эквиваленты на входе мало имеет отношения к безопасности. Фильтрация до добра редко кого доводит. Безопасность это правильная обработка, а не запреты и замены. Они порождают массу неоправданных сложностей и неудобств. А ломают форумы совсем не обязательно такими методами.
Хотя опять повторюсь - каждый пляшет как он хочет.
Пусть будет так.

PS. kirik
А где взглянуть можно?

Спустя 3 минуты, 35 секунд (8.07.2009 - 20:10) kirik написал(а):
twin, FatCat, давайте сюда.


_____________
-Oh My God! They Killed Kenny!
-You Bastards!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.