web-dev-qa-db-ja.com

wp_ksesはallowedを無視し、すべてを許可します

これが一例です。

$allowedPart = "<a href='http://alink.com'></a>";
$unsafePart = "<h1>A title</h1>";
$unsafePart .= "<script>alert('a script!!!');</script>";

$unsafeString = $allowedPart . $unsafePart;

$allowed = array("a"=>array(
                    "href"=>array()
           ));

$sanitizedString = wp_kses($unsafeString, $allowed);

$sanitizedString$allowedPartと等しくなければなりませんが、何か問題があり、$sanitizedString$unsafeStringと同じままです。

どうしましたか?

=========================

すみません、データベースに保存した後、私はlocation.reload()をしました、そしてその結果textareaで元の内容を維持しました、しかしデータベースでは値はほとんど正しいです。この二次問題は、以下を使用して解決されました。

window.location.href = window.location.href;

しかし、問題があります、 'href'も消えます、なぜですか?

例えば

<a href='http://alink.com'>Link</a><a>Link</a>になります

$allowed = array( 'img'=>array( 'src'=>array(), ));のようなものを試してみてください

<img src='img.png' /><img />になります

Wp_kses()が(hrefやsrcのような)サブ配列内のすべての属性を許可されていないものとして認識し、それらとその内容をフィルタリングしているかのようです。

=========================

単一引用符の代わりに二重引用符を使用すると解決するようです。

$allowed = array( 'img'=>array( 'src'=>array(), ));

<img src="img.png" />

1
longy

wp_ksesCodex )は許可されていないタグを削除しますが、その内容は削除されません。そのため、 "{something}"がある場合、wp_ksesはタグではなくコンテンツのみを削除し、 "{something}"を返します。したがって、これは意図的な動作であり、あなたの問題はバグではないようです。

1
engelen