IP-Sperre

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Domitz
Mitglied
Beiträge: 209
Registriert: 18.11.2006 17:29

IP-Sperre

Beitrag von Domitz »

Hi, ich suche eine kleine einfache IP Sperre.
Und zwar, dass ein user eine seite, die ich vorgebe nur jede Stunde aufrufen kann.
Das ganze sollte über die Forendatenbank laufen und nicht über cookies.

ist soetwas möglich?
Habs schon mit cookies probiert, aber die, die die deaktiviert haben können halt so oft sie wollen auf die seite...
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Das beisst sich was: Die IP-Sperre könnte mehrere Benutzer treffen, weil sie alle dieselbe IP benutzen.
Wäre es nicht sinnvoller, die User mit Hilfe ihrer UserID herauszufiltern?
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Domitz
Mitglied
Beiträge: 209
Registriert: 18.11.2006 17:29

Beitrag von Domitz »

also zur zeit nutze ich die IP sperre mit cookies.
Problem dabei: user, die keine Cookies akzeptieren können die seite so oft sie wollen reloaden.

gibt es da ne möglichkeit, dass user, die cookies deaktiviert haben ne fehlermeldung bekommen?

Hier der code:

Code: Alles auswählen

<?php
   ob_start();
   $time = 59*60;
   if(!empty($_COOKIE['sperre5'])) {
      echo "<b>Du kannst nur jede Stunde mitspielen!</b>";
   }
   else {
      echo "Du hast XX Punkte gewonnen";
      setcookie("sperre5","sperren5",time()+$time);
   }
?> 
Benutzeravatar
Stefane
Mitglied
Beiträge: 784
Registriert: 04.02.2006 22:43
Wohnort: Rathenow
Kontaktdaten:

Beitrag von Stefane »

nabend,

dein Script ist ja schon und gut, aber wenn die leute keine Cookies speichern, dann hilft dir das reichlich wenig... leider
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Ein sehr rudimentäres Skript, ungetestet:

Code: Alles auswählen

//Speichern der IP wenn sie "benutzt" wurde:
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$sql = "INSERT INTO ip_speicher_tabelle (IP, time) VALUES ('$ip',$time)";
$db->sql_query($sql); //oder wie auch immer dein Datenbankaufruf aussehen mag...

//Abfragen der IP ob sie verwendet werden darf:
$time = time();
$ip = $_SERVER['REMOTE_ADDR'];
$sql = "SELECT count(*) AS anz FROM ip_speicher_tabelle WHERE IP = '$ip' AND $time - time < 86400";
$result = $db->sql_query($sql);
$count = $db->sql_fetchfield(0,0,$result);
if($count)
{
//Verboten
}
else
{
//Erlaubt
}
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Domitz
Mitglied
Beiträge: 209
Registriert: 18.11.2006 17:29

Beitrag von Domitz »

hi, schonmal danke =)
muss ich den code einfach in die gewünschte Datei einbauen oder muss ich da noch etwas verbessern oder ergänzen? also ausser die Zeit?
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Nein da wo die Anmerkungen sind musst du natürlich noch was ändern. Ich weiß nicht was du für ein Datenbanksystem verwendest, daher habe ich hier die für das phpBB Forum verwendeten abstrahierten Befehle verwendet (phpBB verwendet ja einen DBAL der das ganze vom Datenbanktyp (mysql, postgres...) unabhängig macht. Das musst du durch deine entsprechenden Befehle ersetzen (es sei denn du baust das in Forumsdateien oder Dateien die das Forumsystem nutzen ein, dann sollte es auch so gehen).

Außerdem musst du den Code wohl aufteilen. Wenn du das so einfach einbauen würdest dann würdest du ja bei jedem Aufruf erst mal speichern dass die IP "benutzt" wurde und danach dann abfragen ob du sie benutzen darfst (was dann wohl nicht der Fall ist, denn sie wurde ja schon benutzt). Du musst also den ersten Teil da einbauen wo du das Speichern realisieren solltest und den zweiten Teil an der Stelle, wo du die Abfrage brauchst. Effektiv könnte es gut sein, dass du dann beide ineinander verschachtelst.

Außerdem existieren die zugehörigen Datenbankstrukturen ja noch gar nicht, selbst wenn du alles was oben steht machen würdest würde erst mal nichts passieren bis du die in den SQL Anweisungen verwendeten Tabellen angelegt hast. Welche Felder darin sein müssen geht aus den SQL Abfragen im Code hervor.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Domitz
Mitglied
Beiträge: 209
Registriert: 18.11.2006 17:29

Beitrag von Domitz »

Ok, also muss der SQL befehl so aussehen:

Code: Alles auswählen

ADD `ip_speicher_tabelle` MEDIUMINT( 8 ) DEFAULT '0' NOT NULL ,
oder?
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Die Struktur der Tabelle kannst du dir ja anhand der benutzten Datentypen überlegen, INT kannst du für die Zeit verwenden, da ich die IP nicht umwandele musst du wohl für die IP VARCHAR o.ä. nehmen (oder du wandelst die IP um). Die Spaltennamen sind vorgegeben, ich würde mir nicht die Mühe machen den SQL Befehl zum Erstellen der Tabelle von Hand zu machen sondern eher das ganze per Frontend (z.b. phpmyadmin) zusammenklicken.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“