# Surfer eindeutig identifizieren******



## fixxxxxi (23. August 2010)

Hallo, 

ich bin auf der Suche nach einer Lösung, einen Besucher einer Homepage indeutig zu identifizieren. Dies möchte ich um diesen bei einer evtl. Verletzung der Regeln des Forums von der HP auszuschließen, bzw. um eine Neuregistration zu unterbinden.

Die MAC Adresse des Users auszulesen ist via Internet unmöglich, wenn ich beim durchforsten diverser Foren alles richtig verstanden habe. An der IP etwas festzumachen ist auch Quark, da sich diese erstens ständig ändert, und evtl mehr als ein User beim selben Provider und der selben Stadt kommen. Auch ein Cookie, welcher gesetzt wird, kann ohne Probs entfernt werden. Bleibt die Frage an was man diese Identifizierung festmachen kann. 

Ich hatte evtl. an einen Flash Cookie gedacht, da dieser nicht einfach so über den Browser entfernt werden kann. Hat jemand eine andere Idee, welche ich mittels PHP umstzen kann?


----------



## Michael Engel (23. August 2010)

Mit den Flash Cookies ist es wohl genau wie mit den normalen auch, diese kann man genau so einfach entfernen.

Das mit den Mac Adressen ist richtig, durch die Internetrouter werden Mac Adressen nicht mit überliefert. Du bekommst die Mac immer nur zum nächsten Router, was in der Regel der in Rechenzentrum ist. Und selbst Mac Adressen lassen sich einfach wechseln.

Wenn du zwischen 2 Sessions eine eindeutige Beziehung haben möchtest, die nicht Fehleranfällig und absolut sicher ist. Wirst du wohl keine Finden.  

Vielleicht hilft dir ja ein Umdenken, indem du das eigentliche Problem bekämpfst und nicht die Ursache die sich dadurch ergibt dass nicht angemeldete User eben eben doch anonym sein können. Manuelle Freischaltungen z.B. nachdem User sich auf eine art und weise die sich eben nicht einfach ändern können authentifizieren.


----------



## fixxxxxi (23. August 2010)

Michael Engel hat gesagt.:


> Vielleicht hilft dir ja ein Umdenken, indem du das eigentliche Problem bekämpfst und nicht die Ursache die sich dadurch ergibt dass nicht angemeldete User eben eben doch anonym sein können.


 
Das eigentliche Problem ist ja, das ich der User nicht identifizieren kann, um diesen auszuschließen, bzw. eine Neuregistrierung zu unterbinden.

Sicher, wenn man will, kann man jede Sperre umgehen. Man könnte doch den ISP+Betriebsystem+"X"****** nehmen um eine doppelte Vergabe auszuschießen. Nur die Frage ist was ist X^^. Denn ISP un dBetriebssystem lassen sich schonmal nicht so schnell ändern - und wird auch niemand machen nur um nen forum zu besuchen.


----------



## jkallup (23. August 2010)

jede Internetverbindung hat eine IP und einen Host-Anteil - das hast Du sicherlich schon mal von Internet Chat's gesehen?
Daher ist es naheligend den Host zu ermitteln und mit in der Datenbank abgelegten String zu vergleichen.
That's all
Gruß
Jens


----------



## fixxxxxi (23. August 2010)

