У меня есть плагин WordPress, который читает канал RSS и выводит его в браузер на странице администратора. В плагине он использует стандартный шаблон feed.php из WordPress (wp-includes / feed.php), который использует SimplePie для получения канала через WordPress.
Страница перебирает элементы фида и использует $item->get_title()
а также $item->get_content()
выводить заголовок и содержимое элемента через прямое эхо на страницу.
У меня был пользователь, который связался со мной, чтобы сообщить, что на его сайте был проведен аудит безопасности, и он не прошел, потому что мы использовали $item->get_content()
и не экранируют его перед выводом в браузер, и это XSS-уязвимость, потому что HTML читается с веб-сайта поставщика и его необходимо экранировать.
Это правильно?
Во всей документации по использованию get_content()
функции, они показывают эхо $item->get_content()
Результаты.
Может кто-то пролить свет на это, чтобы я мог лучше решить эту проблему либо с командой аудита безопасности и / или с пользователем, либо корректно обновить плагин, если его нужно экранировать.
Спасибо!
дон
Аудит не прав. SimlePie делает избежать содержимого внутри. Если вы посмотрите на источник класса SimplePie, вы увидите это свойство, которое определяет теги, которые будут удалены:
public $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
Так <script>
теги удаляются — поэтому XSS-атака невозможна.
Это поведение по умолчанию для SimplePie, поэтому, за исключением случаев, когда вы намеренно приказали ему работать в быстром режиме, вызвав: $feed->set_stupidly_fast(true)
(как видите, имя функции говорит само за себя :)) или путем вызова $feed->strip_htmltags(true)
; он будет работать в безопасном режиме.
Из документации SimplePie:
SimplePie защищает от вредоносных каналов путем очистки данных.
Других решений пока нет …