Skript um Zugriff anhand der IP verweigern.

  • PHP

  • chicken
  • 1346 Aufrufe 7 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Skript um Zugriff anhand der IP verweigern.

    Jo moin Freunde der Sonne,

    ich suche ein PHP-Skript, bei dem man User anhand der IP Adresse den Zugriff auf bestimmte Seiten sperren kann.

    Vorgestellt hatte ich mir das so, dass ich mittels einer Textdatei die IP-Adresse bzw. auch eine Range festlege die gesperrt sind.

    Als Perl habe ich es schon gefunden, nur leider unterstützt mein Webspace Anbieter kein Perl, nur PHP...

    Hier ist das Perl Skript:

    Quellcode

    1. $noentry_ip = $ENV{´REMOTE_ADDR´};
    2. #iplist.txt = Liste der gesperrten ip durch space getrennt.
    3. open FH,"iplist.txt" || die "Kann iplist.txt nicht lesen";
    4. @iplist = <FH>;
    5. close FH;
    6. $iplist = join(´´,@iplist);
    7. $iplist =~ s/\s/ /;
    8. if ($iplist =~ /$noentry_ip/) {&noentry}
    9. else {&entry};
    10. sub entry {
    11. print "Du darfst\n";
    12. }
    13. sub noentry {
    14. print "Du darfst nicht!\n";
    15. }
    Alles anzeigen


    cya chicken :lego:
    [SIZE=1]Dumme Antworten sind rein zufällig und auf einen Fehler in der Speicherverwaltung zurückzuführen
    [/SIZE]
  • Hi
    Könnte nachehr wohl was schreiben, wenn ich Zeit hätte.
    Allerdingss ne kleine Frage.. unterstützt dein Server MySQL?!
    Damit wär es übersichtlicher und einfacher zu realisieren.
    Denk, das ich heut abend noch Zeit hätte.
    mortician
    [size=1][FONT="Courier New"]###############_###_####_
    #_ __ #___ _ _| |_(_)__(_)__ _ _ _###############new uploads: [1] [2] [3] [4] [5] [6] [7] [8]
    |#'##\/ _ \ '_|##_| / _| / _` | ' \
    |_|_|_\___/_|##\__|_\__|_\__,_|_||_|###############Bis 28. Sept. weg[/FONT][/size]
  • Der Server unterstützt Mysql. Is auch nicht direkt für mich.

    Weiß nicht ob der Kollege mit SQL klarkommt, deshalb wäre es einfacher für ihn, wenn er eine Range oder eine feste IP in eine Textdatei schreibt (wie so ne Art Badword-Liste) und das Skript dann jedesmal schaut ob die IP unter die verbotenen fällt.

    Aber mit sql würde auch erstmal reichen...

    cya chicken :lego:
    [SIZE=1]Dumme Antworten sind rein zufällig und auf einen Fehler in der Speicherverwaltung zurückzuführen
    [/SIZE]
  • Hi
    Das mYsQl schreib ich dir dann ja.
    Das mit Textdateien ist naemlich scheisse, weil dann jeder lesen kann.
    Also ich machs dann gleich in den Edit.
    mortician

    / / E D I T
    Bin dann fertig.
    Falls du verbesserungen hast / was nicht funktioniert.
    Meld dich einfach bei mir.

    SQL:

    Quellcode

    1. CREATE TABLE ipblacklist (
    2. ip varchar(30)
    3. );


    Inhalt der config.php:

    PHP-Quellcode

    1. <?php
    2. ########################
    3. $host = localhost; ### Mysql-Host ###
    4. $user = user; ### Mysql-User ###
    5. $pw = pw; ### Mysql-Paswort ###
    6. $database = database; ### Mysql-Datenbank ###
    7. $m_bannedips = ipblacklist; ### Mysql-Tabelle ###
    8. $index = "include.php"; ### Hauptseite ###
    9. ########################
    10. ?>
    Alles anzeigen


    Inhalt der iphinzufuegen.php:

    PHP-Quellcode

    1. <?php
    2. require('config.php');
    3. echo "<center><font size=\"5\" family=\"Arial\" color=\"red\">IP Blacklist</font><br><font size=\"2\" family=\"Arial\">Hinzufügen</font><br><br><br>";
    4. if (!$submit) {
    5. echo "<form action=\"".$PHP_SELF."\" method=\"post\">",
    6. "IP: <input type=\"text\" name=\"ip\">",
    7. "<input type=\"submit\" name=\"submit\" value=\"Ban\">",
    8. "</form>";
    9. } else {
    10. $vb = mysql_connect($host,$user,$pw);
    11. mysql_select_db($database);
    12. if ($_POST['ip'] != "") {
    13. $result = mysql_query("SELECT * FROM ".$m_bannedips." WHERE ip='".$_POST['ip']."'",$vb);
    14. if (mysql_num_rows($result) < 1) {
    15. $add = mysql_query("INSERT INTO ".$m_bannedips." (ip) VALUES ('".$_POST['ip']."')",$vb);
    16. if (mysql_affected_rows($vb)) {
    17. echo "Das Hinzufügen der IP <b>".$_POST['ip']."</b> war erfolgreich!<br><a href=\"javascript:history.back()\">Zurück</a>";
    18. } else {
    19. echo "Es gab einen Fehler mit der Datenbank!<br><a href=\"javascript:history.back()\">Zurück</a>";
    20. }
    21. } else {
    22. echo "Die IP <b>".$_POST['ip']."</b> steht schon auf der Blacklist!<br><a href=\"javascript:history.back()\">Zurück</a>";
    23. }
    24. } else {
    25. echo "Sie müssen eine IP angeben um sie auf die Blacklist zu setzen!<br><a href=\"javascript:history.back()\">Zurück</a>";
    26. }
    27. }
    28. echo "</center>";
    29. ?>
    Alles anzeigen


    Inhalt der index.php:

    PHP-Quellcode

    1. <?php
    2. require('config.php');
    3. $ip = $_SERVER['REMOTE_ADDR'];
    4. $vb = mysql_connect($host,$user,$pw);
    5. mysql_select_db($database);
    6. $result = mysql_query("SELECT * FROM ".$m_bannedips." WHERE ip='".$ip."'",$vb);
    7. if (mysql_num_rows($result) > 0) {
    8. echo "<center><b>Sie sind nicht berechtigt, diese Seite zu betreten!</center>";
    9. } else {
    10. include($index);
    11. }
    12. ?>
    Alles anzeigen


    Inhalt der include.php:

    Der Inhalt deiner HP / Die deines Kollegen.
    Die wird ausgeführt, wenn die IP, des Users, der auf die Seite Conecten will, nicht auf der IP Blacklist steht.

    Er muss natürlich noch in der config.php die Mysql-Daten ändern.
    Sind halt seine persönlichen Daten, die er vom Admin gekreigt hat.

    Hoff es hilft.
    mortician
    [size=1][FONT="Courier New"]###############_###_####_
    #_ __ #___ _ _| |_(_)__(_)__ _ _ _###############new uploads: [1] [2] [3] [4] [5] [6] [7] [8]
    |#'##\/ _ \ '_|##_| / _| / _` | ' \
    |_|_|_\___/_|##\__|_\__|_\__,_|_||_|###############Bis 28. Sept. weg[/FONT][/size]
  • Super Aktion,

    danke dir, werd' ich jetzt ma gleich probieren...

    cya chicken :lego:

    /Edit:
    Das klappt alles schon sehr gut wenn ich einzelne IPs sperre. Aber wie siehts mit Ranges aus. Ich müsste ein komplettes class B Netz sperren können aber ich habe keine Lust 65000 IP-Adressen manuell einzutragen.

    Besser wäre es wenn ich mit Platzhaltern arbeiten könnte. So 84.184.*.* sperrt eben alles was so anfängt oder 84.184. sperrt alle Ip-Adressen, bei denen die Ziffern drin vorkommen.

    Geht sowas?
    [SIZE=1]Dumme Antworten sind rein zufällig und auf einen Fehler in der Speicherverwaltung zurückzuführen
    [/SIZE]
  • Ja, dafür musst du lediglich die SQL-Abfrage der index.php (in diesem Beispiel) ändern, in etwa so:

    PHP-Quellcode

    1. $ipmatch = str_replace('*', '%', $ip); // convert to mysql wildcard
    2. $result = mysql_query("select * from $m_bannedips where ip like '$ipmatch'", $vb);


    Wenn ich nichts übersehen habe sollte das gehen.

    Die Blacklist-Einträge könnten dann z.B. so aussehen: 120.121.*.* oder auch nur 120.121.* oder wie auch immer.