body の下のすべてのタグを確認し、スタイル属性があるかどうかを確認して削除したい
$user_submitted_html = "This is Some Text";
$html = '<body>' . $user_submitted_html . '</body>';
$dom = new DOMDocument();
$dom->loadHTML($html_string);
$elements = $dom->getElementsByTagName('body');
foreach($elements as $element) {
foreach($element->childNodes as $child) {
if($child->hasAttribute('style')) {
$child->removeAttribute('style')
}
}
}
テキストだけでなく、タグが含まれていれば問題なく動作$user_submitted_html
しますが、テキストだけの場合はエラーが発生します
Call to undefined method DOMText::hasAttribute()
次に、foreach ループで nodeName を取得します
echo "Node Name: " . $child->nodeName
それは
Node Name = #text
これはどのようなノード名ですか。私は他のノードをエコーしました。それは、私がよく知っている div、span などを与えます。hasAttribute が属していない要素を知りたいので、このように hasAttribute を使用する前に条件を設定できます
if($child->nodeName=="#text") {
continue; // skip to next iteration
}
if($child->hasAttribute('style')) {
.
.
.
またはその他の解決策???
もう 1 つの提案が必要です。からスタイル属性のみを削除するとどうなりますか<div>,<span>,<p> and <a>
。残りのタグがスタイル属性を使用できる場合、xss から安全でしょうか。