严重重音混淆XSS Attack无法在iframe中进行转义

时间:2017-09-28 12:52:06

标签: 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攻击,这个问题在<img src"$str">上工作正常,但当我将该元素交换为<iframe src"$str">JS使用以下

执行
$attr = clean("javascript:alert(\"RSnake says, 'XSS'\")");
$str = "<iframe src=\"$attr\">";

但对于$str = "<img src=\"$attr\">";来说,这是安全的。

如何处理此漏洞?

我所做的是为这个功能添加额外的部分

function clean($str) {  
$str = htmlspecialchars(strip_tags(trim(mb_convert_encoding($str, 'UTF-8', 'UTF-8'))), ENT_QUOTES, 'UTF-8');
$str = htmlentities($str, ENT_QUOTES);
return $str;
}

1 个答案:

答案 0 :(得分:-1)

尝试以下方法:

<?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);

它将基于URL作为URL清理字符串,如果不是,则输出false