форум vBSupport.ru > vBulletin > Вопрос — Ответ
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
taravasya
Знаток
 
taravasya's Avatar
Default BBCode iFrame с параметрами
0

Есть такой код замены для BBCode
HTML Code:
<style>
    .iframecontent{
      padding: 2px;
      border-radius: 6px;
      box-shadow: 0 0 6px rgba(0,0,0,0.3);
      border: 1px solid;
      border-color: #ECECEC;
      background-color: #F2F6F8;
    }
    .iframetitle{
      font-size: smaller;
      color: #5A7F97;
      font-style: italic;
    }
</style>

<div align="center"><span class="iframetitle">
<script>
(function() {
  var dirtiframe = "{param}";
  var regexurl = new RegExp(/(?:google.com|adobe.com|videohive.net)/);
  var provider = dirtiframe.match(regexurl);
  var providerurl = 'Provider' + provider;
  var sourceurl = '<a href="' + "{option}" + '">' + 'Source</a>';
document.write(providerurl + '<br />);
document.write(sourceurl + '<br />'); 
  })();
</script>
</span>
<hr noshade="" size="1" width="50%">
<script>
  var dirtiframe = "{param}";
  var cleariframe = dirtiframe.replace(new RegExp('&quot;','g'),'\'');
  var slicediframe = cleariframe.slice(10,-19);
  var regiframe = new RegExp(/.\w.+(?:google.com.\w.+|adobe.com.\w.+|videohive.net.\w.+)/);
  var result = slicediframe.match(regiframe);
document.write('<iframe class="iframecontent"'+result+'></iframe>');
</script>
</div>
В коде, в целях безопасности, есть проверка того, что-бы для вставки фреймов использовались только допустимые домены.
Так же используется опция, для того, что-бы можно было перейти на страницу источника. Она тоже перепроверяется.
Вообщем то все работает и меня почти устраивает.
Но есть пара вопросов к уважаемым комрадам.
1)Какую опасность может представлять из себя бб-код с айфреймами в подобном исполнении?
О том, что если юзеры могут использовать айфрейм с любого ресурса, это можно использовать для перехвата хешей, куков и т.д. и то, что это можно использовать для распростронения вредоносных скриптов я читал и понял. Ограждает ли от подобных опасностей тот факт, что происходит проверка использования контента только с допустимых доменов? Какие еще подводные камни могут возникнуть?
2)Вторая проблема больше косметического плана. Как я уже говорил выше, в коде я использовал опцию, в которой необходимо указывать страницу источника. И тут есть один затык. Если юзер поленится вставить ссылку и поле с опцией останется не заполненой, то в итоге, в сообщении отображается не айфрейм, а его код. Есть ли способ этого можно избежать? То-есть, что-бы было так, что если опция не заполнена, ббкод вообще не отражал бы ничего или само-удалялся?
3)При быстром ответе/редактировании бб-код не срабатывает как положено. Он верно сохраняет содержимое сообщения, однако не выводит айфрейм. Он появляется только после перезагрузки страницы. Это можно как то побороть?
Ну и вообще… укажите на тупняки присутствующие здесь)))
Например, пока я писал это сообщение, я подумал, что при генерации ссылок, наверное следует добавить нофолоу…
Спасибо всем отозвавшимся!

Last edited by taravasya : 04-10-2014 at 04:31 AM.
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
kerk
k0t
 
kerk's Avatar
Default
1

ифрейм сам по себе не есть гут, а уж тем более с такой "проверкой"
это не проверка вообще, яваскрипт выполняется на стороне клиента
нужна проверка в пхп коде, т.е. такой ббкод ну никак нельзя добавлять через менеджер ббкодов, то модулями и только с проверкой в пхп
 
 
taravasya
Знаток
 
taravasya's Avatar
Default
0

kerk, То-есть вот этот bbcode, тоже не есть гут?
Quote:
Originally Posted by kerk View Post
то модулями и только с проверкой в пхп
Тут у Вас опечатка,.. можно "полную версию" текста?)))

taravasya добавил 10.04.2014 в 11:43
Мне нужно действовать по логике изложенной здесь:
http://vbsupport.ru/forum/showthread.php?t=44414
?
В той теме инфа изложена по третьей булке. Можно подсказку, что изменилось в 4й(я так понимаю, что названия переменных теперь другие), и не изменился ли сам принцип действий?

Last edited by taravasya : 04-10-2014 at 12:43 PM. Reason: Добавлено сообщение
 
 
kerk
k0t
 
kerk's Avatar
Default
2

