УРИ.SafeIframeRegexp не разрешает видео с YouTube с помощью HTMLPurifier

#php #htmlpurifier

Вопрос:

Я пытаюсь разрешить видео на YouTube с помощью HTMLPurifier с помощью этого кода:

 require_once __DIR__.
'/lib/HTMLPurifier/HTMLPurifier.auto.php';

$config = HTMLPurifier_Config::createDefault();
$config - > set('URI.AllowedSchemes', array('data' => true)); //autoriser les image base64
$config - > set('HTML.MaxImgLength', null); //autoriser les dimensions en %
$config - > set('HTML.SafeIframe', true);
$config - > set('URI.SafeIframeRegexp', '%. %'); //allow everything to test
$config - > set('HTML.Trusted', true); //trying
$config - > set('HTML.SafeObject', true); //also trying that

$purifier = new HTMLPurifier($config);
$html = $purifier - > purify($html);
 

Но iframe сохраняются без src .

Комментарии:

1. Просто быстрый облетный комментарий — URI.AllowedSchemes это белый список, поэтому , если вы установите для него значение ['data' => true] , вы запрещаете все другие схемы (например, http, https и т. Д.), Даже если они по умолчанию считаются безопасными. Посмотрим, поможет ли это изменение?

2. Я добавил 'https' => true URI.AllowedSchemes , и это работает, спасибо

3. Тогда я добавлю это в качестве ответа. Рад, что это помогло!

Ответ №1:

URI.AllowedSchemes это белый список, который вы перезаписываете, чтобы включить data сюда только схему:

 $config - > set('URI.AllowedSchemes', array('data' => true));
 

Чтобы иметь возможность использовать URL-адреса YouTube, вам нужно https будет как минимум добавить их в массив.

Как бы то ни было, белый список по умолчанию таков:

 array (
  'http' => true,
  'https' => true,
  'mailto' => true,
  'ftp' => true,
  'nntp' => true,
  'news' => true,
  'tel' => true,
)
 

Не забудьте также удалить эти настройки еще раз:

 $config - > set('HTML.Trusted', true);
$config - > set('HTML.SafeObject', true);
 

И подтяните свое регулярное выражение для URI.SafeIframeRegexp .