Nur bestimmten Browsern den Zugriff erlauben

  • Themenstarter Themenstarter Track
  • Beginndatum Beginndatum
T

Track

Guten Morgen,

ich möchte auf einer Webseite gerne nur bestimmten Browsern Zugriff darauf verschaffen, unabhängig von der Version. Dies möglichst als PHP-Code und nicht über eine htaccess-Datei.
Mir ist der Befehl "$_SERVER['HTTP_USER_AGENT']" bewandert, nur weiß ich leider nicht wie ich aus diesen ganzen Informationen nun, z.B. Firefox oder Opera heraus finden kann.
Den Rest müsste ich dann eigentlich über ein Array hinbekommen. Also ich benötige quasi Hilfe bei Herausfilterung des Browsers. War von mir jetzt aber nur ein Überlegungsansatz, also für andere Möglichkeiten/Ideen bin ich sehr offen und auch sehr Dankbar dafür.

Gruß,
Track
 
moin moin,

das kann man mit regulären Ausdrücken ganz gut lösen, allerdings ist dafür ne ganze Menge an Filterung nötig. Ich hänge mal ein Skript an, das die meisten Browser abdecken dürfte.

PHP:
function detectbrowser($data)
{
	if ( $data != "" )
	{
		$browser = array();
		$matched = false;
		$data = strtolower($data);

		# Opera
		if ( preg_match("/(opera)[ ](\d{1,2}\.[\d\w]{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Opera";
			$matched = true;
		}
		elseif ( preg_match("/(opera)\/(\d{1,2}\.[\d\w]{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Opera";
			$matched = true;
		}
		# Netscape > v6
		elseif ( preg_match("/(netscape)\/(\d{1,2}\.\d{1,2})/", $data, $match) && preg_match("/gecko/", $data) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Netscape";
			$matched = true;
		}
		elseif ( preg_match("/(netscape6)\/(\d{1,2}\.\d{1,2})/", $data, $match) && preg_match("/gecko/", $data) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Netscape";
			$matched = true;
		}
		#  Netscape v4.7
		elseif ( preg_match("/mozilla\/4\.7/", $data) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = "4.7";
			$browser["brand"] = "Netscape";
			$matched = true;
		}
		# Netscape v4.5
		elseif ( preg_match("/mozilla\/4\.5/", $data) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = "4.5";
			$browser["brand"] = "Netscape";
			$matched = true;
		}
		# Netscape v4.08
		elseif ( preg_match("/mozilla\/4\.08/", $data) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = "4.08";
			$browser["brand"] = "Netscape";
			$matched = true;
		}
		# Netscape v3.01
		elseif ( preg_match("/mozilla\/3\.01/", $data) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = "3.01";
			$browser["brand"] = "Netscape";
			$matched = true;
		}
		# Microsoft Internet Explorer
		elseif ( preg_match("/(msie)[ ](\d{1,2}\.[\d\w]{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "IE";
			$matched = true;
		}
		#Mozilla
		elseif ( preg_match("/(mozilla)\/(\d{1,2}\.\d{1,3})/", $data, $match) && !preg_match("/grub/", $data) && preg_match("/gecko/", $data) && !preg_match("/msie/", $data) && !preg_match("/netscape/", $data) && !preg_match("/firefox/", $data) && !preg_match("/firebird/", $data) && !preg_match("/chrome/", $data) && !preg_match("/safari/", $data) )
		{
			$exploded_browser = explode("/", $match[0]);
			$browser["type"] = "Browser";
			$browser["brand"] = "Mozilla";
			$exploded_browser = explode("rv:", $data);
			$version = explode(")", $exploded_browser[1]);
			$browser["version"] = $version[0];
			$matched = true;
		}
		#Google Chrome
		elseif ( preg_match("/(chrome)\/(\d{1,2}\.\d{1,2})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Google Chrome";
			$matched = true;
		}
		#Firefox & Firebird & SeaMonkey
		elseif ( preg_match("/(firebird)\/(\d{1,2}\.\d{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Firebird";
			$matched = true;
		}
		elseif ( preg_match("/(firefox)\/(\d{1,2}\.\d{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Firefox";
			$matched = true;
		}
		elseif ( preg_match("/(seamonkey)\/(\d{1,2}\.\d{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "SeaMonkey";
			$matched = true;
		}
		# Phoenix & Indy Library & Safari
		elseif ( preg_match("/(phoenix)\/(\d{1,2}\.\d{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Phoenix";
			$matched = true;
		}
		elseif ( preg_match("/\/(\d{1,2}\.\d{1,2})\.\d{1,3}[ ](safari)\//", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[1];
			$browser["brand"] = "Safari";
			$matched = true;
		}
		elseif ( preg_match("/indy library/", $data) || preg_match("/Internet Explore 5\.x/", $data) )
		{
			$browser["type"] = "Spambot";
			$browser["version"] = "";
			$browser["brand"] = "Spam Bot";
			$matched = true;
		}
		# Galeon & Epiphany & Camino
		elseif ( preg_match("/(galeon)\/(\d{1,2}\.\d{1,3}\.[\d]{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Galeon";
			$matched = true;
		}
		elseif ( preg_match("/(epiphany)\/(\d{1,2}\.\d{1,3}\.[\d]{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Epiphany";
			$matched = true;
		}
		elseif ( preg_match("/(camino)\/(\d{1,2}\.\d{1,3}\.[\d]{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Camino";
			$matched = true;
		}
		# Download-Manager
		elseif ( preg_match("/supercleaner/", $data) )
		{
			$browser["type"] = "Blockingservice";
			$browser["version"] = "";
			$browser["brand"] = "SuperCleaner";
			$matched = true;
		}
		elseif ( preg_match("/flashget/", $data) )
		{
			$browser["type"] = "Downloadservice";
			$browser["version"] = "";
			$browser["brand"] = "FlashGet";
			$matched = true;
		}
		# andere Browser
		elseif ( preg_match("/faaastxchange/", $data) )
		{
			$browser["type"] = "Bannerservice";
			$browser["version"] = "";
			$browser["brand"] = "FaaastXChange";
			$matched = true;
		}
		elseif ( preg_match("/fairad/", $data) )
		{
			$browser["type"] = "Viewerservice";
			$browser["version"] = "";
			$browser["brand"] = "FairAd";
			$matched = true;
		}
		# Java, Hotjava, Lynx und w3m Browser
		elseif ( preg_match("/(Java)\/(\d{1,2}\.\d{1,2})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Java";
			$matched = true;
		}
		elseif ( ( preg_match("/(mozilla)\/(\d{1,2}\.[\d\w]{1,3})/", $data, $match) ) && ( preg_match("/sun/", $data) ) && ( $match[2] <> "4.7") )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "HotJava";
			$matched = true;
		}
		elseif ( preg_match("/(lynx)\/(\d{1,2}\.\d{1,2}\.\d{1,2})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Lynx";
			$matched = true;
		}
		elseif ( preg_match("/w3m/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "W3M";
			$matched = true;
		}
		# Konqueror
		elseif ( preg_match("/(konqueror)\/(\d)/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Konqueror";
			$matched = true;
		}
		elseif ( preg_match("/(konqueror)\/(\d{1,2}\.[\d\w]{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Konqueror";
			$matched = true;
		}
		# Rest
		elseif ( preg_match("/(icab)\/(\d{1,2}\.\d{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "iCab";
			$matched = true;
		}
		elseif ( preg_match("/(icab)\/(\d{1,2}\.\d{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "iCab";
			$matched = true;
		}
		elseif ( preg_match("/(scooter)\-(\d{1,2}\.\d{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Scooter";
			$matched = true;
		}
		elseif ( preg_match("/(webtv)\/(\d{1,2}\.\d{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "WebTV";
			$matched = true;
		}
		elseif ( preg_match("/(links)\/(\d{1,2}\.\d{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "Links";
			$matched = true;
		}
		elseif ( preg_match("/(w3c_validator)\/(\d{1,2}\.\d{1,3})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "W3C Val.";
			$matched = true;
		}
		elseif ( preg_match("/(netpositive)\/(\d{1,2}\.\d{1,2}\.\d{1,2})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "NetPositive";
			$matched = true;
		}
		elseif ( preg_match("/(AmigaVoyager)\/(\d{1,2}\.\d{1,2})/", $data, $match) )
		{
			$browser["type"] = "Browser";
			$browser["version"] = $match[2];
			$browser["brand"] = "AmigaVoyager";
			$matched = true;
		}
		# Besucher nutzt webwasher?
		if ( $matched == false )
		{
			if ( preg_match("/webwasher/", $data) )
			{
				$browser["type"] = "Anonymizer";
				$browser["version"] = "";
				$browser["brand"] = "Webwasher";
				$matched = true;
			}
		}
		# Unbekannt?
		if ( $matched == false )
		{
			$browser["type"] = "Unknown";
			$browser["version"] = "";
			$browser["brand"] = "Unknown";
		}
	}
	if ( $data == "" )
	{
		$browser["version"] = "";
		$browser["brand"] = "Unknown";
	}
	if ( $browser["brand"] == "Netscape" && preg_match("/3\./", $browser["version"]) )
	{
		$browser["type"] = "Unknown";
		$browser["brand"] = "Unknown";
		$browser["version"] = "";
	}
	return $browser;
}

Das Ganze dann einfach so aufrufen:
PHP:
print_r(detectbrowser($_SERVER['HTTP_USER_AGENT']));

mfg
 
Vielen lieben Danke für die Antworten, von euch beiden, haben mich weitergebracht.

Einen schönen Tag wünsche ich euch noch. ; )
 
Man sollte aber noch erwähnen, dass eine Browsererkennung zwar zu statistischen Zwecken halbwegs brauchbar ist, aber wenn es um Zugriffsschutz geht, ist es so sinnvoll wie eine Tür abzuschließen und den Schlüssel stecken zu lassen.
Man muss z.B. im Firefox lediglich in der Konfiguration andere Werte eintragen (about:config) und schon kann man vorgeben ein Internet Explorer zu sein (aber wer will das schon :-D). Und wem selbst das zu kompliziert ist, findet bestimmt auch Plugins, welche den gleichen Zweck erfüllen.
 
Was man vllt noch nennen sollte ist die PHP Funktion get_browser()!

PHP:
<?php
echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";

$browser = get_browser(null, true);
echo "Browser: " . $browser['browser'];
?>

Ausgabe:
Code:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3

Browser: Firefox
 
Als sichere Methode kann man diese Abfrage eh nicht nutzen (was soll man da abschließen, mit jedem php-CURL-script kann man den Browser faken und umleiten)..

Aber wenn es nur ums Abfragen des Browsers geht (ohne version und sonstige Infos), hätte wohl auch ein stristr gereicht.

PHP:
$ask_browser=$_SERVER['HTTP_USER_AGENT'];

if(stristr($ask_browser,"MSIE")){ echo"IE darf nicht";}
if(stristr($ask_browser,"Firefox")){ echo"Zeige Seite";}
//..

Wobei get_browser doch wirklich das Unkomplizierteste ist..

mfg chmee
 
Zurück