これは保証されていませんが、私の軽量ソリューションを作ることを試みました。なぜなら、HTMLの精製器(http://htmlpurifier.org)は私の小さな目標のために数少ないからです。
<?
//href="javascript:
//style="....expression
//style="....behavior
//<script
//on*="
$str = '
asd
<a STyLE="asd; expression" hRef=" javascript:" onx="asd">asd</a>
asd
<code><a href="javascript:">asd</a></code>
<scr<script></script>ipt ... >asd</script>
<a style="hey:good boy;" href="javascript:">asd</a>';
function stripteaser($str, $StripHTMLTags = true, $AllowableTags = NULL) {
$str = explode('<code>', $str);
$codes = array();
if (count($str) > 1) {
foreach ($str as $idx => $val) {
$val = explode('</code>', $val);
if (count($val) > 1) {
$uid = md5(uniqid(mt_rand(), true));
$codes[$uid] = htmlentities(array_shift($val), ENT_QUOTES, 'UTF-8');
$str[$idx] = "##$uid##" . implode('', $val);
}
}
}
$str = implode('', $str);
while (stripos($str, '<script') !== false) {
$str = str_ireplace('<script', '<script', $str);
}
$rptjob = function(&$str, $regexp) {
while (preg_match($regexp, $str, $matches)) {
$str = str_ireplace($matches[0], htmlentities($matches[0], ENT_QUOTES, 'UTF-8'), $str);
}
};
$rptjob($str, '/href[\s\n\t]*=[\s\n\t]*[\"\'][\s\n\t]*(javascript:|data:)/i'); //href = "javascript:
$rptjob($str, '/style[\s\n\t]*=[\s\n\t]*[\"][^\"]*expression/i'); //style = "...expression
$rptjob($str, '/style[\s\n\t]*=[\s\n\t]*[\'][^\']*expression/i'); //style = '...expression
$rptjob($str, '/style[\s\n\t]*=[\s\n\t]*[\"][^\"]*behavior/i'); //style = "...behavior
$rptjob($str, '/style[\s\n\t]*=[\s\n\t]*[\'][^\']*behavior/i'); //style = '...behavior
$rptjob($str, '/on\w+[\s\n\t]*=[\s\n\t]*[\"\']/i'); //onasd = "
if ($StripHTMLTags)
$str = strip_tags($str, $AllowableTags);
foreach ($codes as $idx => $code) {
$str = str_replace("##$idx##", $code, $str);
}
return $str;
}
echo stripteaser($str);
exit;
?>
:この月のためのD 汚いコードで 私の目標は、より多くのようにXSSの試みのための結果は、このコードの汚いものがたくさんあることでしょうが、私はそれが安全になると思う防止XSSと何にもあります家庭や...しかし、それは良い仕事ではありません(条件がいくつかのCPU時間を取る間、多くの)しかし、私の小さな目標のためのhtml浄水器のような別の巨大なコンポーネントよりも優れています。
RESULTは次のようになります。
asd
<a STyLE="asd; expression" hRef=" javascript:" onx="asd">asd</a>
asd
<a href="javascript:">asd</a>
<scri<script></script>pt ... >asd</script>
<a style="hey:good boy;" href="javascript:">asd</a>
私はCSSの表現への経験がないが、私は曲がったコーナーのためにIEでJS VMLのために使用しての行動について知っているので、危険なことができます。 最終的には保証も一切ありません。
私はそれはいくつかの友人 のために有用であることを願って;)
他のどの言語でも同じようにPHPで行うことができます。そして、正規表現を使用することはできません。 – AndreKR