Php 严重重音混淆XSS攻击可以';我不能逃之夭夭

Php 严重重音混淆XSS攻击可以';我不能逃之夭夭,php,xss,Php,Xss,我在这里有一个清除字符串的函数 function clean($str) { $str = htmlspecialchars(strip_tags(trim(mb_convert_encoding($str, 'UTF-8', 'UTF-8'))), ENT_QUOTES, 'UTF-8'); return $str; } 现在,我检查了可能的XSS攻击,这一次在上运行正常,但是当我将元素交换到 JS是使用以下命令执行的 $attr = clean("javascript:alert(\"

我在这里有一个清除字符串的函数

function clean($str) {  
$str = htmlspecialchars(strip_tags(trim(mb_convert_encoding($str, 'UTF-8', 'UTF-8'))), ENT_QUOTES, 'UTF-8');
return $str;
}
现在,我检查了可能的XSS攻击,这一次在
上运行正常,但是当我将元素交换到
JS
是使用以下命令执行的

$attr = clean("javascript:alert(\"RSnake says, 'XSS'\")");
$str = "<iframe src=\"$attr\">";
请尝试以下操作:

<?php

function clean($url) {
    if (!filter_var($url, FILTER_VALIDATE_URL))
        return false;
    return $url;
}
$attr = clean("javascript:alert(\"RSnake says, 'XSS'\")");
$str = "<iframe src=\"$attr\">";
// $str = "<img src=\"$attr\">";

echo($str);

是的,我试图解决这个问题,但我记得有人说过,同时使用htmlspec和htmllent会在某种转换过程中产生问题,就像它会将
转换为
或者something@AXAI如果只想显示字符串,这样就没有问题了,但如果您想将字符串恢复为默认形式,可能会导致一些问题。否则就可以了。HTML解析器将把实体转换回常规字符,然后再将它们传递给URL解析器,这样根本没有帮助。
htmlspecialchars())
-双重编码没有帮助。它只会破坏数据。@Quentin by
破坏数据
这是否意味着它会破坏任何不干净的字符串?比如,如果
src=”“
我希望版主只放置有效的URL,比如
www.domain.com/something.php?sa=&pa=
和任何怀疑被掩埋的内容,或者它会破坏整个元素的形成?
<?php

function clean($url) {
    if (!filter_var($url, FILTER_VALIDATE_URL))
        return false;
    return $url;
}
$attr = clean("javascript:alert(\"RSnake says, 'XSS'\")");
$str = "<iframe src=\"$attr\">";
// $str = "<img src=\"$attr\">";

echo($str);