Предотвратить внедрение Javascript в атрибут данных

У меня есть сценарий, который извлекает текст из API и устанавливает его в качестве всплывающей подсказки в моем HTML.

<div class="item ttip" data-html="<?php echo $obj->titleTag;?>">...</div>

API позволяет вводить html и javascript на их стороне для этого поля.

Я пробовал это $obj->titleTag = htmlentities(strip_tags_content($this->channel->status)));

Теперь у меня есть пользователь, который ввел следующее (или подобное, он заблокирован, теперь я не могу проверить это снова):

\" <img src="xx" onerror=window.location.replace(https://www.youtube.com/watch?v=IAISUDbjXj0)>

который не попадает под вышеупомянутое.
Я мог бы str_replace материал window.location, но это кажется грязным.
Какой будет правильный подход? Я читаю много «белых списков», но я не понимаю концепцию такого случая.

// РЕДАКТИРОВАТЬ strip_tags_content приходит отсюда: https://php.net/strip_tags#86964

0

Решение

Ну, теперь вы заменяете не теги, а код внутри тегов. Вам нужно разрешить определенные атрибуты в вашем коде, а не удалять теги, так как у вас есть только один тег;)

То, что вы хотите сделать, это проверить наличие привязанных обработчиков в JS, полный список здесь, а затем удалите их, если что-то содержит что-то вроде onerror или так

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector