PHP - "echten" USER-AGENT ermitteln

Benutzer-621

abgemeldet
20 April 2006
744
64
Moin,
Wollte mal fragen ob man mit PHP & Co. vllt. irgendwie den richtigen USER-AGENT ermitteln kann. Ich habe nämlich in meinen Logs folgende Einträge.

PHP:
Anonymisiert durch Steganos Internet Anonym
Anonymisiert durch Steganos Internet Anonym 2006
blank
uû¿v

Die ersten beiden könnte ma ja noch verstehen, dass der UA net ausgegeben werden soll, des dritte evtl. auch noch aber wosn das mit dem vierten?

MfG
 
Mit PHP wirds schwer, kannst aber auch schon aufgrund der HTTP Anfrage einen Fingerprint erstellen. Einfacher wird es jedoch mit Javascript, da kannst du gezielt auf eigenheiten der Browser gehen und somit herausfinden was verwendet wird.
 
Die Sprachen können nur das auswerten, was der UA an den Server schickt. Steht da Müll drin, dann sieht der Server auch nur Müll.
 
Graccem schrieb:
Die Sprachen können nur das auswerten, was der UA an den Server schickt. Steht da Müll drin, dann sieht der Server auch nur Müll.
Wenn du wüsstest was man aus deinem Müll alles über sich Erfahren kann :mrgreen:
 
Anhand des leeren Useragent natürlich nicht viel, aber die restlichen Header können durchaus etwas verraten. (Natürlich ist es auch möglich, alles so zu verfälschen, dass man wirklich nichts mehr erkennen kann, aber nur leerer UA ist dafür nicht immer ausreichend.)
 
Mal ein Beispiel, jeweils ein Request auf localhost:8888/
curl:
Code:
User-Agent: curl/7.15.1 (i386-redhat-linux-gnu) libcurl/7.15.1 OpenSSL/0.9.8a zlib/1.2.3 libidn/0.6.2
Host: localhost:8888
Accept: */*

wget:
Code:
User-Agent: Wget/1.10.2 (Red Hat modified)
Accept: */*
Host: localhost:8888
Connection: Keep-Alive

firefox:
Code:
Host: localhost:8888
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.3) Gecko/20060504 Fedora/1.5.0.3-1.1.fc5 Firefox/1.5.0.3 pango-text
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Host: localhost:8888
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.3) Gecko/20060504 Fedora/1.5.0.3-1.1.fc5 Firefox/1.5.0.3 pango-text
Accept: image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

konqueror:
Code:
User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.2 (like Gecko)
Accept: text/html, image/jpeg, image/png, text/*, image/*, */*
Accept-Encoding: x-gzip, x-deflate, gzip, deflate
Accept-Charset: utf-8, utf-8;q=0.5, *;q=0.5
Accept-Language: en
Host: localhost:8888
Connection: Keep-Alive

...und nun denk dir den Useragent weg und sag mir sie unterscheiden sich nicht? ;)
 
Moin,
das Untenstehende kann benutzt werden, was noch?

PHP:
HTTP_ACCEPT_CHARSET
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_CONNECTION
HTTP_KEEP_ALIVE
HTTP_USER_AGENT
REMOTE_ADDR
 
tester schrieb:
Glaub wir posten aneinander vorbei. Ich habe gepostet, dass dies alphabetisch geordnet ist, aber überprüfen würd ich se ungefähr so ;)
Ich will damit sagen zusätzlich zum Inhalt des Requests kannst du auch noch die Reihenfolge auswerten. ;)
 
tester schrieb:
und wie kommt man an die Daten? apache_request_headers? :ugly: :roll:
Ich nehme mal stark an das du die $_SERVER Variable auswerten musst!
Kann zwar nicht mehr besonders gut PHP, aber habs hier mal versucht:
PHP:
<?php
while(next($_SERVER))
{
     echo "['".key($_SERVER)."']".current($_SERVER)."<br>";
}
?>
Das müsste das etwa in dem Schema ausgeben wie Veers es gezeigt hat!
Eventuel muss man noch ein reset($_SERVER) davor, bin mir allerdings nicht sicher!
 
oak schrieb:
Ich nehme mal stark an das du die $_SERVER Variable auswerten musst!
Kann zwar nicht mehr besonders gut PHP, aber habs hier mal versucht:
PHP:
<?php
while(next($_SERVER))
{
     echo "['".key($_SERVER)."']".current($_SERVER)."<br>";
}
?>
Das müsste das etwa in dem Schema ausgeben wie Veers es gezeigt hat!
Eventuel muss man noch ein reset($_SERVER) davor, bin mir allerdings nicht sicher!

Ich machs immer so

PHP:
  foreach($_SERVER AS $key => $value)
    {
      ...
    }

eigentlich besteht ja aus dem, was veers meint kein Unterschied zu $_SERVER?!?, deswegen hatte ich gefragt wegen apache_request_headers().