Перейти к публикации

Рекомендованные сообщения

Внезапно антигород.ком

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

Вопрос: как же сделать так, что бы ifrmae обрабатывался движком?

Спасибо

Ссылка на сообщение
Поделиться на других сайтах

Никак, вставлять в БД напрямую. Я "за", чтобы скрипты и фреймы вырезало из новостей, поскольку их нельзя контролировать, они часто живут своей жизнью и могут нанести вред как сайту админу, так и пользователям сайта. Нужно искать варианты, типа innerHTML (если так будет работать стандартно), что немного, но безопасней, либо другие способы загрузки, либо просто отказаться от всяких варёзных гамносетей.

Ссылка на сообщение
Поделиться на других сайтах

zgr, снова спасибо за ответ.

Не совсем понял про "гамносети", т.к. вопрос был про видеохостинги YouTube и Vimeo, которые сейчас перешли на iframe. Если использование фреймов такая опасная штука, то не совсем понятна логика этих сервисов. Пользователям ведь не объяснишь, что каждый раз надо использовать "старый код". В тоже время, если они перещли на ифреймы, то, наверное, есть какой-то механизм защиты от нежелательных действий во всяких уютных жежешечках и вордпресах? Что скажет программно-продвинутая общественность?

Ссылка на сообщение
Поделиться на других сайтах

Ginko,

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

Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах

Просто в продолжение дискуссии интересуюсь чем себя защищают движки, где эта вставка разрешена

Ничем.

Собственно, почти наверняка ютуб и прочие продолжат пролитику вставки своего кода только через ифрейм, а значит скоро подобный вопрос возникнет у многих.

Ошибаетесь. Действительно популярные видеохостинги такие коды не используют. В контакте исключение.

Ссылка на сообщение
Поделиться на других сайтах

продолжат пролитику вставки своего кода только через ифрейм

С чего вы это взяли? Зашел на Тюбик, там всё по-прежнему. Кликните опции:

Включить режим повышенной конфиденциальности

Использовать старый код встраивания

И вставляйте как обычный флеш, поддерживается сейчас варианты:

<object><embed></embed></object>
и
<iframe></iframe>

П.С. Целсофт, теги сломались - в Опере двойные ставятся на форуме.

Ссылка на сообщение
Поделиться на других сайтах

Господа, вынужден не согласиться с вами.

Вот скрины нынешних ютуба и вимео:

6ca66709039a.jpg

9f55dadd0ad8.jpg

Как видите, везде по умолчанию стоит ифрейм.

Вариант, предложенный уважаемым zgr не подходит, т.к. контент наполняют сами посетители и, увы, каждому не объяснишь какие галочки где нажимать.

Вот такая незадача.

У себя на сайте я, пожалуй, прикручу сообщение при добавлении видео, о том, что используются только <embed> коды.

Но, боюсь, в конечном итоге придется искать какое-то решение и разработчикам движкам.

Изменено пользователем Ginko
Ссылка на сообщение
Поделиться на других сайтах

Ginko,

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

Ссылка на сообщение
Поделиться на других сайтах

На втором скриншоте это скорее всего сервис: http://vimeo.com/ :rolleyes:

Ссылка на сообщение
Поделиться на других сайтах

WWW.ZEOS.IN, именно он родимый ;)

celsoft, да, возможно это будет верное решение проблемы. Вимео - очень качественный и довольно популярный видеохостинг

Ссылка на сообщение
Поделиться на других сайтах

Ginko,

на vimeo есть возможность вставки без iframe.

На кодом смотрите

Don't like change? Use the old embed code instead
Изменено пользователем - Den -
Ссылка на сообщение
Поделиться на других сайтах

- Den -, я повторюсь: лично я стараюсь читать вспомогательные надписи на сайтах и уж точно обращаю внимание, если привычный код меняется. Собственно, как только начались перемены на ютубе и вимео, я, как раз, просто перешел на "старый" код. Проблема в другом: сайт наполняется пользователями, а вот они, увы, зачастую просто копируют не глядя и потом удивляются, почему их видео не отображается.

Ссылка на сообщение
Поделиться на других сайтах

Den, ему нужно автонаполнение через прожки, постящие не смотрят что и как правильно на сайт постить, они просто тупо суют новости и всё. :D

Как вариант, можно открыть файл /engine/modules/addnews.php, найти запрос:

$db->query( "INSERT INTO " . PREFIX . "_post (date, autor, ...
Перед публикацией проверить наличие фрейма:
preg_match('<iframe[^>]*src=(.*?)[^>]*>.*?</iframe>',$short_story,$f1);

preg_match('<iframe[^>]*src=(.*?)[^>]*>.*?</iframe>',$full_story,$f2);
Если фрейм присутствует, то заменить на стандартный прлеер:
if (isset($f1[1]) && trim($f1[1])!='') preg_replace('|'.$f1[0].'|smi',$player,$short_story);

if (isset($f2[1]) && trim($f2[1])!='') preg_replace('|'.$f2[0].'|smi',$player,$short_story);

Для снижения нагрузки, можно более лучший вариант продумать, например, сначала задать поиск фреймов, а потом регуляркой уже обходить и т.д. Это просто для примера.

Ссылка на сообщение
Поделиться на других сайтах

zgr, ох как интересно!

А можно последний абзац подробнее? Я, кхм, крайне слаб в програмировании.

З.Ы. шутко про автонаполнение оценил ;)

