php中的白名单网址

时间:2016-05-06 10:05:59

标签: php url preg-match

我们正在开发一个聊天应用程序,学生和老师可以通过聊天通信进行交流,现在网站上有作业,如果学生有与之相关的问题,他可以将该作业的网址包含在他的留言中,现在我们为了教师和学生的安全原因,我们希望将某些网址列入白名单。

这里应该如何运作

消息:与此作业有关的问题https://school.com/assignment/1425

链接可以点击,因为它已列入白名单

消息:此作业存在一些问题https://schoool.com/assignment/1425

此链接有一个额外的def a.eval(&block) instance_eval &block end a.eval { @a = 1 } => 1 a.instance_variables => [:@a] ,在我们的案例中应标记为垃圾邮件,我们将删除该链接

我们无法知道如何解决这个问题,我在下面提到了我们期望的输出

o 白名单

https://school.com 白名单

https://www.school.com 白名单

http://school.com 白名单

http://wwwschool.com 白名单

school.com 白名单

www.school.com 垃圾邮件网址

www.schoool.com 垃圾邮件网址

https://www.schoool.com 垃圾邮件网址

www.schoool.com 垃圾邮件网址

http://www.schoool.com 垃圾邮件网址

我们当前的代码

schoool.com

此代码的问题是,它是像

这样的白名单网址

function filter_url($string = null) { $url = '/(((https?:\/\/)?www)?\.?[a-z0-9]+\.[a-z0-9]+[a-z0-9\-\/?&#%=]+)/'; $whitelist = '/\b(school)\b/'; if(preg_match($url,$string,$output)) { if(preg_match($whitelist,$output[0])) { // whitelisted string return $string; } else { return null; } } }

school.stealpassword.com

3 个答案:

答案 0 :(得分:2)

为要允许的域定义白名单,然后使用内置的parse_url php函数从URL中提取域并检查白名单。

$testLinks = [
    'https://school.com',
    'https://www.school.com',
    'http://school.com',
    'http://wwwschool.com',
    'school.com',
    'www.school.com',
    'www.schoool.com',
    'https://www.schoool.com',
    'www.schoool.com',
    'http://www.schoool.com',
    'schoool.com'
];

$whitelistDomains = [
    'school.com'
];

foreach($testLinks as $link){
    print $link . ' is ' . (checkUrl($link,$whitelistDomains)===TRUE? 'valid':'spam'). PHP_EOL;
}


function checkUrl($link,$whitelistDomains)
{

    $urlData = parse_url($link);

    $domain = isset($urlData['host'])? $urlData['host'] : $link;

    if (in_array($domain,$whitelistDomains)){
        return true;
    }
    else{
        return false;
    }   

}

将输出

https://school.com is valid
https://www.school.com is spam
http://school.com is valid
http://wwwschool.com is spam
school.com is valid
www.school.com is spam
www.schoool.com is spam
https://www.schoool.com is spam
www.schoool.com is spam
http://www.schoool.com is spam
schoool.com is spam

www.school.comwwwschool.com添加到白名单将输出以下内容

https://school.com is valid
https://www.school.com is valid  // this becomes valid
http://school.com is valid
http://wwwschool.com is valid // this becomes valid
school.com is valid
www.school.com is valid
www.schoool.com is spam
https://www.schoool.com is spam
www.schoool.com is spam
http://www.schoool.com is spam
schoool.com is spam

答案 1 :(得分:1)

这个怎么样?

preg_match("/(([h|H]ttps?:\/\/)?[w|W]ww)?\.?([s|S]chool\.com.*)/", $input, $output);

http://www.phpliveregex.com/p/fAU

答案 2 :(得分:0)

所有列入白名单的网址都有" school.com"共同的。所以将整个字符串添加到正则表达式。