2016-08-01 27 views
-5

Ich habe einen Wettbewerb in PHP skripted, vote basiert. Aus einer IP kann eine Person einmal für jemanden wählen. Ich habe ein Protokoll aller IP-Adressen, die gewählt haben, aber ich sehe etwas seltsam. Einige IP-Adressen scheinen für = "ip_address: port" zu sein, während andere nur ip_address sind, und ich sehe, dass eine IP-Adresse, die mit for = "..." formatiert ist, dort mehrere Male erscheint, nur mit verschiedenen Ports. Kann mir bitte jemand das erklären? Wie machen Nutzer das, sollte ich sie dafür vom Wettbewerb verbannen?IP-Adressen in PHP

ich mit dieser Funktion Adresse Benutzer IP erhalten:

function get_client_ip_env() { 
    if (getenv('HTTP_CLIENT_IP')) 
     $ipaddress = getenv('HTTP_CLIENT_IP'); 
    else if(getenv('HTTP_X_FORWARDED_FOR')) 
     $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); 
    else if(getenv('HTTP_X_FORWARDED')) 
     $ipaddress = getenv('HTTP_X_FORWARDED'); 
    else if(getenv('HTTP_FORWARDED_FOR')) 
     $ipaddress = getenv('HTTP_FORWARDED_FOR'); 
    else if(getenv('HTTP_FORWARDED')) 
     $ipaddress = getenv('HTTP_FORWARDED'); 
    else if(getenv('REMOTE_ADDR')) 
     $ipaddress = getenv('REMOTE_ADDR'); 
    else 
     $ipaddress = 'UNKNOWN'; 

    return $ipaddress; 
} 

Auch, wenn jemand einige gute Referenz und Handbuch mit allen vordefinierten Variablen in PHP kennen, es mit mir bitte teilen.

+5

Es gibt nur *** *** eine zuverlässige Quelle für die Remote-IP: 'REMOTE_ADDR'. Alles andere wird durch HTTP-Header festgelegt, die jeder nach seinen Wünschen einstellen kann, wodurch Ihr "Schutz" vollständig umgangen wird. Du schießt deinen eigenen Fuß, indem du dir all diese zufälligen HTTP-Header ansiehst. Die "seltsamen Werte", die Sie sehen, stammen wahrscheinlich aus einem dieser Header. – deceze

+1

Wenn Sie einen Reverseproxy oder Load Balancer haben, überprüfen Sie nur den spezifischen Header des Proxys oder Load Balancers und vertrauen nur dem Header, wenn dieser spezifisch vom Proxy oder Load Balancer stammt. –

+1

Alle Super Globals in PHP http://php.net/manual/en/language.variables.superglobals.php – Dave

Antwort

0

IP-Adressen HTTP-Header können leicht gefälscht werden, und viele Benutzer (vor allem mobile Benutzer, z. B. eine Wifi-Verbindung) haben Lease-Zeiten für sehr kurze IP-Adressen, so dass sie erneut abstimmen können.

Das sagte, Sie können Optionen kombinieren, zum Beispiel überprüfen Sie die IP-Adresse und setzen Sie einen Cookie, um es schwieriger zu machen herumzukommen.

Wenn Sie einen Port mit der IP-Adresse festlegen, stimmt er nicht mit Ihren Datenbankdatensätzen/IP-Adresslisten überein. Sollten Sie sie dafür verbieten? Ich kann das nicht beantworten.

Die meisten Ihrer Prüfmethode basiert auf dem, was die Anfrage sagt, ist die IP-Adresse, wie die HTTP-Header, die leicht gefälscht werden. Traue ihnen nicht oder akzeptiere, dass deine Umfrage keine genauen Ergebnisse liefert.

Wenn Sie wirklich ein faires Abstimmungssystem wünschen, das eine Stimme pro Person erlaubt, müssen Sie etwas anderes als die IP-Adresse verwenden, um den Benutzer zu identifizieren.

+0

* "IP-Adressen können leicht gefälscht werden" * - als allgemeine Aussage, die falsch ist und viel mehr Klärung erfordert akzeptabel. – deceze

+0

Guter Punkt, lassen Sie mich das umformulieren. – saekort

0

versuchen diese, kann es hilfsbereit für Sie

<?php 
//for example 
    $ip = "216.58.196.68:8989"; 
    $ip = strstr("$ip",':',true); //get text before : 
    echo $ip; 
//it echo only 216.58.196.68 
?>