Изменено пользователем Ginko
Ссылка на сообщение
Поделиться на других сайтах

А можно последний абзац подробнее? Я, кхм, крайне слаб в програмировании.

Тогда и не заморачивайтесь :D

Напишите свой плеер, который будет заменен, если кто вам фрейм отправит и всё:

if (isset($f2[1]) && trim($f2[1])!='') {

$f2[1] = trim($f2[1]);

$player = <<<HTML

    Здесь код плеера.

HTML;

unset($f2[1]);

}
Путь:
src="trim($f2[1])";

Ссылка на сообщение
Поделиться на других сайтах

а стандартный длешный можно подставить?

и еще: вот, допустим, некий злодей захочет какойто вредоносный код встроить через ифрейм, как поведет себя написанная Вами конструкция и сайт в целом?

Ссылка на сообщение
Поделиться на других сайтах

как поведет себя написанная Вами конструкция и сайт в целом?

Если формат совпадет, то заменит зловредный код на плеер, т.е. ничего не произойдет, вирус не запустится так, но лучше услышать ответ от более опытного программиста.

а стандартный длешный можно подставить?

Хоть что можете написать, это не важно, это всего лишь HTML.

П.С. Чтобы наверняка только Тюбик заменял, то можно маску так написать:

preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?youtube.com/.*?)[^>]*>.*?</iframe>',$short_story,$f1);

Теперь уже точно будет только Тюбик переписан.

Изменено пользователем zgr
Ссылка на сообщение
Поделиться на других сайтах

откуда копировать его код?

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

Ссылка на сообщение
Поделиться на других сайтах

ага, спасибо.

В общем, если я правильно понял, то пошагово надо делать так:

открыть файл /engine/modules/addnews.php

найти запрос:

$db->query( "INSERT INTO " . PREFIX . "_post (date, autor, ...

Добавить выше

preg_match('<iframe[^>]*src=(.*?)[^>]*>.*?</iframe>',$

short_story,$f1);

preg_match('<iframe[^>]*src=(.*?)[^>]*>.*?</iframe>',$

full_story,$f2);

или же, если разрешить вставку только для вимео и ютуба, то

preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?youtube.

com/.*?)[^>]*>.*?</iframe>',$short_story,$f1);

preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?youtube.

com/.*?)[^>]*>.*?</iframe>',$full_story,$f1);

preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?vimeo.

com/.*?)[^>]*>.*?</iframe>',$short_story,$f1);

preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?vimeo.

com/.*?)[^>]*>.*?</iframe>',$full_story,$f1);

Если фрейм присутствует, то заменить на стандартный плеер:

if (isset($f1[1]) && trim($f1[1])!='') preg_replace('|'.$f1[0].'|smi',$player,$short_story);

if (isset($f2[1]) && trim($f2[1])!='') preg_replace('|'.$f2[0].'|smi',$player,$full_story);

Я верно написал?

Ссылка на сообщение
Поделиться на других сайтах

Я верно написал?

да, верно. Сам плеер только забыли :) Перед:

if (isset($f1[1]) && trim($f1[1])!='') preg_replace('|'.$f1[0].'|smi',$player,$short_story);
Вставьте (см. выше сообщение):
if (isset($f2[1]) && trim($f2[1])!='') {

$f2[1] = trim($f2[1]);

$player = <<<HTML

    Здесь код плеера.

HTML;

unset($f2[1]);

}
Это для $full_story, для $short_story тоже так, только с переменной $f1[1]. HTML-код плеера можно любой написать, какой нужен. Можно совместить 2 сервиса, чтоб нагрузку снизить, т.е. вместо:
preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?youtube\.com/.*?)[^>]*>.*?</iframe>',$short_story,$f1);

preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?youtube\.com/.*?)[^>]*>.*?</iframe>',$full_story,$f2);


preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?vimeo\.com/.*?)[^>]*>.*?</iframe>',$short_story,$f1);

preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?vimeo\.com/.*?)[^>]*>.*?</iframe>',$full_story,$f2);
можно так:
preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?(?:vimeo|youtube)\.com/.*?)[^>]*>.*?</iframe>',$short_story,$f1);

preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?(?:vimeo|youtube)\.com/.*?)[^>]*>.*?</iframe>',$full_story,$f2);

Это тоже самое, но короче.

Ссылка на сообщение
Поделиться на других сайтах

zgr, что то я определенно где-то подтупил, пытаясь запихнуть в дефолтный плеер:

//iframe

preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?(?:vimeo|youtube)\.com/.*?)[^>]*>.*?</iframe>',$short_story,$f1);


preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?(?:vimeo|youtube)\.com/.*?)[^>]*>.*?</iframe>',$full_story,$f2);



if (isset($f1[1]) && trim($f1[1])!='') {

$f1[1] = trim($f1[1]);

$player = <<<HTML


<!--dle_video_begin--><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="Player-418a2b4aed9017952e663582ff363929" height="338" width="95%">

				<param name="movie" value="src="trim($f1[1])";&amp;defaultMedia=1&amp;showPlayButton=true&amp;playOnStart=false&amp;backgroundBarColor=0x1A1A1A&amp;btnsColor=0xFFFFFF&amp;outlineColor=0x666666&amp;outputBkgColor=0x1A1A1A&amp;outputTxtColor=0x999999&amp;loadingBarColor=0x666666&amp;loadingBackgroundColor=0xCCCCCC&amp;progressBarColor=0x000000&amp;volumeBackgroundColor=0x666666&amp;volumeStatusBarColor=0x000000">

				<param name="allowFullScreen" value="true">

				<param name="quality" value="high">


				<param name="bgcolor" value="#000000">

				<param name="wmode" value="opaque">

				<embed src="trim($f1[1])";&amp;defaultMedia=1&amp;showPlayButton=true&amp;playOnStart=false&amp;backgroundBarColor=0x1A1A1A&amp;btnsColor=0xFFFFFF&amp;outlineColor=0x666666&amp;outputBkgColor=0x1A1A1A&amp;outputTxtColor=0x999999&amp;loadingBarColor=0x666666&amp;loadingBackgroundColor=0xCCCCCC&amp;progressBarColor=0x000000&amp;volumeBackgroundColor=0x666666&amp;volumeStatusBarColor=0x000000" quality="high" bgcolor="#000000" wmode="opaque" allowfullscreen="true" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" align="middle" height="338" width="95%">

				</object><!--dle_video_end-->


HTML;

unset($f1[1]);

}




if (isset($f2[1]) && trim($f2[1])!='') {

$f2[1] = trim($f2[1]);

$player = <<<HTML


<!--dle_video_begin--><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="Player-418a2b4aed9017952e663582ff363929" height="338" width="95%">

				<param name="movie" value="src="trim($f2[1])";&amp;defaultMedia=1&amp;showPlayButton=true&amp;playOnStart=false&amp;backgroundBarColor=0x1A1A1A&amp;btnsColor=0xFFFFFF&amp;outlineColor=0x666666&amp;outputBkgColor=0x1A1A1A&amp;outputTxtColor=0x999999&amp;loadingBarColor=0x666666&amp;loadingBackgroundColor=0xCCCCCC&amp;progressBarColor=0x000000&amp;volumeBackgroundColor=0x666666&amp;volumeStatusBarColor=0x000000">

				<param name="allowFullScreen" value="true">

				<param name="quality" value="high">


				<param name="bgcolor" value="#000000">

				<param name="wmode" value="opaque">

				<embed src="trim($f2[1])";&amp;defaultMedia=1&amp;showPlayButton=true&amp;playOnStart=false&amp;backgroundBarColor=0x1A1A1A&amp;btnsColor=0xFFFFFF&amp;outlineColor=0x666666&amp;outputBkgColor=0x1A1A1A&amp;outputTxtColor=0x999999&amp;loadingBarColor=0x666666&amp;loadingBackgroundColor=0xCCCCCC&amp;progressBarColor=0x000000&amp;volumeBackgroundColor=0x666666&amp;volumeStatusBarColor=0x000000" quality="high" bgcolor="#000000" wmode="opaque" allowfullscreen="true" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" align="middle" height="338" width="95%">

				</object><!--dle_video_end-->


HTML;

unset($f2[1]);

}


if (isset($f1[1]) && trim($f1[1])!='') preg_replace('|'.$f1[0].'|smi',$player,$short_story);

if (isset($f2[1]) && trim($f2[1])!='') preg_replace('|'.$f2[0].'|smi',$player,$full_story);



//iframe

Помогите, пожалуйста.

Ссылка на сообщение
Поделиться на других сайтах

zgr, что то я определенно где-то подтупил, пытаясь запихнуть в дефолтный плеер:

Ничё, бывает :) Просто не изобретайте уже изобретённый велосипед и всё будет работать ;)

В конструкции:

$player = <<<HTML

    Здесь код плеера.

HTML;
Функции php не работают, поэтому все функции нужно вынести за пределы нее:
$f2[1] = trim($f2[1]);
Если массивы не будут просто так работать, то обрамляем их фигурными скобками:
$player = <<<HTML

    Здесь код плеера.

    echo {arr['arr']};

HTML;
А функции пишем так:
$f2[1] = trim($f2[1]);

$player = <<<HTML

    Здесь код плеера.

    echo {$f2[1]};

HTML;

И всё должно работать. См. пример выше, специально же написал для ориентации, как надо, а вы всё по-своему пишите ;)

Изменено пользователем zgr
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...