That`s all? Eben nicht! Denn, wenn 2 User aus der selben Stadt (zb. Berlin) mit dem selbem Provider kommen (zb. Telekom) kommen, würde man dem neuem User ja eine Anmeldung verbieten, obwohl dies nicht der user ist, den man eigentlich "bannen" möchte, da die ersten 2 IP Blöcke identisch sind.


----------



## jkallup (23. August 2010)

nein,

user1:    * Amr0d (Amr0d@user-f7021a.dip.t-dialin.net) has joined #channel
telekom mit hausanschluss: f7021a

user2:  * Fast2 (~Fast2@euirc-a08ee3ea.dip0.t-ipconnect.de) has joined #channel
ebenfalls telekom aber anschluss: a08ee3ea ....


http://www.php.net/manual/de/function.gethostbyaddr.php


----------



## fixxxxxi (23. August 2010)

ok... wäre jedoch trotzallem das problem, das zb in einer wg dann alle pcs gesperrt würden, welche zu diesem hausanschluß gehören. man könnte evtl. einen hash aus 

gethostbyaddr($_SERVER['REMOTE_ADDR']) und $_SERVER['HTTP_USER_AGENT']

generieren, welcher trotzdem noch nicht 100%ig wäre.


----------



## Michael Engel (23. August 2010)

Also wir haben hier auf der Arbeit die Hostadresse [IP-Adresse].static.netcolonge.de bei vielen Anbietern ändert sich auch der Hostname bei jedem neu einwählen. 

andere beisppiele: 
dslb-[IP-Adresse].pools.arcor-ip.net
[IP-Adresse].pool.unitymedia.de
HSI-KBW-[IP-Adresse].hsi5.kabel-badenwuerttemberg.de
wenn es bei so vielen schon Fehleranfällig ist, ist der effektive nutzen davon wohl sehr gering.

@fixxxxxi: Wenn du schon mit WG`s  oder Hausanschlüssen argumentierst. Denke mal an eine Firma oder Schule wo alle 200 PC`s die gleichen sind, mit gleichen Browserversionen und gleichen IP Adressen. Heißt das wenn einmal eine Person aus der Fima mist baute können nie wieder andere auf die Website zugreifen? Klingt auch nicht sehr vernünftig.


----------



## jkallup (23. August 2010)

Hallo Ihr beiiden,

das habe ich noch nicht gehört, alle Anbieter die ich hatte hatten immer den selben Host anteil, ausser die IP, klar die ist dynamisch, hat aber m. E. nichts mit Host zu tun.
müsst euch das so vorstellen, das der Anbierer ja jederzeit den user ermittelln will, auch wenn es um eine mobil connection handelt.
BigBrother is watching you


----------



## fixxxxxi (23. August 2010)

@ Engel 
Deshalb wollte ich ja zuerst an die MAC Adresse des jeweiligen PCs - ****t aber nicht.

@jkallup
Ich denke das die Provider das so oder so loggen werden, weshalb aber unbedingt extern ihre internen vergabemechanissmen ausgegeben werden müssen. wie engel schon richtig geschrieben hat es gibt isps wie zb arcor wo der host die ip beihnaltet und sich dieser also ständig ändert. und allein am arcor kann ich ja nichts festmachen, weil es da hunderttausende gibt.


Also bringt mich gethostbyaddr($_SERVER['REMOTE_ADDR']) auch nicht weiter. Andere effektive Vorschläge? ;P


----------



## Flex (23. August 2010)

http://www.golem.de/1005/75176.html

Das wollte ich nur kurz einschmeißen und eine kleine Ermahnung:
Halte dich bitte stärker an Groß- und Kleinschreibung, danke.


----------



## fixxxxxi (23. August 2010)

Danke für den Wink Filix ;P Nunja... das ist ja alles schön und gut mit dem Fingerprint. Daraus kann man sich auch nen prima Hashwert errechnen. ABER - Sobald auch nur eine Variable verändert wird, zb eine Schriftart entfernt, oder der Browser um ein Plugin erweitert wird, ist der Fingerprint anders und ich kann diesen nicht mehr mit der Datenbank abgleichen.


----------



## rd4eva (23. August 2010)

Es gibt keinen Weg einen User eindeutig zu identifizieren.
Browser können sich ändern
IPs können sich ändern
Cookies können gelöscht werden.
usw.

Wie willst du beispielsweise jemanden blocken der einen Proxy oder noch besser Tor verwendet.
Du solltest meiner Meinung nach die Methode wählen die am wenigsten Aufwand bedeutet, denn sinnlos sind sie irgendwie alle.


----------



## fixxxxxi (23. August 2010)

Na gut. Nun versuche ich u.a. die installierten Schriftarten auszulesen. Wie mach ich das? Google spuckt mir irgendwie nur Sachen aus, welche ich so nicht verarbeiten kann.


----------



## Gardiner (23. August 2010)

Hallo,

vielleicht denkt ihr zu technisch? Es gibt zum einen noch den guten alten - und bald ja auch den guten neuen Personalausweis. Darüber lässt sich das machen. Es gibt da gewisse vernünftige, nicht jugendfreie Seiten, die solche Authentifizierungen nutzen. Ansonsten gäbe es noch die Möglichkeit, eine Anmeldung per Post bestätigen zu lassen - käme jetzt auf das zugrunde liegende Problem an, ob das realistisch ist.

Zudem sollte man bedenken, dass immer auch der Klageweg offen steht. Also: Muss man einen User bannen, dann droht man ihm gleich damit, dass beim nächsten Verdachtsfall - also wenn man nur vermutet, dass sich der User wieder angemeldet und nicht an die Regeln gehalten hat - der Anwalt eingeschaltet wird. Häufig wird das schon ausreichen. Andernfalls tut man das dann! Und dann hat man ein berechtigtes Interesse und bekommt über die IP-Adresse auch den Nutzer - klar, gläsern sind wir ja irgendwie alle.

Wie gesagt: Kommt ein bischen auf die Dramatik der Situation an und könnte ein Forum natürlich auch kaputt machen. Aber es hört sich hier ja schon ziemlich wichtig an.

Alle anderen Lösungen sind sicher immer austricksbar. 

Gruß, Gardiner


----------



## sheel (23. August 2010)

zB Java-Applets
(und nein Javascript kann das ziemlich sicher nicht und PHP ist serverseitig)

Aber ob sich das lohnt?



rd4eva hat gesagt.:


> Du solltest meiner Meinung nach die Methode wählen die am wenigsten Aufwand bedeutet, denn sinnlos sind sie irgendwie alle.



edit @Gardiner: Auch eine Möglichkeit


----------



## Bratkartoffel (24. August 2010)

Hallo,

habe hier noch eine kleine Anmerkung:
Aus diesem Grund hoffe ich, dass sich IPv6 bald flächendeckend durchsetzt. Da wäre eine Identifikation bei weitem einfacher, da jeder Endnutzer ein /48 oder /64 Netz zur Verfügung bekommt.
Somit könnte man mit der IP-Adresse ein Whois absetzen, schauen wie groß der Block des Benutzers ist und den erhaltenen Block eintragen (z.B. für Sperren)

Bei einem einzelnen Benutzer (auch in einem Mehrfach-Haushalt) könnte man die IP direkt verwenden.

Gruß
BK


----------



## fixxxxxi (24. August 2010)

Ich hab so einiges ausprobiert und habe eine einigermaßen akzeptable Lösung gefunden. Nun tritt ein anderes Problem auf. 


```
$xxx = '<p id="xxxoutput"></p>';
$yyy=substr($xxx , 0, -10);
```

nun beachtet $yyy nicht den inhalt der ausgabe von $xxx sondern lediglich den string selbst. heißt es wird <p id="xxxoutput"></p> auf <p id="xxxou gekürzt aber nicht die eigentliche Ausgabe. 

Wie mach ich das?


----------



## Yaslaw (24. August 2010)

fixxxxxi hat gesagt.:


> nun beachtet $yyy nicht den inhalt der ausgabe von $xxx sondern lediglich den string selbst. heißt es wird <p id="xxxoutput"></p> auf <p id="xxxou gekürzt aber nicht die eigentliche Ausgabe.


Welche Ausgabe? Du hast da $xxx als String definiert. Was willst du den da sonst haben?


----------



## fixxxxxi (24. August 2010)

Ok. Etwas ausführlicher:


```
<script type="text/javascript">
			
			function start() {
				var fontreader = document.getElementById("fontreader");
				var fontoutput = document.getElementById("fontoutput");
				
				// Schriftarten auslesen
				var fontNames = fontreader.fontNames;
				var size = fontNames.size();
				var fonts = new Array();
				for (var i = 0; i < size; i++) {
					fonts.push(fontNames.get(i));
				}
				
				// Schriftarten ausgeben
				for (var i in fonts) {
					fontoutput.appendChild(document.createTextNode(fonts[i]));
					fontoutput.appendChild(document.createElement("br"));
				}
			}
			
		</script>

	<body onload="start()">
  <applet code="FontReader.class" id="fontreader" width="0" height="0"></applet>
	</body>

