kostenloser Webspace werbefrei: lima-city


IP Blacklist mit PhP oder htaccess

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    h***********r

    Mir ist wieder eine sicherlich unsinnige Idee gekommen, dass man doch mit PhP so eine Art IP Blacklist erstellen könnte.
    Mir selber gefällt die Anwendung dieses nicht ganz,evtl geht das viel viel einfacher. Auch bin ich mir nicht sicher ob ich so ohne weiteres die Anzahl Zugriffe auf die Website über IP xy abspeichern darf um herauszufinden wer so auf seiner Seite umherwandelt. Da kenne ich mich jedoch zu wenig aus.
    Meine Idee der Umsetzung sieht so aus (sql.php ist fürs verbinden mit der Datenbank:

    ipcheck.php

    <?
    session_start();
    include 'sql.php';
    global $connect;
    $ip = getenv ("REMOTE_ADDR");
    checkblacklist ($ip);
    
    function checkblacklist($ip){
    	global $connect;
    	$ipentry = "SELECT block_ip FROM ip_list WHERE ip='$ip'";
    	$ipentryk = mysqli_query($connect, $ipentry) or die("<div class='loginmsg'>Ein Fehler ist aufgetreten<div>");
    	if (mysqli_num_rows($ipentryk) == 'yes') {
    		$_SESSION['ipstatus'] = 'forbidden';
    		header('location: /error/ip.php');
    	}
    	else {
    		checkiplist($ip);
    	}
    }
    function checkiplist ($ip){
    	global $connect;
    	$gipentry = "SELECT ip FROM ip_list WHERE ip='$ip'";
    	$gipentryk = mysqli_query($connect, $ipentry) or die("<div class='loginmsg'>Ein Fehler ist aufgetreten<div>");
    	if (mysqli_num_rows($ipentryk) == 1) {
    		increasenumber($ip);
    	}
    	else {
    		addentry($ip);
    	}
    }
    
    function increasenumber($ip){
    	global $connect;
    	$logincount = "SELECT login_count FROM ip_list WHERE ip='$ip'";
    	$logincountk= mysqli_query($connect, $logincount) or die("<div class='loginmsg'>Ein Fehler ist aufgetreten<div>");
    	$logincountdb = mysqli_fetch_array($logincountk);
    	$logincountinsert = $logincountdb + 1;
    	$insertsql = "UPDATE ip_list SET login_count = $logincountinsert WHERE ip = $ip";
    	$insertsqlk = mysqli_query($connect, $insertsql)or die("<div class='loginmsg'>Ein Fehler ist aufgetreten<div>");
    	weiter($ip);
    }
    
    function addentry($ip){
    	global $connect;
    	$insertsql = "INSERT INTO ip_list (ip, login_count, block_ip,) VALUES ('$ip', 1, 'no',)";
    	$insertsqlk = mysqli_query($connect, $insertsql)or die("<div class='loginmsg'>Ein Fehler ist aufgetreten<div>");
    	weiter($ip);
    }
    
    function weiter($ip){
    $_SESSION['ipstatus'] = 'allow';
    header('location: index.php');
    }
    ?>


    Auf den ganzen Seite müsste man dann so in etwa die Variable abfragen:

    <?php
    	session_start();
    	if (isset($_SESSION['ipstatus'])) {
    		$ipstatus = $_SESSION['ipstatus'];
    		if ( $ipstatus = 'allow'){ die() ; }
    		else ( header('location: /pfad/zu/error/ip.php'); )
    	}
    	else {
    		header('location: /pfad/zur/ipcheck.php');
    	}
    	?>


    Da wird es doch sicherlich eine Erweiterung für geben mit der man das einfacher lösen kann?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo,
    mir erschließt sich nicht ganz deine Frage, meinst du eine Erweiterung einer CMS?
    Oder eine Erweiterung deines Scriptes und wenn ja was genau ist dein Problem?
    Funktioniert denn alles was Du bist jetzt geschrieben hast ?
  4. mein-wunschname

    mein-wunschname hat kostenlosen Webspace.

    Dein Beitrag hat ja eine ganze Reihe von Aspekten. In der Themenüberschrift erwähnst du auch die .htaccess, in der eigentlichen Frage nicht mehr.
    Auf jeden Fall geht es mit der .htaccess auch, Problem ist aber: woher kennt man die "Bösen"? Dafür gibt es dann z.B. so etwas:
    https://www.ip-bannliste.de/aktuelle-bannliste.html

    ...oder du schließt gleich ganze Länderbereiche aus.

    Aus deinem PHP-Script kann ich auch nicht so recht erkennen, wie du die "Bösen" identifizieren willst? Muss ja schließlich nicht sein, dass sich hinter einer IP-Adresse, die oft identifiziert wird, böse Absicht verbirgt. Außerdem nutzen Zeitgenossen mit unlauteren Absichten oft auch schnell hintereinander unterschiedlich IPs.

    Zum rechtlichen Aspekt: Der letzte Stand, der mir bekannt ist
    https://www.heise.de/newsticker/meldung/EuGH-lockert-Verbot-von-IP-Adress-Speicherung-3354157.html

  5. Der Thread ist echt rechr wirr.
    Der Sinn einer Blacklist über .htaccess ist doch eben grade dass der PHP-Interpreter nicht mehr angesrpochen wird.
    Ein Bloick via PHP macht insofern nur Sinn wenn man auf der Ebene blocken will. Z.B. bei der Regstrierung.
  6. Autor dieses Themas

    h***********r

    Gut, dann habe ich mich schlecht ausgedrückt. Wie setzt man so etwas am besten um. Mit PhP Scripten wird das ganze sicherlich relativ groß und uneffizient. Mit .htaccess könnte es evtl gehen? Oder doch ganz anders mit ner Erweiterung für den Webserver.

    Beitrag zuletzt geändert: 10.7.2017 10:17:48 von horstexplorer
  7. mein-wunschname

    mein-wunschname hat kostenlosen Webspace.

    horstexplorer schrieb:
    ...Oder doch ganz anders mit ner Erweiterung für den Webserver.


    Ich bin jetzt etwas verwirrt. Administrierst du einen eigenen (v)Server? Dafür gibt es Tools wie Fail2ban, mit denen man ziemlich gezielt unerwünschte Zugriffe minimieren kann.
  8. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hi,
    horstexplorer schrieb:
    Mit PhP Scripten wird das ganze sicherlich relativ groß und uneffizient. Mit .htaccess könnte es evtl gehen? Oder doch ganz anders mit ner Erweiterung für den Webserver.

    Mit php ist es weder groß noch ineffizient, es kommt darauf an, wie man es programmiert und welche Mechanismen man nutzt. Beispielweise ist lediglich eine Abfrage aus dem RAM nötig, ob die IP geblockt wurde.
    Ich habe mir solch ein Skript gebaut, welches dazu dient ein Formular nicht zu oft absenden zu können. Bei einem DDoS wird es dir aber nicht helfen können.

    Besser ist es auf .htaccess zu setzten. Beispielsweise kannst du die Datei mit php bearbeiten und IPs die geblockt werden sollen einfach hinzufügen. (Bitte denke daran, viele IPs sind dynamisch vergeben und sollten daher nach x Minuten wieder entsperrt werden.)
    Das würde nur bedingt helfen bei einem Angriff.

    Noch besser ist die Installation von Fail2Ban auf einem eigenen Server. Hier legst du fest, in welcher Zeit wieviel Anfragen eingehen dürfen. Ist dies überschritten, wird die IP direkt im IP-Stack des Kernels gesperrt.

    Hoffe ich konnte dir einige Möglichkeiten aufzeigen.

    MFG Micha
  9. Autor dieses Themas

    h***********r

    michaelkoepke schrieb:

    Hoffe ich konnte dir einige Möglichkeiten aufzeigen.


    Vielen Dank dafür, Fail2Ban sieht da sehr vielversprechend aus. :)
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!