此函数保留html元素但删除属性。
代码:
function clean( $html, $allowable_tags ) {
$dom = new DOMDocument;
$dom->loadHTML( strip_tags( $html, $allowable_tags ), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );
$xpath = new DOMXPath( $dom );
$nodes = $xpath->query( '//@*' );
foreach ( $nodes as $node ) {
$node->parentNode->removeAttribute( $node->nodeName );
}
return $dom->saveHTML();
}
示例:
clean( "<u onclick='alert()'>test</u>", "<u>" );
输出:
<u>test</u>
问题:
这样做时我可以期待什么类型的攻击?我测试了很多不同的东西,看起来足够安全,但也许有些东西我没有考虑到有人能做到。