我们正在添加用户可以添加的可嵌入内容。这开辟了很多漏洞,我想开始尽量减少潜在的伤害。
首先,我需要确保嵌入字符串以<iframe>
或<object>
开头,并以</iframe>
或</object>
发现这个: https://stackoverflow.com/questions/28118798/how-can-i-check-a-string-is-iframe-tag-by-php-functions
但是我需要改写它,而我却不知所措。
$string = '<iframe src="sourceurl"></iframe>';
$test = strpos($string,'<iframe');
if (!empty($test)) {
echo 'That has an iframe!!';
} else {
echo 'There's no iframe in there...';
}
我如何攻击这个?在旁注中,我应该废弃对象嵌入吗?他们感到非常脆弱......
答案 0 :(得分:0)
这种情况正在发生,因为<iframe
位于$string
的开头,意味着strpos
将返回0,导致<ifrma
从位置0开始
并且因为empty(0)
将返回true
(意思是空的),这在我们的原因中是不正确的,因为在我们的情况下0表示某事。
要解决此问题,只需将!empty($test)
替换为$test >= 0
,例如:
$string = '<iframe src="sourceurl"></iframe>';
$test = strpos($string,'<iframe');
//in this case $test = 0 cause it is at the start of the string
if ($test >= 0) {
echo 'That has an iframe!!';
} else {
echo 'There\'s no iframe in there...';
}
// you can even use Regular Expressions
// to ensure that your string starts with <iframe , here is an example :
// ^ : means start with.
if(preg_match('/^<iframe /',$string)){
echo 'That has an iframe using Regular Expressions!!';
}
希望它有所帮助。