检查URL是否包含禁止的网站

时间:2014-01-10 23:08:24

标签: php string security filter

我有这个:

$badWords = array("ban","bad","user","pass","stack","name","html");
$string = 'http://rpmrush.com/uploads/bangalleries/51/original/5e17a20aafe8799843305b7663e6683eda7b3eae.jpg';

$matches = array();
$matchFound = preg_match_all(
                "/\b(" . implode($badWords,"|") . ")\b/i", 
                $string, 
                $matches
              );

if ($matchFound) {
    $return['bannedURL'] = true;
    echo json_encode($return);
    die();
}

当字符串只是被禁止的单词之一时,它可以正常工作。

在我的网站上,我有一个功能,用户可以输入图片网址并添加,但是要阻止用户放置非法等图像(色情等),还要使用我的服务器作为主机,我想要他们的图片创建成人网站等列表,然后检查输入网址。

上面的代码只检查字符串是否完全匹配,如果字符串的一部分匹配,如何更改它以使其工作?

2 个答案:

答案 0 :(得分:0)

strpos()就是你要找的东西。

了解更多here, question #6284553 (Using an array as needles in strpos)。很确定接受的答案是有用的。

答案 1 :(得分:0)

我没有直接看到为什么你的代码不起作用。我想是的。这确实有效:

$badWords = array("ban","bad","user","pass","stack","name","html");
$string = 'http://rpmrush.com/uploads/ban/galleries/51/original/5e17a20aafe8799843305b7663e6683eda7b3eae.jpg';

$matchFound = preg_match(
                "/\b(" . implode($badWords,"|") . ")\b/i", 
                $string, 
                $matches
              );

if ($matchFound) {
    echo "YOU ARE BAD! --> " . $matches[0] ;
}
else {
    echo "You're good to go!";
}

可能是什么问题是\ b:如果你遗漏了\ b,你​​也会得到一个与禁令的bangalleries匹配。