да, опечатка, вместо "то", читать "только"
переменные они и в африке переменные и кодер сам дает им имена
если в ббкодах нет подключения шаблонов и/или в шаблонах не используются переменные из ббкода, то код из статьи по ссылке годится для любой версии
 
 
taravasya
Знаток
 
taravasya's Avatar
Default
0

Я понимаю, что имена переменных я сам могу назначать, я просто имел ввиду, может быть в том примере использовались какие-нибудь служебные переменные используемые движком булки. В частности вот эта: $custom_bbcode? В данном случае это тоже произвольное имя переменной?
 
 
taravasya
Знаток
 
taravasya's Avatar
Default
0

@SMak044, я в PHP, дупль-пусто....
Ну вот наваял такое(это черновичок, просто для освоения):
бб-код изначально задуман для вставки iframe-ов, с заведомо разрешённых доменов.
PHP Code:
$custom_bbcode 'bbiframe'
$this->tag_list['no_option'][$custom_bbcode] = array (); 
$this->tag_list['no_option'][$custom_bbcode]['callback'] = 'handle_external'
$this->tag_list['no_option'][$custom_bbcode]['external_callback'] = 'handle_bbiframe'

if(!
function_exists ('handle_bbiframe'))  

  function 
handle_bbiframe (&$theobj, &$value, &$option)  
  {
    
$regiframe '/.\\w.+(?:google.com.\\w.+|adobe.com.\\w.+|videohive.net.\\w.+)/';
    
$result preg_match($regiframe$value$cleariframe); 
    return 
$cleariframe[0]; 
  } 

В дебаггере regexp-а, видно, что вся строка используемого кода вставки, сопоставляется паттерну, то-есть регулярное выражение работает верно. Однако в сообщении остаётся одно слово: "Array"
Я так понимаю, что возвращается не верный тип данных?
Подскажите пожалуйста, как его преобразовать?

taravasya добавил 11.04.2014 в 00:55
Прошу прощения. В ретурне изначально пропустил [0]. После того, как добавил его, в сообщении вместо самого фрейма, стал оставаться текст кода вставки
Что ещё нужно сделать, что-бы вставлялся сам фрейм?

Last edited by taravasya : 04-11-2014 at 01:58 AM. Reason: Добавлено сообщение
 
 
kerk
k0t
 
kerk's Avatar
Default
2

переменная $cleariframe[0] содержит один из доменов
и нужно проверять входящие данные, перед ретурном
если не соотв. шаблону, возвращать false или свое что то, типа "ошибка бла бла бла..."
вот пример ббкода с файловика
домен соотв. тем что разрешены в настройках
https://www.youtube.com/watch?v=ak6omNRd6-g
Kea - The Smartest Parrot [THE COMPLETE DOCUMENTARY]
YouTube.com 00:23:03


и нЕ валидный видеосервис
https://www.blablabla.com/watch?v=ak6omNRd6-g
Invalid or unsupported media service

====

где то я выкладывал уже хак с парсингом видеохостингов, там можно глянуть, как реализовано
 
 
taravasya
Знаток
 
taravasya's Avatar
Default
0

Quote:
Originally Posted by kerk View Post
нужно проверять входящие данные, перед ретурном
если не соотв. шаблону, возвращать false или свое что то, типа "ошибка бла бла бла..."
До этого пока руки не добрались. Мне очень трудно даётся всё это. Приходится по крупице гуглить каждую строчку((( но разобраться хочется самому))). И конечно, я понимаю, что нужно сделать обработку ошибки... Кроме того планирую сделать продукт, связанный с этим бб-кодом, что-бы админу, в настройках, удобно было-бы вбивать "разрешённые" домены. И возможно текст ошибки, в случае не соответствия ни одному из доменов...
---------
Я так понял, что выводился текст кода, а не сам фрейм, потому, что я оставлял весь текст, тот который вбивается юзером между тегами. Видимо булка изначально игнорирует его как возможный html. После того как я сделал вот так:
PHP Code:
  $patterniframe '/.\\w.+(?:google.com.\\w.+|adobe.com.\\w.+|vk.com.\\w.+|videohive.net.\\w.+)/'
    
$cleariframe str_replace("&quot;""\""$value); 
    
$result preg_match($patterniframe$cleariframe$resultiframe);  
    
$trimiframe substr($resultiframe[0], 11, -19); 
    
$bbiframe "<div><iframe " $trimiframe "></iframe></div>"
    return 
$bbiframe
, то-есть тупо отрезал начало и конец(собственно сами теги <iframe></iframe>), а потом в модуле снова их "дописал", вставка фрейма заработала(там ещё была проблема с кавычками в коде фрейма, но вроде разобрался).
Но теперь возникла проблема с визуальным редактором, которую я описал ниже:

