簡體   English   中英

如何使用PHP創建URL黑名單?

[英]How can I create a URL blacklist with PHP?

我正在嘗試將腳本中的某些URL列入黑名單。 我想基於主URL阻止所有子域,子文件夾(www和非www版本)等。 即..

subdomain.baddomain.com
baddomain.com/subfolder/file.php
www.baddomain.com/subfolder/file.php

正則表達式是最好的嗎? 如果是這樣,怎么辦?

以下應該可以解決問題:

if(in_array(parse_url($url, PHP_URL_HOST), $blacklist)) {
    //blacklisted addr
}

Corbin的答案只會阻止顯式匹配,這意味着您必須輸入要阻止的每個域/子域組合。 如果您只有兩個域,例如“ www.domain.com”和“ domain.com”,這不是問題。 如果您有數十個,數百個或數千個,那將是一個真正的頭痛。 此功能更加健壯,因為它可以檢查被禁止的域名字符串是否在域名的任何部分中,而且速度也很慢:)。

$bannedDomains = array('banned.com') // blocks top level & subdomains.
function bannedDomain($url, $bannedDomains) {
  $domain = parse_url($url, PHP_HOST_URL);
  foreach($bannedDomains as $bannedDomain) {
     if (strpos($domain, $bannedDomain) !== false) {
      return true;
    }
  }
  return false;
}

這里也有一個警告,因為它是盲字符串匹配,所以您不可能讓某人做類似“ www.banned.com.notbanned.com”這樣的域名,因為被禁止的域名字符串在該域內,那么您最終將屏蔽一個有效的域名。 鑒於存在眾多TLD和子域,因此域匹配和驗證實際上非常困難。

此外,如果您只接受顯式匹配,則將域用作關聯數組中的鍵,然后使用isset()來檢測它們是否存在於禁止列表中會更有效。

$bannedDomains = array(
 'www.banned.com' => true,
 'banned.com' => true
);

function bannedDomain($url, $bannedDomains) {
 $domain = parse_url($url, PHP_HOST_URL);
 return isset($bannedDomains[$domain]);
}

如果您確實需要超級健壯的系統,那么最好使用數據庫內部的查找或使用HTTP服務器的功能。

您不需要正則表達式,需要strpos()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM