需要检查整个域而不是单个URL

时间:2012-04-09 16:20:37

标签: php mysql variables

我有这种代码的和平来验证提交内容:

 // Check to see if the URL is banned.
         $array=parse_url($contenturl2);
          $domaincheck = $array['host'];
          $domaincheck1 = str_replace("www.", "", $domaincheck);
          $domaincheck2 = "http://".trim($domaincheck1);
          $domaincheck3 = "http://www.".$domaincheck2;


          $query = "select id from banned where (url = '$contenturl' || url = '$contenturl2' || url = '$domaincheck' || url = '$domaincheck1' || url = '$domaincheck2' || url = '$domaincheck3') && url != ''";
          $result = mysql_query($query);
            if (mysql_num_rows($result)>0)
            {
            $_SESSION['submitstatus'] = "<div class=success><b>Sorry! This domain is banned from our network</div>";
            header('Location: '.$frompage.'');
            exit;
            }

在某些时候它的工作,但不是因为它被曝光,因为如果我将“domain.com/content.html”添加到禁令列表,当我添加域名时,网址将被禁止,但不会被域名禁止禁止列表中的“domain.com”我希望此代码禁止此域下的所有网址。

我不会在这里发布整个文件,因为它非常大,但如果你们要求这样做,我可以发帖。

变量$ contenturl2引用我发布的摘录有以下变量:

$ contenturl = clean_string($ _ POST ['contenturl']);

$ contenturl2 = strtolower($ contenturl);

这个$ contenturl抓住了从sql禁止的域名。

我真的希望有人能给我一些关于如何实现这一点的线索。

此致 达尼

2 个答案:

答案 0 :(得分:0)

以下内容应该有效:

// Check to see if the URL is banned.
$array=parse_url($contenturl2);
$domaincheck = $array['host'];

$query = "select id from banned where url LIKE '%" . $domaincheck . "%'";
$result = mysql_query($query);
if (mysql_num_rows($result)>0)
{
    $_SESSION['submitstatus'] = "<div class=success><b>Sorry! This domain is banned from our network</div>";
    header('Location: '.$frompage.'');
    exit;
}

这应该匹配域名的所有变体。注意:您必须在要匹配的字符周围添加百分号。

答案 1 :(得分:0)

你的方案打破了你收到的网址并将其与数据库中的内容进行比较,这有点错误。

我会使用parse_url,它允许您只从您收到的URL中获取您关心的部分 - 将其重建为您想要的任何部分,然后检查数据库。< / p>

您当前的方案中缺少许多重要的逻辑。例如,如果某个域被阻止,是否应阻止所有子域?即。如果mydomain.com被阻止应该阻止www.mydomain.com吗?