确保给定的字符串包含iframe或object标记

时间:2016-05-30 12:13:31

标签: php

我们正在添加用户可以添加的可嵌入内容。这开辟了很多漏洞,我想开始尽量减少潜在的伤害。

首先,我需要确保嵌入字符串以<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...';
}

我如何攻击这个?在旁注中,我应该废弃对象嵌入吗?他们感到非常脆弱......

1 个答案:

答案 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!!';      
}

希望它有所帮助。