我的功能是清理名为
的字符串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;
}
答案 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