PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP IP Sperre



till7
27.10.2008, 20:20
Hallo,

weiss jemad wie ich eine IP Sperre auf http://phpscripts.x2.to/ einichten kann?

Thx mfg till ;)

TamCore
27.10.2008, 20:54
Sowas? (ungetestet!)

<?php
if (!($ip = getenv('REMOTE_ADDR')) $ip = getenv('HTTP_X_FORWARDED_FOR');

$ips = array();
$ips[0] = "127.0.0.1";
$ips[1] = "192.168.2.1";
while (list($key,$val) = each($ips)) {
if ($val == $ip) die("Your IP is blocked!");
}
?>

Added after 8 minutes:

Hier nochn DNSBL Check in PHP. Ebenfalls ungetestet!

<?php
$blacklists = array('dnsbl.germany-irc.de', 'rbl.efnetrbl.org', 'tor.ahbl.org', 'cbl.abuseat.org', 'tor.dnsbl.sectoor.de', 'tor.kewlio.net.uk');

if (!($ip = getenv('REMOTE_ADDR')) $ip = getenv('HTTP_X_FORWARDED_FOR');

$iptc = explode(".", $ip);
$iptc = implode('.', array_reverse($iptc)) . '.';

foreach($blacklists as $bl) {
$check = $iptc . $bl;
if ($check != gethostbyname($check)) {
die('PHP Security: Your IP (' . $ip . ') is listed at ' . $bl . '
');
}
}
?>

Paran0id
27.10.2008, 21:06
Danke, funktionieren beide...

@Theradstarter: Bitte melde dich mal bei mir per icq [473716]

till7
27.10.2008, 22:25
danke aber iwi gehts mir trotzdem net ^^

wenn ich da bei IP meine ip eingebe gehts net.. hab die ip von weismeineip.de oda so

blackberry
28.10.2008, 00:01
<?php
if (!($ip = getenv('REMOTE_ADDR')) $ip = getenv('HTTP_X_FORWARDED_FOR');

$ips = array();
$ips[0] = "127.0.0.1";
$ips[1] = "192.168.2.1";
while (list($key,$val) = each($ips)) {
if ($val == $ip) die("Your IP is blocked!");
}
?>


if (in_array($_SERVER['REMOTE_ADDR'], $ips)) die('O_o');

ist kürzer als dein while :D
(hab list() noch nie gemocht xD)


mfG. BlackBerry

heatshock
28.10.2008, 07:59
$filename=$_SERVER['REMOTE_ADDR'].".ips;
if (file_exists($filename)) {
print "You´re Banned";
exit;
}


müsste funktionieren..
erstelle einfach eine oder mehrere
"gebanteip.ips" erstellen

bsp.: 192.168.0.1.ips

till7
28.10.2008, 08:03
Ok und jetzt habe ich grad ne andere Frage.

Also mein Ziel ist es dass man nach 5 verschickten Mails gesperrt wird für die nächsten 24 Stunden.

Wie kann ich sowas machen? Danke Vielmals für die Antworten!
Es geht immer noch um http://phpscripts.x2.to/

MFG Till

echoslider
28.10.2008, 16:10
nochmal das mit ip sperren:



order allow,deny
allow from all
deny from IPDIEDUNICHTWILLST



das ganze muss in ne datei namens:


.htaccess



dann das mit dem sperren(ohne mysql):





$ip=$_SERVER['REMOTE_ADDR'];
$datei = fopen(''.$ip.'.dat',"a+");

$count = fgets($datei, 10);
if($count == "")
{
$count = 0;
}
$count++;

rewind($datei);
fwrite($datei, $count);
fclose($datei);

if($count<="5")
{

.. der code der mit dem formular zusammenhängt
}
else
{
$date=date ("G", filemtime(''.$ip.'.dat'));

if($date>="24")
{
unlink(''.$ip.'.dat');
}

}




so ca musste nur bearbeiten.

till7
28.10.2008, 16:38
das ist super so danke! aber ich will ja jetzt so machen dass wenn einer auf das script geht und ne mail senden will, nur 3 mails oder so in ner stunde senden kann.

Dannach 1 stunde ip sperren für mailversand ^^

geht das? wöre froh...

mfg till

echoslider
29.10.2008, 15:53
sowas is dann besser wenn man das ganze über mysql regeln.

damit kann man dann was in ne tabelle (namens "ips") eintragen.

mysql_connect($dbhost,$dbuser,$dbpass);

@mysql_select_db($db) or die( "Unable to select database");
$query = "INSERT INTO `ips` (ip,anzahl,zeit) VALUES ('$ip','$anzahl'.$zeit')";
mysql_query($query);
mysql_close();

damit kann man dann bestimmte werte auslesen und suchmaske wäre dann die ip. wenn die werte leer sind is die ip nicht gespeichert also hat die ip noch alle versuche....



mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($db) OR die(mysql_error());
$sql = "SELECT anzahl as anzahl,zeit as zeit FROM `ips` WHERE `ip`='$ip'";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);

$anzahl=$row['anzahl'];
$zeit=$row['zeit'];



damit kannste dann die den werte für die anzahl der bisherigen versuche einer ip updaten.




mysql_connect($dbhost,$dbuser,$dbpass);

mysql_select_db($db) OR die(mysql_error());

$query="UPDATE `ips` SET anzahl='$neueanzahl' WHERE `ip`='$ip'";

mysql_query($query);

mysql_close();


und wenn du halt alles verglichen hast.
und der user z.b 5 versuche hatte aber die zeit älter oder gleich 24 stunden ist kannste die ip wieder aus der db löschen mit:


mysql_connect($dbhost,$dbuser,$dbpass);

mysql_select_db($db) OR die(mysql_error());

$query="DELETE FROM `ips` WHERE `ip`='$ip'";

mysql_query($query);

mysql_close();


kann dir ja nicht alles machen musst ja selbst lernen wie man simple schleifen und abfragen macht.....