<?php

$fonts = '<p id="fontoutput"></p>';
$userhash=md5($fonts);
```

Darum geht es. Nun wird allerdings der MD5 nicht aus dem Inhalt des Applets errechnet sondern aus dem inhalt des Strings, sprich MD5="<p id="fontoutput"></p>". Es soll aber der MD5 Wert aus der Ausgabe errechnet werden, welche alle Schriftarten ausgibt. Das ausgeben der einzelnen Schriftarten ****t soweit nur eben die Übergabe an PHP irgendwie nicht.


----------



## Yaslaw (24. August 2010)

Du durchmischst hier PHP und Javascript.
Wenn du dir den folgenden Ablauf vor AUgen nimmst, weisst du warum es nicht geht

Anfrage vom Browser -> PHP wird auf dem Server geparst -> Rückgabe der PHP-Ausgabe an den Browser -> Browser führt Javascript aus sofern er das darf

DIe PHP-Ausgabe aus deinem Beispiel ist

```
<p id="fontoutput"></p>
```

Wenn du das Javascriptes mit PHP auswerten willst, dann solltest du das mit AJAX machen. Sprich, das Javascript ruft einen PHP-Seite auf und übergibt gewisse Parameter, wartet auf die Rückgabe der PHP-Darei und macht was damit.
Hier ein kleines Beispiel http://wiki.yaslaw.info/wikka/PhpAjax1


----------

