Ginko 0 Опубликовано: 30 января 2011 Рассказать Опубликовано: 30 января 2011 Внезапно антигород.ком В последние пару месяцев ведущие видеохостинги стали предлагать для вставки код iframe. По не совсем понятным для меня (простите дилетанта) причинам безопасности этот код не поддерживается плеером движка. В то же время пользователи массового его используют по той простой причине что копируют его не задумываясь. В итоге - плохо всем. Вопрос: как же сделать так, что бы ifrmae обрабатывался движком? Спасибо Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 31 января 2011 Рассказать Опубликовано: 31 января 2011 Никак, вставлять в БД напрямую. Я "за", чтобы скрипты и фреймы вырезало из новостей, поскольку их нельзя контролировать, они часто живут своей жизнью и могут нанести вред как сайту админу, так и пользователям сайта. Нужно искать варианты, типа innerHTML (если так будет работать стандартно), что немного, но безопасней, либо другие способы загрузки, либо просто отказаться от всяких варёзных гамносетей. Ссылка на сообщение Поделиться на других сайтах
Ginko 0 Опубликовано: 31 января 2011 Рассказать Опубликовано: 31 января 2011 Автор zgr, снова спасибо за ответ. Не совсем понял про "гамносети", т.к. вопрос был про видеохостинги YouTube и Vimeo, которые сейчас перешли на iframe. Если использование фреймов такая опасная штука, то не совсем понятна логика этих сервисов. Пользователям ведь не объяснишь, что каждый раз надо использовать "старый код". В тоже время, если они перещли на ифреймы, то, наверное, есть какой-то механизм защиты от нежелательных действий во всяких уютных жежешечках и вордпресах? Что скажет программно-продвинутая общественность? Ссылка на сообщение Поделиться на других сайтах
celsoft 6230 Опубликовано: 31 января 2011 Рассказать Опубликовано: 31 января 2011 Ginko, iframe это HTML тег для загрузки любого контента на свои страницы, с любых других сайтов. И данный загружаемый контент, может быть как полезный так и содержать вирусы. И если разрешить данный тег, то любой может добавить на ваш сайт новости с вирусами, вот и все. Ссылка на сообщение Поделиться на других сайтах
Ginko 0 Опубликовано: 31 января 2011 Рассказать Опубликовано: 31 января 2011 Автор celsoft, я собственно так и понял. Просто в продолжение дискуссии интересуюсь чем себя защищают движки, где эта вставка разрешена. Собственно, почти наверняка ютуб и прочие продолжат пролитику вставки своего кода только через ифрейм, а значит скоро подобный вопрос возникнет у многих. Ссылка на сообщение Поделиться на других сайтах
celsoft 6230 Опубликовано: 31 января 2011 Рассказать Опубликовано: 31 января 2011 Просто в продолжение дискуссии интересуюсь чем себя защищают движки, где эта вставка разрешена Ничем.Собственно, почти наверняка ютуб и прочие продолжат пролитику вставки своего кода только через ифрейм, а значит скоро подобный вопрос возникнет у многих. Ошибаетесь. Действительно популярные видеохостинги такие коды не используют. В контакте исключение. Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 1 февраля 2011 Рассказать Опубликовано: 1 февраля 2011 продолжат пролитику вставки своего кода только через ифрейм С чего вы это взяли? Зашел на Тюбик, там всё по-прежнему. Кликните опции: Включить режим повышенной конфиденциальности Использовать старый код встраивания И вставляйте как обычный флеш, поддерживается сейчас варианты: <object><embed></embed></object> и <iframe></iframe> П.С. Целсофт, теги сломались - в Опере двойные ставятся на форуме. Ссылка на сообщение Поделиться на других сайтах
Ginko 0 Опубликовано: 1 февраля 2011 Рассказать Опубликовано: 1 февраля 2011 Автор Господа, вынужден не согласиться с вами. Вот скрины нынешних ютуба и вимео: Как видите, везде по умолчанию стоит ифрейм. Вариант, предложенный уважаемым zgr не подходит, т.к. контент наполняют сами посетители и, увы, каждому не объяснишь какие галочки где нажимать. Вот такая незадача. У себя на сайте я, пожалуй, прикручу сообщение при добавлении видео, о том, что используются только <embed> коды. Но, боюсь, в конечном итоге придется искать какое-то решение и разработчикам движкам. Ссылка на сообщение Поделиться на других сайтах
celsoft 6230 Опубликовано: 1 февраля 2011 Рассказать Опубликовано: 1 февраля 2011 Ginko, для ютуба в DLE есть собственный тег. По второму скрину непонятно что за сервис, может его также стоит будет добавить в поддержку тегов. Ссылка на сообщение Поделиться на других сайтах
WWW.ZEOS.IN 1161 Опубликовано: 1 февраля 2011 Рассказать Опубликовано: 1 февраля 2011 На втором скриншоте это скорее всего сервис: http://vimeo.com/ Ссылка на сообщение Поделиться на других сайтах
Ginko 0 Опубликовано: 1 февраля 2011 Рассказать Опубликовано: 1 февраля 2011 Автор WWW.ZEOS.IN, именно он родимый celsoft, да, возможно это будет верное решение проблемы. Вимео - очень качественный и довольно популярный видеохостинг Ссылка на сообщение Поделиться на других сайтах
- Den - 32 Опубликовано: 1 февраля 2011 Рассказать Опубликовано: 1 февраля 2011 Ginko, на vimeo есть возможность вставки без iframe. На кодом смотрите Don't like change? Use the old embed code instead Ссылка на сообщение Поделиться на других сайтах
Ginko 0 Опубликовано: 1 февраля 2011 Рассказать Опубликовано: 1 февраля 2011 Автор - Den -, я повторюсь: лично я стараюсь читать вспомогательные надписи на сайтах и уж точно обращаю внимание, если привычный код меняется. Собственно, как только начались перемены на ютубе и вимео, я, как раз, просто перешел на "старый" код. Проблема в другом: сайт наполняется пользователями, а вот они, увы, зачастую просто копируют не глядя и потом удивляются, почему их видео не отображается. Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 1 февраля 2011 Рассказать Опубликовано: 1 февраля 2011 Den, ему нужно автонаполнение через прожки, постящие не смотрят что и как правильно на сайт постить, они просто тупо суют новости и всё. Как вариант, можно открыть файл /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); Для снижения нагрузки, можно более лучший вариант продумать, например, сначала задать поиск фреймов, а потом регуляркой уже обходить и т.д. Это просто для примера. Ссылка на сообщение Поделиться на других сайтах
Ginko 0 Опубликовано: 2 февраля 2011 Рассказать Опубликовано: 2 февраля 2011 Автор zgr, ох как интересно! А можно последний абзац подробнее? Я, кхм, крайне слаб в програмировании. З.Ы. шутко про автонаполнение оценил Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 2 февраля 2011 Рассказать Опубликовано: 2 февраля 2011 А можно последний абзац подробнее? Я, кхм, крайне слаб в програмировании. Тогда и не заморачивайтесь Напишите свой плеер, который будет заменен, если кто вам фрейм отправит и всё: if (isset($f2[1]) && trim($f2[1])!='') { $f2[1] = trim($f2[1]); $player = <<<HTML Здесь код плеера. HTML; unset($f2[1]); } Путь: src="trim($f2[1])"; Ссылка на сообщение Поделиться на других сайтах
Ginko 0 Опубликовано: 2 февраля 2011 Рассказать Опубликовано: 2 февраля 2011 Автор а стандартный длешный можно подставить? и еще: вот, допустим, некий злодей захочет какойто вредоносный код встроить через ифрейм, как поведет себя написанная Вами конструкция и сайт в целом? Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 2 февраля 2011 Рассказать Опубликовано: 2 февраля 2011 как поведет себя написанная Вами конструкция и сайт в целом? Если формат совпадет, то заменит зловредный код на плеер, т.е. ничего не произойдет, вирус не запустится так, но лучше услышать ответ от более опытного программиста. а стандартный длешный можно подставить? Хоть что можете написать, это не важно, это всего лишь HTML. П.С. Чтобы наверняка только Тюбик заменял, то можно маску так написать: preg_match('<iframe[^>]*src=(http\:\/\/[w]{0,3}\.?youtube.com/.*?)[^>]*>.*?</iframe>',$short_story,$f1); Теперь уже точно будет только Тюбик переписан. Ссылка на сообщение Поделиться на других сайтах
Ginko 0 Опубликовано: 2 февраля 2011 Рассказать Опубликовано: 2 февраля 2011 Автор ок... а как тогда правильно перенаправить на стандартный плеер? (или откуда копировать его код?) Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 2 февраля 2011 Рассказать Опубликовано: 2 февраля 2011 откуда копировать его код? Ну, например, откройте свой и/или чужой сайт и посмотрите HTML-код, а можете зайти на сайт производителя и изучить все возможности плеера, каждый автор каждого плеера использует свои собственные настройки и всякие там ноу-хау. Ссылка на сообщение Поделиться на других сайтах
Ginko 0 Опубликовано: 2 февраля 2011 Рассказать Опубликовано: 2 февраля 2011 Автор ага, спасибо. В общем, если я правильно понял, то пошагово надо делать так: открыть файл /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); Я верно написал? Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 2 февраля 2011 Рассказать Опубликовано: 2 февраля 2011 Я верно написал? да, верно. Сам плеер только забыли Перед: 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); Это тоже самое, но короче. Ссылка на сообщение Поделиться на других сайтах
Ginko 0 Опубликовано: 2 февраля 2011 Рассказать Опубликовано: 2 февраля 2011 Автор Спасибо! Буду пробовать Ссылка на сообщение Поделиться на других сайтах
Ginko 0 Опубликовано: 6 февраля 2011 Рассказать Опубликовано: 6 февраля 2011 Автор 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])";&defaultMedia=1&showPlayButton=true&playOnStart=false&backgroundBarColor=0x1A1A1A&btnsColor=0xFFFFFF&outlineColor=0x666666&outputBkgColor=0x1A1A1A&outputTxtColor=0x999999&loadingBarColor=0x666666&loadingBackgroundColor=0xCCCCCC&progressBarColor=0x000000&volumeBackgroundColor=0x666666&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])";&defaultMedia=1&showPlayButton=true&playOnStart=false&backgroundBarColor=0x1A1A1A&btnsColor=0xFFFFFF&outlineColor=0x666666&outputBkgColor=0x1A1A1A&outputTxtColor=0x999999&loadingBarColor=0x666666&loadingBackgroundColor=0xCCCCCC&progressBarColor=0x000000&volumeBackgroundColor=0x666666&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])";&defaultMedia=1&showPlayButton=true&playOnStart=false&backgroundBarColor=0x1A1A1A&btnsColor=0xFFFFFF&outlineColor=0x666666&outputBkgColor=0x1A1A1A&outputTxtColor=0x999999&loadingBarColor=0x666666&loadingBackgroundColor=0xCCCCCC&progressBarColor=0x000000&volumeBackgroundColor=0x666666&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])";&defaultMedia=1&showPlayButton=true&playOnStart=false&backgroundBarColor=0x1A1A1A&btnsColor=0xFFFFFF&outlineColor=0x666666&outputBkgColor=0x1A1A1A&outputTxtColor=0x999999&loadingBarColor=0x666666&loadingBackgroundColor=0xCCCCCC&progressBarColor=0x000000&volumeBackgroundColor=0x666666&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 72 Опубликовано: 7 февраля 2011 Рассказать Опубликовано: 7 февраля 2011 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; И всё должно работать. См. пример выше, специально же написал для ориентации, как надо, а вы всё по-своему пишите Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Архивировано
Эта тема находится в архиве и закрыта для публикации сообщений.