Как мне разрешить безопасно вставлять видео html на сайт?
У меня есть php-приложение, в котором мы позволяем каждому пользователю иметь "публичную страницу", которая показывает их видео. У нас есть текстовое поле ввода, где они могут указать html-код встраиваемого видео. Проблема, с которой мы сталкиваемся, заключается в том, что, если мы возьмем этот ввод и сразу отобразим его на странице как есть, сюда можно вставить все виды сценариев, что приведет к очень небезопасной системе.
Мы хотим разрешить встраивание кода со всех сайтов, но, поскольку они отличаются по своей структуре, становится трудно следить за тем, как каждый из них структурирован.
Какие подходы люди использовали для решения этого сценария? Есть ли сторонние скрипты, которые делают это для вас?
3 ответа
Подумайте об использовании какого-либо псевдо-шаблона, который использует преимущества oEmbed. oEmbed - это безопасный способ ссылки на видео (как администратор контента, вы не разрешаете прямое встраивание, а скорее ссылки на встраиваемый контент).
Например, вы можете написать парсер, который ищет что-то вроде:
[embed]http://oembed.link/goes/here[/embed]
Затем вы могли бы использовать одну из многих библиотек PHP oEmbed для запроса ресурса по предоставленной ссылке и заменить псевдо-код для вставки реальным кодом для вставки.
Надеюсь это поможет.
Наилучшим подходом было бы иметь разрешенный белый список и удалить все остальное. Также было бы необходимо отфильтровать все атрибуты этого тега, чтобы удалить атрибут "onsomething".
Для правильного разбора вам нужно использовать синтаксический анализатор XML. XMLReader и XMLWriter прекрасно с этим справятся. Вы читаете данные из XMLReader, если тег находится в белом списке, вы записываете его в XMLWriter. В конце процесса у вас есть проанализированные данные в XMLWritter.
Пример кода этого будет этот сценарий. Имеет в белом списке тег test
а также video
, Если вы дадите ему следующие данные:
<z><test attr="test"></test><img />random text<video onclick="evilJavascript"><test></test></video></z>
Это выведет это:
<div><test attr="test"></test>random text<video><test></test></video></div>
Я хотел бы, чтобы пользователи вводили URL-адрес видео. Оттуда вы можете вставить правильный код самостоятельно. Им легче и безопаснее.
Если вы столкнулись с неизвестным URL, просто войдите в него и добавьте код, необходимый для его поддержки.