ip's bannen via .htaccess
Hey mensen is het mogelijk om IP's van je site te bannen doormiddel van een .htaccess ??
Het gene waar ik naar opzoek ben is niet iets om een gedeelte van me site beveiligen, maar mensen (spambots in dit geval) hardcore te bannen (redirect naar error page oid)
Order allow,deny
Allow from all
Deny from 82.222.223.223
Je kan ook nog 1 niveau hoger (apache allow/deny), maar persoonlijk zou ik zelfs 1 niveau lager gaan.
Ik zou de ipadressen in een database zetten, en op je site een ipadres opzoeken uit die database. Voordeel hiervan is dat de onderhoudbaarheid vele malen beter is. Immers is het update van een database makkelijker dan een bestand.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
if(!empty($_SERVER['HTTP_X_FORWARDED']))
{
$ip = $_SERVER['HTTP_X_FORWARDED'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif(!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_VIA']))
{
$ip = $_SERVER['HTTP_VIA'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
$query = "SELECT ip FROM bans WHERE ip = '".$ip."'";
$resultaat = mysql_query($query) or die(mysql_error());
$aantal = mysql_num_rows($resultaat);
if($aantal >= 1)
{
echo 'Sorry, we hebben jou ipadres '.ip.' gebanned van onze server!';
exit;
}
?>
if(!empty($_SERVER['HTTP_X_FORWARDED']))
{
$ip = $_SERVER['HTTP_X_FORWARDED'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif(!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_VIA']))
{
$ip = $_SERVER['HTTP_VIA'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
$query = "SELECT ip FROM bans WHERE ip = '".$ip."'";
$resultaat = mysql_query($query) or die(mysql_error());
$aantal = mysql_num_rows($resultaat);
if($aantal >= 1)
{
echo 'Sorry, we hebben jou ipadres '.ip.' gebanned van onze server!';
exit;
}
?>
tnx voor de snelle hulp mensen. tis allemaal gelukt :)
Arjan:
Op zich ook handig, maar 2 opmerkingen/vragen:Je kan het inderdaad op dat niveau aanpakken.
Je kan ook nog 1 niveau hoger (apache allow/deny), maar persoonlijk zou ik zelfs 1 niveau lager gaan.
Ik zou de ipadressen in een database zetten, en op je site een ipadres opzoeken uit die database. Voordeel hiervan is dat de onderhoudbaarheid vele malen beter is. Immers is het update van een database makkelijker dan een bestand.
Je kan ook nog 1 niveau hoger (apache allow/deny), maar persoonlijk zou ik zelfs 1 niveau lager gaan.
Ik zou de ipadressen in een database zetten, en op je site een ipadres opzoeken uit die database. Voordeel hiervan is dat de onderhoudbaarheid vele malen beter is. Immers is het update van een database makkelijker dan een bestand.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
if(!empty($_SERVER['HTTP_X_FORWARDED']))
{
$ip = $_SERVER['HTTP_X_FORWARDED'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif(!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_VIA']))
{
$ip = $_SERVER['HTTP_VIA'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
$query = "SELECT ip FROM bans WHERE ip = '".$ip."'";
$resultaat = mysql_query($query) or die(mysql_error());
$aantal = mysql_num_rows($resultaat);
if($aantal >= 1)
{
echo 'Sorry, we hebben jou ipadres '.ip.' gebanned van onze server!';
exit;
}
?>
if(!empty($_SERVER['HTTP_X_FORWARDED']))
{
$ip = $_SERVER['HTTP_X_FORWARDED'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif(!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_VIA']))
{
$ip = $_SERVER['HTTP_VIA'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
$query = "SELECT ip FROM bans WHERE ip = '".$ip."'";
$resultaat = mysql_query($query) or die(mysql_error());
$aantal = mysql_num_rows($resultaat);
if($aantal >= 1)
{
echo 'Sorry, we hebben jou ipadres '.ip.' gebanned van onze server!';
exit;
}
?>
1) Is het gebruik van .htaccess of direct instellen in httpd.conf niet sneller dan hetgeen jij noemt?
2) Je kan vast ook het .htaccess bestand uitlezen via een phpscriptje (heb ik nog nooit geprobeerd eigenlijk), er weer wijzingen inmaken en het weer opslaan. M.a.w. het maakt op zich (voor de onderhoudbaarheid) niet uit of je de ip's opslaat in een database of direct in de .htaccess?
Daarbij, met een database kan je meer ;).
Ik ben bezig met een systeem voor mijn v2 nieuwsysteem. Je krijgt dan te zien waarom je gebanned bent, door wie, contactformuliertje, voor hoe lang (5 minuten, 15, 30, 1uur, 2, 6 etc) etc etc.
Tevens kan je er gelijk ook een logfunctie inbouwen etc. Mogelijkheden zijn wat groter.
En opzich maakt het qua snelheid niet uit. Immers vraag je uit de database maar 1 rij op, niet alles (zie de where in de sql).
nano:
tnx voor je reply maar dat bedoelde ik niet
Het gene waar ik naar opzoek ben is niet iets om een gedeelte van me site beveiligen, maar mensen (spambots in dit geval) hardcore te bannen (redirect naar error page oid)
Het gene waar ik naar opzoek ben is niet iets om een gedeelte van me site beveiligen, maar mensen (spambots in dit geval) hardcore te bannen (redirect naar error page oid)
Er stond bij hoe je in een .htaccess mensen moet verbannen adv hun ipadres.
Quote:
Dat is waar, maar wat ik meer bedoelde was: je gaat al aan de slag met PHP, PHP moet verbinding maken met database, database zoekt uit en stuurt terug, PHP parst en stuurt weer server en server stuurt het weer door naar cliënt. Lijkt mij een langere weg dan .htaccess -> geblokkeerd?En opzich maakt het qua snelheid niet uit. Immers vraag je uit de database maar 1 rij op, niet alles (zie de where in de sql).
Maar toegegeven: voor de rest is jouw systeem mooier :)
Heb je gelijk in, maar de meeste sites moeten toch al verbinding maken met de database voor de content ;).