阻止数据属性中的Javascript注入


Prevent Javascript Injection in data attribute

我有一个脚本,它从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的东西,但那看起来很脏。什么是正确的方法?我读了很多"白名单",但我不明白这种情况的概念。

//EDIT strip_tags_content来自此处:https://php.net/strip_tags#86964

好吧,现在要替换的不是标签,而是标签中的代码。您需要在代码中允许某些属性,而不是剥离标记,因为其中只有一个标记;(

你想做的是检查JS中绑定的任何处理程序,这里有一个完整的列表,然后如果任何东西包含类似onerror的东西,就删除它们。