我有这种代码的和平来验证提交内容:
// 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禁止的域名。
我真的希望有人能给我一些关于如何实现这一点的线索。
此致 达尼
答案 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吗?