Есть несколько затыков...
1)Если после размещения сообщения, открыть его в редакторе для быстрого редактирования, при условии, что включён визуальный редактор, и тут-же отключить этот самый визуальный редактор, то код вместе с тегом бб-кода исчезает безвозвратно((((
2)В расширенном редакторе, в предварительном просмотре, тег не отображает содержимое фрейма. При этом, опять же если включён визуальный редактор, фрейм чудесно отображается в окне самого редактора. Опять же... стоит отключить его и весь код, тут же удаляется начисто...
3)Ну и есть проблема с гугл-мап.. хотя она совсем абстрактная и вряд ли без собственно ручного вмешательства кто-то, что-то поймёт. Дело в том, что после размещения сообщения, фрейм отображается без правильного места положения. На карте, отображается тупо весь мир))) А если открыть сообщение для редактирования, там уже место положения правильное.. Вообще чертовщина какая то.....
---------
Схожая с первыми двумя проблема, была у какого-то из хаков хайда. Когда-то ставил, и обнаружил, что содержимое сообщения, находящееся в его тегах, после редактирования исчезало...
Вот.... Может быть кто-то что-то сможет подсказать?
Подозреваю, что нужно, для редактора, сделать отдельную обработку, что-бы фрейм не выводился в окне редактора. Но как это сделать, даже представить не могу....
Понимаю, что это уже нужно писать в разделе по 4й булке, но там к сожалению, нет подобных тем..((

Last edited by taravasya : 04-11-2014 at 05:10 AM. Reason: Добавлено сообщение
 
 
kerk
k0t
 
kerk's Avatar
Default
2

Quote:
Originally Posted by taravasya View Post
1)Если после размещения сообщения, открыть его в редакторе для быстрого редактирования, при условии, что включён визуальный редактор, и тут-же отключить этот самый визуальный редактор, то код вместе с тегом бб-кода исчезает безвозвратно
добавить модуль на хуке bbcode_create что бы вобла не парсила кастомный ббкод
PHP Code:
if($this->is_wysiwyg())
{
      
$this->unparsed_tags[] = 'bbiframe';

 
 
taravasya
Знаток
 
taravasya's Avatar
Default
0

Вот.... подсмотрел в ббкоде спойлера такой код:
PHP Code:
if ($this->is_wysiwyg()) 

        
$this->unparsed_tags[] = 'spoiler'

Подставив его и подправив в соответствии с моим кодом, получил в итоге такой код модуля:
PHP Code:
$custom_bbcode 'bbiframe'
$this->tag_list['no_option'][$custom_bbcode] = array (); 
$this->tag_list['no_option'][$custom_bbcode]['callback'] = 'handle_external'
$this->tag_list['no_option'][$custom_bbcode]['external_callback'] = 'handle_bbiframe'

if(!
function_exists ('handle_bbiframe'))  

  function 
handle_bbiframe (&$theobj, &$value, &$option)  
  { 
    
$patterniframe '/.\\w.+(?:google.com.\\w.+|adobe.com.\\w.+|videohive.net.\\w.+)/';
    
$cleariframe str_replace("&quot;""\""$value);
    
$result preg_match($patterniframe$cleariframe$resultiframe); 
    
$trimiframe substr($resultiframe[0], 11, -19);
    
$bbiframe "<div><iframe " $trimiframe "></iframe></div>";
    return 
$bbiframe;
  } 
}
if (
$this->is_wysiwyg()) 

        
$this->unparsed_tags[] = 'bbiframe'

Теперь при включённом визуальном редакторе, вместо фрейма, в окне редактора, отображается только текст в тегах. Соответственно включение/выключение визуального редактора во-время редактирования сообщения никак не влияет на содержимое и текст с тегами не пропадает.
Осталась лишь проблема с предпросмотром сообщений в режиме полного редактирования..... но думаю, что так же методом поиска аналогов уже смогу разобраться и вскоре представлю новый бб-код в разделе с хаками))
-----------------
Уважаемые модераторы, можно перенести это и предыдущие три сообщения в эту тему:
http://vbsupport.ru/forum/showthread.php?t=49744
дабы содержание более соответствовало разделу?
Спасибо.

taravasya добавил 11.04.2014 в 15:59
Quote:
Originally Posted by kerk View Post
добавить модуль на хуке bbcode_create что бы вобла не парсила кастомный ббкод
kerk, О! Спасибо! А я как раз тоже нашёл это решение!

Last edited by taravasya : 04-11-2014 at 05:04 PM. Reason: Добавлено сообщение
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 10:39 AM.


Powered by vBulletin® Version Free Edition
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.