VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Решил создать данную тему, да бы указать встретившиеся мне проблемы и их решения.
Я сам из сферы IT, в прошлом программист, но не php и вообще не Веб. По-этому сразу хочу сказать, что некоторые решения могут быть хоть и рабочими, но не элегантными или методически неправильными.
Далеко не одну из проблем с которыми я сталкивался (решения которых опубликую), решили уважаемыми Гуру данного форума, которым ещё раз хочу выразить свою благодарность. Другие решения нашёл сам, методом тыка и разобравшись малёк в языке php.
Если Админы не против, данная тема мне видится как некий "сжатый справочник" по конкретным проблемам и их конкретным решениям, без преамбул и долгих описаний. Что бы если кому понадобилось, смог придти сюда и сразу найти ответ.
У меня версия 3.8.7, по-этому весь материал от меня будет про 3-ую линейку, но скорее всего не для всех версий. Хотя недавно вручную сделал откат с 4.2.5 на 3.8.7, о чём может быть тоже отпишусь по-подробнее, тема интересная.
Проблема: в некоторых случаях (поиск, перемещение/удаление темы и т.д.) появляется сообщение об ошибке, текст которого "Your submission could not be processed because a security token was missing." (невозможно сделать то-то т.к. не хватает security token).
Данная проблема встречается (как я заметил) только в нестандартных стилях.
Решение:
1. Включаем отображение названий шаблонов в HTML коде: Админка -> Общие настройки -> Add Template Name in HTML Comments
2. Заходим на страничку где вылетает ошибка, и включаем Дебаг утилиту браузера (обычно клавиша F12, если нет, Гуглить для вашего браузера).
3. В утилите, нажимаем на кнопку "курсор в квадрате", затем тыкаем на кнопку/ссылку кликая по которым вылетает ошибка
4. Скролим повыше пока не дойдём до названия шблона (формат комментарий в HTML, то есть: <!-- название шаблона -->. Находим, например <!-- postbit_legacy -->
5. Через Админку, заходим в шаблон, ищем кнопку/ссылку кликая по которым вылетает ошибка. Оно всегда находится в блоке кода form
6. Найдя соответствующий блок кода "form", в нём ищем <input type="hidden" name="s" value="$session[sessionhash]" />
7. Сразу после добавляем <input type="hidden" name="securitytoken" value="$bbuserinfo[securitytoken]" />
8. Сохраняем отредактированный шаблон, перезагружаем страничку и проверяем
Last edited by DJ Kukstyler : 02-02-2025 at 02:00 AM.
Reason: Добавлено сообщение
@DJ Kukstyler
Модератор темы
Join Date: Jul 2006
Location: Мадрид
Posts: 548
Версия vB: 3.8.7
Пол:
Reputation:
Knowing 229
Репутация в разделе: 227
6
Проблема: установленный хак не отображается. Решение: приведённое решение НЕ является универсальным, ибо каждый хак может иметь собственные косяки, несовместимости с вашей версией движка или другими хаками. Но, первым делом надо проверить следующие причины.
1. У многих хаков есть функционал по правам, то есть не все могут всё. И далеко не всегда права на доступ к тому, что делает хак, активированы по-умолчанию. Особенно, если у вас ID групп нестандартные.
2. Плагины хаков, обычно, автоматически вставляются в существующий код движка одним из следующих способов:
А. Находя в коде некую цепь символов являющихся частью кода шаблона (это может быть HTML комментарий, блок кода или название PHP переменной)
Б. Используя механизм "хуков" (~крючков).
И так надо пройтись по каждому вышеуказанному пунтку.
1. Это самое простое, первым делом проверяем права: Аминка -> Группы пользователей -> Администратор групп. Выбираем сначала группу Админов (по-умолчанию id=6). Скролим вниз и смотрим, есть ли там новый подраздел по правам новоустановленного хака и и активированы ли права. Если нет - активируем, сохраняем и проверяем заработало ли.
2. Если предыдущий пункт проблему не решил, то пора переходить к анализу кода.
Итак. Админка-> Продукты и Плагны -> Администратор плагинов. Ищем название продукта, далее в списке плагинов, ищем интересующий нас плагин... Как ищем? Ответ неоднозначный: по названию плагина хотя частенько у кодеров всех мастей патологический дебилизм по называнию модулей, переменных и т.д..., если название не особо говорящее, то смотрим колонку Nº2, где указаны некие "метки", то есть места куда подключается данный плагин.
Например наш хак показывает нечто в сообщениях (постах), значит нас интересует postbit (отображение постов). Значит "метка" должна содержать строку "postbit".
Каждый плагин подключается по одной метке. Но меток много, и насколько я понял они связаны с событиями. Поэтому на тот же postbit есть несколько меток (postbit_display_start, postbit_display_complete и т.д.). Но это для общего понимания, в данном случае не суть.
Найдя интересующий нас плагин, редактируем (заходим) данный плагин, скролим вниз. Смотрим последние строчки кода плагина. Тут может быть 2 варианта:
2.А. Если последняя (или одна из последних) строчка содержит $vbulletin->templatecache['НАЗВАНИЕ_ШАБЛОНА'] = str_replace то хак ищет какой-то текст, и заменяет его на него-же + код плагина.
В данном случае, надо убедиться, что в шаблоне указанном в $vbulletin->templatecache действительно присуствует строка, которую он ищет. Если её там нет, то проблема найдена.
Тут либо добавить искомый текст в шаблон, либо заменить искомый текст на какой-либо что действительно есть в шаблоне.
Кстати тем же способом можно переместить отображение функционал хака (кнопки, поля и т.д.).
2.Б Если же последняя (или одна из последних) строчка содержит eval('$template_hook[какойтотекст] .= " ' . fetch_template( ... это значит, что в шаблоне должно тоже присутствовать $template_hook[какойтотекст]. Если нет, то получается то же что и в предыдущем пункте - плагин не находит куда подключиться. В таком случае заходим в шаблон и вставляем там где надо точь в точь как в плагине: $template_hook[какойтотекст]
Есть ещё одно: убедитесь, что плагин не цепляется там, где код сидит в условии (IF), а если да, то что данное условие удовлетворяется (действительно).. Иногда так бывает. А если оно так, а условие недействительно, то и хак не отображается.
Пример: у вас отключены аватарки, а хак вставляет свой код сразу после аватарки. Получается код хака оказывается тоже в кондиции "показываем ли аватарки".
Накатал, однако, тексту....
Last edited by DJ Kukstyler : 02-03-2025 at 03:52 PM.
@Лис
Эксперт
Join Date: Sep 2017
Location: Питер, Россия
Posts: 2,117
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1469
Репутация в разделе: 385
2
Иногда хак не отображается, потому что он не в той кодировке.
Такое вот часто у новичков бывает.
Поменять кодировку можно в любом текстовом редакторе.
Неплохо бы сперва почитать о кодировках.
@DJ Kukstyler, спасибо, интересно. Продолжайте.
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,820
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20317
Репутация в разделе: 8468
3
Quote:
Originally Posted by DJ Kukstyler
Поэтому на тот же postbit есть несколько меток
эмс...
ремарка =)
в коде пхп, это те же самые хуки (крючки), к которым "цепляется" код хаков/модулей
нужно еще смотреть на строку "порядок исполнения кода" (по умолчанию 5)
к примеру, кодер подключает свой код, к какому то хуку в коде воблы, который может отменить действие другого кода от другого хака (сталкивался неоднократно), подключенного к тому же хуку
и если хак "почему то" не работает, нужно смотреть код модулей, подключенных к одному хуку и порядок их выполнения
Quote:
Originally Posted by DJ Kukstyler
частенько у кодеров всех мастей патологический дебилизм по называнию модулей
я видимо, тоже в этой "когорте"
у меня все названия модулей начинаются с названия хука, к которому подключается модуль
так его легче искать впоследствии (по названию хука, поиск по странице в браузере)
есть предложения, как называть модули?
@Лис
Эксперт
Join Date: Sep 2017
Location: Питер, Россия
Posts: 2,117
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1469
Репутация в разделе: 385
0
Quote:
Originally Posted by kerk
у меня все названия модулей начинаются с названия хука, к которому подключается модуль
Меня устраивает как именно ты их называешь.
Потому что я считаю что придумать "недебильное" технические-простое название для хака довольно непросто.
@DJ Kukstyler
Модератор темы
Join Date: Jul 2006
Location: Мадрид
Posts: 548
Версия vB: 3.8.7
Пол:
Reputation:
Knowing 229
Репутация в разделе: 227
4
Quote:
Originally Posted by kerk
ремарка =)
Важное замечание! Забыл о нём упомянуть, и признаюсь и не знал, что если у 2-х плагинов в одном и том же хуке одинаковые номера порядка исполнения, то один может "аннулировать" другой. (Не уверен, правильно ли я понял). Я думал, это чисто для ORDER BY в запросе, как бы, символически.
Quote:
Originally Posted by kerk
у меня все названия модулей начинаются с названия хука, к которому подключается модуль
так его легче искать впоследствии (по названию хука, поиск по странице в браузере)
Так наоборот, получается мы с Вами в одной компании. Так и надо!
Я, вот на пример, про этот "шедевр" (и ему подобные):
С культурой/конвенциями php не знаком. Хорошо знаком с Си, Java, даже с Cobol... тот же Bash. Но некий общий здравый смысл в программировании вездесущ и распространяется на все языки (ну кроме сугубо математических, и то я не совсем согласен).
Одно из основных правил программирования в целом: называй переменные, функции, модули и т.д. "говорящими" названиями, да бы другой прогер, (которому со-временем придётся возиться с твоим кодом) не проклинал твои последующие 18 реинкарнаций.
Когда переменные называются "а1", "а3", а модули "Модуль1", "Модуль2"... а кода на несколько тысяч линий... Я думаю самый искусный мат и гремучие проклятия придумали именно программисты, сидя за подобным кодом.
DJ Kukstyler добавил 07.02.2025 в 21:56
Quote:
Originally Posted by Лис
придумать "недебильное" технические-простое название для хака довольно непросто.
Есть маленькое и рабочее правило: называть функции и модули так, что бы было ясно ЧТО они делают (за что ответственны), а не КАК они это делают.
Ты приходишь и сразу видишь, что тут делается. Если тут есть то, что тебе надо модифицировать, то уже идёшь в соответствующую функцию и смотришь, как именно оно сделано.
Таким образом тебе не надо лазить по сему коду. Чего не скажешь о следующем коде:
В общем и вкратце, как-то так. Можно долго ещё об этом говорить (что у каждого "своя логика", что если речь о сущностях (ооп), то дело уже немного меняется и т.д.). Но по-сути, стараясь соблюдать это небольшое правило, код становится более чем читабельным, а багфиксы и патчинги в разы быстрее.
Last edited by DJ Kukstyler : 02-07-2025 at 10:56 PM.
Reason: Добавлено сообщение
@Лис
Эксперт
Join Date: Sep 2017
Location: Питер, Россия
Posts: 2,117
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1469
Репутация в разделе: 385
0
Quote:
Originally Posted by DJ Kukstyler
Есть маленькое и рабочее правило: называть функции и модули так, что бы было ясно ЧТО они делают (за что ответственны), а не КАК они это делают
Ну это логично да. Просто я как копирайтер считаю что это не все могут. Просто не дано и все.
@DJ Kukstyler
Модератор темы
Join Date: Jul 2006
Location: Мадрид
Posts: 548
Версия vB: 3.8.7
Пол:
Reputation:
Knowing 229
Репутация в разделе: 227
2
Задача: во время регистрации забанить все домены электронной почты кроме некоторых по собственному выбору
Решение: вроде как существует хак для этого, может и не один. Я решил эту проблему следующим образом:
1. редактируем register.php
2. находим следующий код:
PHP Code:
// check for matching email addresses if ($vbulletin->GPC['email'] != $vbulletin->GPC['emailconfirm']) { $userdata->error('emailmismatch'); }
3. сразу после добавляем:
PHP Code:
if (!strpos(strtolower($vbulletin->GPC['email']), '@gmail.') AND !strpos(strtolower($vbulletin->GPC['email']), '@hotmail.') AND !strpos(strtolower($vbulletin->GPC['email']), '@outlook.')) { $userdata->error('emailinvaliddomain'); }
В данном случае блокируются все домены кроме соответственно gmail, hotmail и outlook. Можно заменить/добавить домены.
4. Добавляем новую фразу emailinvaliddomain : Админка -> язики и фразы -> Администратор фраз
5. Нажимаем на кнопку "Создать фразу", тип фразы "Фразы ошибок (Error Messages)", в списке "Продукт" выбираем vBulletin, в поле "Название переменной" вставляем emailinvaliddomain, в поле "Текст" записываем текст ошибки по типу "Домен не разрешён на этом форуме...".
6. Также редактируем фразу "укажите свой e-mail" да бы заранее предупредить юзера о разрешённых доменах: Админка -> язики и фразы -> искать фразу
7. В поле искать вставляем enter_valid_email_address и выбираем опцию поиска по имени переменной (а не по содержимому) и нажимаем на кнопку "Искать"
8. Под уже существующим текстом, добавляем текст предупреждения о разрешённых доменах, можно использовать HTML, то есть цвет/размер текста и т.д.
9. Сохраняем и проверяем.
Last edited by DJ Kukstyler : 02-20-2025 at 01:20 PM.