0

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

 // 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”到禁止列表我希望此代码禁止此域下的所有 url。

我不会在这里发布整个文件,因为它真的很大,但是如果你们要求,我可以发布它。

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

$contenturl = clean_string($_POST['contenturl']);

$contenturl2 = strtolower($contenturl);

Whis $contenturl 抓取被 sql 禁止的域。

我真的希望有人能给我一个关于如何完成这个的线索。

真诚的丹妮

4

2 回答 2

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;
}

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

于 2012-04-09T16:33:16.720 回答
0

您的方案有很大的错误,用于分解您收到的网址并将其与数据库中的内容进行比较。

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

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

于 2012-04-09T16:45:37.680 回答