IP Sperren in PHP (Programmieren)

IP Sperren in PHP (Programmieren)

Hi,
mal wieder brauche ich einen PHP-Script:

Ich möchte User von unserem Gästebuch, Forum oder vom Chat sperren. Ich hab schon mal was gemacht, aber da wurden alle gesperrt. :)

Mein Script:

$ip = $REMOTE_ADDR;
if($ip == "xxx.xxx.xxx.xxx"){
echo "Sie wurden verbannt!";
exit;
}

Aber irgentwie klappts halt nich! Kann mir jemand helfen?

MfG, PCmaster
So wie es da steht, funktioniert es. Ich kann mir aber vorstellen, dass dein Server register globals deaktiviert hat. Dann musst du statt $REMOTE_ADDR $_SERVER[REMOTE_ADDR] verwenden (ist auch aus Manipulationsgründen sicherer). Aber selbst wenn das so wäre, würde nicht jeder mit diesem Skript gesperrt werden, da ja die Bedingung die Variable mit einer IP vergleicht und ein leerer String sicherlich nicht mit der IP übereinstimmt.

Also der Fehler ist hier nicht ersichtlich. Vielleicht liest du die IP's aus einer Datenbank aus? Dann könnte ich mir vorstellen, dass z.B. keine IP-Sperren gesetzt sind, der Vergleich aber trotzdem stattfindet und so die durch die deaktivierte Funktion register globals leere Variable $ip mit einem leeren String verglichen wird.
Also ich hab jetzt mal in eine PHP-Datei
echo $_SERVER[REMOTE_ADDR];
geschrieben, aber dann schreibt er nichts.

mit
echo $REMOTE_ADDR;
hats aber geklappt!
dann hat er meine IP geschrieben!
Dein Skript funktioniert bei mir so wie es oben da steht (kurz getestet).
Kannst du mir mal ein Gefallen tun, jano?
Geh mal bitte auf http://www.schummelwelt.de/ip.php
Und schreib mal, was bei dir auf der Seite steht, ok?
> "Du bist doch der Webmaster!"
mist! ich hab in die Datei geschrieben, dass wenn $ip meine IP-Adresse ist, er diesen Satz schreiben soll! aber anscheinend schreibt er das immer!
Moin hier wenn auch spät:

if ($_SERVER['REMOTE_ADDR']=='xx.xxx.xx.xx')
header('http://www.deineseite.de/blacklist.lst);

das klappt aber nur bei Standfesten IP's.
Auf der Blacklist kann er dann sitzen.
HTML Dokument bearbeiten, dann die Fehlermeldung (z.B. Sie wurden verbannt) und dann die .html-Datei in eine lst Datei ändern um den Überblick zu behalten. Musst du aber nicht!

Aber wenn du eine Professionelle IP-Sperre haben möchtest dann nimm diese hier.


Mit dem Befehl :

CREATE TABLE iptest (
ip varchar(16) default '0',
timefeld timestamp(14) NOT NULL
);

kann man die Tabelle zB. mit phpMyAdmin erzeugen lassen. Ich habe die Tabelle iptest genannt und sie liegt in der Datenbank testgb. So das waren die Vorbereitungen.

Wie immer lege ich mal wieder ein var.inc.php vor :

var.inc.php <?php
// Datenbank Variablen

$dbserver = "localhost";
$dbname = "testgb";
$dbuser = "";
$dbpass = "";

// Sonstige Variablen

$stehenlassen= 120;
?>

So, was steht drin ? Also, die ersten 4 Variablen die mit $db beginnen sind die Verbindungsvariablen zur MySQL Datenbank, sie müssen entsprechend editiert werden, je nachdem wo das GB laufen soll.
Bei den sonstigen Variablen brauchen wir momentan nur eine Variable und zwar $stehenlassen, sie gibt an wielange IP’s gesperrt werden sollen, die Angabe ist in Sekunden. Mehr brauchen wir nicht an Variablen.

form.php

<html>
<head>
<title>klick it !</title>
</head>

Muss ich ja sicher nicht erklären, oder ?

<body>
<form action="check.php" method="post">
<input type="submit" name="sub" value="test">
<input type="submit" name="sub" value="Lösch die Tabelle">
</form>
</body>
</html>


check.php

<html>
<head>
<title>check</title> </head>

<body>
<?php
include("var.inc.php");
$conn = @mysql_connect($dbserver,$dbuser,$dbpass);
if (!$conn)
{
die("Sorry, Datenbank nicht gefunden !");
}
mysql_select_db($dbname,$conn);
if ($sub == "test")
{
$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
$zeit = time ();
$nichtmehrgueltig = $zeit-$stehenlassen;
$query = "DELETE FROM iptest WHERE timefeld <= ".$nichtmehrgueltig;
mysql_query($query,$conn);
$query = "SELECT * FROM iptest WHERE ip = '".$ip."'";
$result = mysql_query($query,$conn);
$rows = mysql_num_rows($result);
if ($rows >= 1)
Nun schauen wir ob $rows >= 1 ist,....

{
echo "Sorry diese IP ist noch gesperrt !";

}
else
{
echo "Okay sie werden jetzt $stehenlassen sec. lang gesperrt !";
$query = "INSERT INTO iptest VALUES (\"$ip\", $zeit)";
mysql_query($query,$conn);
}
}
else
{
$query = "DELETE FROM iptest";
mysql_query($query,$conn);
echo "Daten wurden gelöscht !";
}
mysql_close($conn);
?>
<form action="form.php" method="post"> <input type="submit" name="sub" value="nochmal">
</form>
</body>
</html>

OK! Nun nach geschlagenen 8Std. 45Minuten bin ich am Ende. Nagut ich wünscht dir viel Spass und ließ dir alles noch mal in ruhe durch und fertige dir das Script so an wie du es haben willst!

---Dein MediaTec Team---
AAAAAAHAA!
muss ich mir nochma in ruhe durchlesen :)
Aber das problem is, mein server unterstützt kein MySQL!
Was fürn Server hast du denn???
Das macht es schon schwieriger. Aber keine Panik,
du kannst auch Java Script benutzen. Nun überlegen ich nochmal. Ok ich denke mal morgen abend werd ich was für dich haben!

---Dein MediaTec Team---
Morgen Abend?
Hey MediaTec Inc. !
Ich warte!
Logge dich ein um einen Beitrag zu schreiben.