обработка нового поста в форуме достаточно ли пропускать пост через данную функцию чтобы обезопасить форум? PHP: function replaces($val) { if ($val == '') return(''); $val = htmlspecialchars($val); $val = str_replace( "\"", '"', $val ); $val = str_replace( "`", '"', $val ); $val = str_replace( "'" , '"', $val ); $val = preg_replace( "/\\\$/", '$', $val ); $val = preg_replace( "/\r/",, $val ); $val = stripslashes($val); $val = preg_replace( "/\\\/", '\', $val ); $val = nl2br($val); return($val); } при условии что пока что там нет псевдо тегов и смайлов
вот моя альтернатива: PHP: $val=str_replace("'", "'", $val); $val=str_replace('"', """, $val); $val=str_replace(">", ">", $val); $val=str_replace("<", "<", $val); $val=str_replace("`", "`", $val); $val=str_replace("\\", "\", $val); + nl2br() и этого будет достаточно. В твоем же примере абсолютно ненужным являются строчки PHP: $val = str_replace( "\"", '"', $val ); $val = str_replace( "'" , '"', $val ); $val = stripslashes($val); Первые две уже обрабатываеются при htmlspecialchars() с флагом ENT_QUOTES вроде. А stripslashes() вообще не нужен, коли ты преобразуешь все ковычки до этого. Непонятно зачем делаешь: PHP: $val = preg_replace( "/\r/",, $val ); Вообще не понятно. \r и \n абсолютно никак не влияют на отображение html`а. Тем более что ты все равно потом делаешь nl2br(). Не понял зачем нужна PHP: $val = preg_replace( "/\\\$/", '$', $val ); Вообще не понял =))) Опять же, Дикс, твоя основная ошибка. Опять укажу на нее все тем же анекдотом: "Береженого бог бережет", - сказала монашка, надивая презерватив на свечку. Проще будь. Начни с того, что разберись, какие именно символы тебе нужно отфильтровать. И уже потом пиши код. И еще одно. Заменяя двойную, одинарную ковычку и перфекс на "... Ну это короче не правильно. Если я пишу на форуме перфикс, значит я хочу чтобы именно перфикс стоял там, где я его поставлю. А не двойная ковычка, как у тебя. К пример я пишу , а твой форум выдаст мне . Не хорошо это
ох, Тринукс. даже не знаю как всё объяснить чтоб меня поняли. имел я глупость поставить перед собой задачу - написать движок сайта да ещё и со внутренним форумом. ничего подобного раньше не писал, кроме простого форума и простого сайта в отдельности. да ещё и подпрягся сделать на этом движке сайт для своей тренажёрки, за два месяца бесплатных хождений туда (1100р. экономии) Вот и мечусь теперь из одного куска кода в другой. Пишу основу - главные функции, чтобы всё работало, а мелочи типа авторизации или фильтрации постов оставляю на потом. Но чтобы они всё равно уже были, как ты мог заметить я леплю туда что попало. Ты видел мою тему, где инфа о юзере пишется в куки и читается из них. Таким же образом я выдрал готовый код фильтрации из ExBB, но толком не разобравшись, лишь чуток его подрезал. Такие тонкости как флаги ENT_QUOTES я если и изучил при прочтении книги, то ещё не успел усвоить и научиться применять. Допишу основу и начну шлифовать код, тогда ваши советы мне очень и очень помогут. Большое спасибо, Тринукс, чтоб я без тебя делал =)
2Trinux не злоупотребляй двойными кавычками кстати говоря в большенстве случаев достаточно фильтровать ' и < . Причем первый символ чтобы не было выхода за пределы атрибута value и предотвращения атаки типа sql-inj (есесино при передаче чисел intval() Дополнительно), а второй, чтобы не было возможности вставлять свои теги.
2 Che-Guevara Ты не прав. А что если у меня атрибуты тега заключены не в одинарную ковычку, а в двойную? Значит нужно фильтровать обе. Далее. Перфикс. Как ты уже, надеюсь, знаешь (а знать ты это можешь, почитав инфу на главной странице antichat.ru) перфикс юзается в IE как символ начала\конца комментариев. А значит это реальная опасность вхождения в атрибуты тега. Значит нужно фильтровать и его. Далее, обратная треугольная скобка то е обязательна и то же при нефильтрующемся перфиксе дает несколько больше возможностей. Точнее те же, но в более простой форме. Обратный слеш... ну пишу я, к примеру а если не фильтровать его, то получу А это уже не хорошо. 2 Дикс Перестань выкать =) не такой я уж и старый =)
:d я имел ввиду всех античатовцев кстати, вам сколько лет? ещё, извините ламера, что такое "перфикс"? или префикс?
Форум сожрал, там та же одинарная ковычка, тольво в десятичной кодировке. перфикс или префикс - сам ХЗ, но это - `
ээ, а каг бы мне узнать десятичную кодировку кавычки? и ещё интерпретатор выдаёт ошибку на строчке PHP: $val=str_replace("\\", "\", $val); где б мне узнать десятичный код бэкслеша?
писец. писать движок с форумом, не зная основ пхп. Фтыкай http://us2.php.net/language.types.string до полного всасывания материала.
:плачет: ребята, я не думаю что я настоко уж ламер, но пожалейте плз бедного технолога сборки топливной системы Су-34, который пашет круглые сутки в цехе окончательной сборки над шестой машиной Су-34, скажите плз эти коды, чтоб можно было уже поскорее закрыть этот вопрос, а потом уж я как-нить сам научусь (((
пасиба про сушку не вру. НАПО им. Чкалова, цех окончательной сборки №9 инженер-технолог ещё вопрос (не могу свою тему про обработку пароля найти) PHP: if (preg_match("/^([a-z0-9]{3,10})$/i", "sdfsdfdsfdsfsd")) почему не пропускает?