У меня есть сценарий, который извлекает текст из 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
Ну, теперь вы заменяете не теги, а код внутри тегов. Вам нужно разрешить определенные атрибуты в вашем коде, а не удалять теги, так как у вас есть только один тег;)
То, что вы хотите сделать, это проверить наличие привязанных обработчиков в JS, полный список здесь, а затем удалите их, если что-то содержит что-то вроде onerror
или так
Других решений пока нет …