IP Sperre [gelöst]

  • Hallo,
    ich habe mir eine IP Sperre gebastelt und es funktioniert nicht. Die zu sperrenden IPs möchte ich in eine .txt Datei schreiben, aber da liegt nicht das Problem. Immer wenn ich meine IP Sperre ausprobiere werden die zu sperrenden IPs ausgegeben und die normale Seite wird angezeigt.
    Hier ist meine IP Sperre:


    ips.txt

    Code
    "84.23.234.21", "89.04.32.34"


    Was ist falsch??

  • Zitat von "php.net"

    fpassthru
    (PHP 4, PHP 5)
    fpassthruGibt alle verbleibenden Daten eines Dateizeigers direkt aus.


    Versuche entweder file_get_contents() um die gesamte Datei in einen String zu lesen oder schreibe per while und fgets() jeweils eine Zeile/Ip in das Array. Dafür musst du eben nur anstelle von xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx
    127.0.0.1
    127.0.0.2
    ...
    machen :D


    Ich würde das ja bequem über die .htaccess machen :D

    Code
    order allow,deny
    deny from 127.0.0.1
    deny from 127.0.0.2
    deny from 127.0.0.3
    allow from all

    einfach für jede gesperrte IP ein weiteres deny from xxx.xxx.xxx.xxx anlegen :D

  • Guck mal hier ist jetzt mein Skript:


    und hier nochmal der Inhalt der ip.txt:

    Code
    "127.192.200.34", "192.344.234.93", "127.0.0.1"


    Es klappt aber nicht, keine Fehlermeldung, nur ich werde nicht umgeleitet

  • Wozu machst du $data zu einem array, nur um in_array verwenden zu können? in_array prüft glaube ich nämlich nur, ob ein Wert enthalten ist, der genau dem Suchstring entspricht und da deine ip.txt aus mehreren ips besteht, kann das gar nicht sein.


    Besser geeignet wäre strpos.


    Zitat von "Sarkkan"

    Ich würde das ja bequem über die .htaccess machen :D

    Code
    order allow,deny
    deny from 127.0.0.1
    deny from 127.0.0.2
    deny from 127.0.0.3
    allow from all

    einfach für jede gesperrte IP ein weiteres deny from xxx.xxx.xxx.xxx anlegen :D

  • Nein, tut mir Leid.
    Dazu sind wir alle leider nicht in der Lage.. Du wirst wohl alleine es irgendwie schaffen müssen mittels strpos() nach zu sehen ob sich die Besucher IP in der Datei befindet, die du vorher in einen String gepackt hast.


    Lg
    Sarkkan


    PS: Welche Bedeutung es vielleicht hat, dass Sören da noch mal ein Stückchen meiner Antwort zitiert hatte.. :roll:

  • Sarkkan: Kann aber sein, dass die .htaccess nicht funktioniert (habs mal bei unserer Schulhomepage ausprobiert: entweder ich war zu blöd, oder es hat dort z.B. nicht funktioniert).
    Und weil ich grad nix besseres zu tun habe, hier der Code

    PHP
    <span class="syntaxhtml"><br /><span class="syntaxdefault"><?php<br />$datenbank </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"ip.txt"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$data </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> file_get_contents</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$datenbank</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">function ipCheck</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$data</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    if</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">strpos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"REMOTE_ADDR"</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> $data</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">===</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        return false</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    return true</span><span class="syntaxkeyword">;<br />}<br /><br /></span><span class="syntaxcomment">//Gesperrte IPs<br /></span><span class="syntaxkeyword">if(</span><span class="syntaxdefault">ipCheck</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$data</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">   include_once </span><span class="syntaxstring">"gesperrt.php"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">   exit</span><span class="syntaxkeyword">;<br />}<br /><br /><br /><br /></span><span class="syntaxdefault">?><br /></span></span>


    Einfach die IPs direkt hintereinander, kommasepariert in die Datei schreiben.
    DerWaldschrat

  • Fehlermeldung?
    Was geht nicht?
    Hast du nach Fehlern gesucht?


    Wir sind nicht dazu da, alles haarklein zu erklären und zu prüfen, ein bischen musst du schon selber machen.

  • DerWaldschrat:
    Also eigentlich sollte es klappen.. ich gebe zu, benutzt habe ich diesen Code selbst noch nie.. aber auf der Suche nach einer Lösung für sein Problem hatte ich immer wieder diesen Code gefunden :/


    Übrigens Danke, dass du scheinbar doch in der Lage warst ihm einen Code zu schreiben -.-
    Auch wenn es nicht klappt :P (Wobei der Fehler sehr simpel und einfach ist [: )
    Aber schon mal was von Lerneffekt gehört? Ich habe ihm absichtlich keinen fertigen Code gegeben, da wir
    1.) nicht dazu da sind und
    2.) er alles was er wissen musste von uns bekam.
    Sollte er Probleme haben daraus einen vernünftigen Code zusammen zu flicken, werden für ihn andere Aufgaben noch weit aus schwieriger zu lösen sein.. :?


    Aber einen Tipp gebe ich:
    Schaut euch doch noch mal die Funktion bei php.net an :)


    Lg
    Sarkkan

  • Fehler Gefunden :D


    @Waldschrat: in der .htaccess müsste allow und deny umgekekehrt werden, es ist immer die Reihenfolge, in der es im Code steht.
    Es sollten aber besser die gesperrten Adressen nach dem allow stehen, ist ja sinnlos, wenn du erst welche verbietest und dann alle wieder erlaubst. :wink:
    Verbessert:

    Code
    order allow,deny
    allow from all 
    deny from 127.0.0.1
    deny from 127.0.0.2
    deny from 127.0.0.3


    Den selben Fehler hatte ich auch mal, mich haben so ein paar Idioten aufgeregt, die Wochenlang versucht haben irgendetwas mit meinem Gästebuch zu machen, aber nie irgendetwas erreicht haben. :D

  • Einfach Datei mit oben genanntem Inhalt und dem Namen ".htaccess" in das Verzeichnis legen, für das sie gelten soll.
    DerWaldschrat


    Sarkkan: Meintest du, dass mein Code nicht funktioniert?
    Also ich hab ihn lokal getestet und lokal hats funktioniert.

  • Zitat von &quot;DerWaldschrat&quot;

    Sarkkan: Meintest du, dass mein Code nicht funktioniert?
    Also ich hab ihn lokal getestet und lokal hats funktioniert.


    Dann bestand deine .txt aus genau einer einzigen IP-Adresse ;)
    Ich will ja mal nicht so sein und erkläre anhand deines Codes, mit Philipps Dateien, was hier passiert :D


    Grundsätzlich:

    Zitat von &quot;php.net&quot;

    int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
    haystack - Die Zeichenkette, in der gesucht werden soll.
    needle - Ist needle kein String, wird der Parameter in einen Integerwert konvertiert, der dem Originalwert des Zeichens entspricht.
    offset - Der optionale Parameter offset ermöglicht es Ihnen, die Startposition für die Suche innerhalb von haystack anzugeben. Die zurück gegebene Positions-Angabe ist dann relativ zum Anfang von haystack.


    Dein Code noch mal:

    Zitat von &quot;DerWaldschrat&quot;
    PHP
    <span class="syntaxhtml"><br /><span class="syntaxdefault"><?php<br />$datenbank </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"ip.txt"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$data </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> file_get_contents</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$datenbank</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">function ipCheck</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$data</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    if</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">strpos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"REMOTE_ADDR"</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> $data</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">===</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        return false</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    return true</span><span class="syntaxkeyword">;<br />}<br /><br /></span><span class="syntaxcomment">//Gesperrte IPs<br /></span><span class="syntaxkeyword">if(</span><span class="syntaxdefault">ipCheck</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$data</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">   include_once </span><span class="syntaxstring">"gesperrt.php"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">   exit</span><span class="syntaxkeyword">;<br />}</span><span class="syntaxdefault"> ?><br /></span></span>


    Ich "übersetzte" nun mal :) Wir durchsuchen also die Variabel $_SERVER["REMOTE_ADDR"] nach dem String $data.
    $date hat hierbei folgenden Wert: "127.192.200.34", "192.344.234.93", "127.0.0.1".
    Nehmen wir nun an, dass meine IP 127.0.0.1 wäre. Ich komme auf die Seite und meine IP wird übermittelt, dass Skript wird ausgeführt und es wird IMMER true rauskommen, wenn in der Datei mehr als nur eine IP steht. Warum?
    Weil in meiner IP "127.0.0.1" sicherlich nicht dieser String enthalten sein wird: '"127.192.200.34", "192.344.234.93", "127.0.0.1"'.
    Was aber wiederum war ist, ist dass n dem String '"127.192.200.34", "192.344.234.93", "127.0.0.1"' meine IP drin steht :P Du hast dort die beiden Parameter vertauscht :)

  • UPS, ok :D dass soll ja in der folgenden PHP-Version aufgehoben werden, diese ständigen unterschiedlichen "needle" und "haystack" Parameterreihenfolgen bei String-Suchfunktionen.
    DerWaldschrat

  • Entweder Fehler in der .htaccess, oder du hast die .htaccess noch nicht aktiviert, beziehungsweise bei XAMPP wird das doch per httpd.conf gemacht? :/


    Also dieses .htaccess "freischalten" geht folgendermaßen:
    Gehe in */xampp/apache/conf/httpd.conf und schau nach htaccess.
    Dort musst du dann den Wert

    Code
    # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
        AllowOverride None

    in

    Code
    # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
        AllowOverride All

    ändern (=

  • ja also guck:
    1. ich öffne index.html im "gesperrten" Verzeichnis
    2. es erscheint das typische loginfenster
    3. ich gebe die daten (ich bin mir nicht sicher, ob sie richtig sind)
    4. es erscheint error 500 Serverfehler


    hier der inhalt der .htpasswd:

    Code
    Admin:$1$SzjlOlWM$.Tw46RTjpz3QQkeabhdMO


    also ich meine der code ist entschlüsselt 19468, oder nicht?


    aber mit .htaccess
    order allow,deny
    deny from 127.0.0.1
    deny from 123.456.789.10
    allow from all


    kann man das nicht von außen machen, ich meine mit eintragen und so

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!