Hej,
Ik vroeg mij af wat de beste manier is voor een ip-ban systeem.
Is dat a. via je htaccess of b. via een andere methode.
Nu moet het wel aan een eis voldoen:
Ik moet een formulier maken (beveiligd) waar admins dan een ip-adres kunnen ingeven en dat ip-adres bannen. (dus in je htaccess bestand zetten of dan met die functie)
Als ik zoiets zelf zou moeten realiseren, dan had ik zelf voor B gekozen.
- Het IP adres wat u wilt bannen opslaan in de database.
- IP adres van de bezoeker vergelijken met de opgeslagen IP adressen
- Wanneer er een match is de toegang ontlenen
Deze methode vergt wel wat meer effort om te realiseren, maar zo kun je wel optimaal gebruik maken van de mogelijkheden.
Met deze methode zijn de bans ook makkelijker te beheren.
$ip = addslashes($_SERVER['REMOTE_ADDR']);
$sql = 'SELECT reden FROM banlijst WHERE ip = "'.$ip.'"';
$res = mysql_query($sql);
if(mysql_num_rows($res) != 0) {
$rij = mysql_fetch_assoc($res);
die('Je bent verbannen met de reden<br>'.$rij['reden']);
}
@Sliphead,
Ik had dan bijvoorbeeld gewoon hier een script van Sitemasters gepakt en dan een database aangemaakt... maar het zou kunnen dat ik gewoon fouten maaktte bij het scripten de database:
Ik zal het gewoon vragen dan weet ik het:
Moet je gewoon tussen de verschillende dingen (naam, NOT NULL,...) een spatie zetten? of met tab?
Kevboy09,
Hij geeft dan een error:
ERROR 1064 (42000): You have an error in your SQL syntax: check the manual ..... for the right syntax to use near ') NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM' at line 4
Ik heb gewoon jouw ding overgetypt...
-> Heb ik dan iets fout gedaan of zit er een foutje in jouw ding.?
maigel hij doet t gewoon goed hoor. Alleen niet netjes. Wat bij bedoeld is dat je ipv dit:
'$var'
dit doet:
'".$var."'
Dat heet escapen, dat leest makkelijker zul je merken ;)
op je vraag over ID, dat hoeft niet in je insert, maar moet wel in je tabel zelf staan. Als het goed is staat die op auto increment, dat betekent dat ie zelf steeds 1 getal groter word bij elke record
anton - 17/05/2009 10:52 (laatste wijziging 17/05/2009 10:53)
Lid
Zet in je db bij elke gebruiker een extra rij bij: Ban met waarde ja of nee. en dan zet je gewoon op elke pagina hetvolgende:
$s = "SELECT ban FROM gebruikers WHERE ip='".$_server['REMOTE_ADDR']."'";
$q = mysql_query($s);
if($q == 'ja'){
de inhoud of text die er moet komen indien geband
}
else{
de rest van je pagina
}
$s="SELECT ban FROM gebruikers WHERE ip='".$_server['REMOTE_ADDR']."'";
In mijn site werk ik met include head en include foot, dat is voor deze manier denkik handiger, je zet het in je head en het controleert vanzelf op elke pagina.
Wellicht zijn er zeker en vast nog andere manieren om dat te doen, maar deze is diegene die ik gebruik.
MVG
Anton Vandeghinste
EDIT: oops, blijkbaar was het al opgelost! sorry:p
Zet in je db bij elke gebruiker een extra rij bij: Ban met waarde ja of nee. en dan zet je gewoon op elke pagina hetvolgende:[..code..]
In mijn site werk ik met include head en include foot, dat is voor deze manier denkik handiger, je zet het in je head en het controleert vanzelf op elke pagina.
Wellicht zijn er zeker en vast nog andere manieren om dat te doen, maar deze is diegene die ik gebruik.
MVG
Anton Vandeghinste
EDIT: oops, blijkbaar was het al opgelost! sorry:p
Hij bedoelt natuurlijk dat er in de tabel een extra [i]kolom[i] (ipv rij) moet komen.
Deze kolom moet je uitlezen en controleren of de waarde uit de kolom hetzelfde is of niet hetzelfde is als die nodig is om niet geband te zijn.
Of dat dan met 0 en 1 werkt of met ja en nee of met geband of nietgeband, dat maakt in principe toch niets uit?
als je de rij ban ophaalt van de gebruiker waar het ip adres hetzelfde is als het ip adres van de gebruiker die je wil controleren krijg je dat veld aleen en als de waarde ervan ja is , is ie gedand anders niet...toch?? Sliphead je doet me twijfelen hoor...!! anyway, bij mij werkt het zo dus wel...:D
Het makkelijkste is om in de tabel (ik ga er dus even van uit dat je een tabel met ip-adressen hebt) een kolom "geblokkeerd" maken van het type bool met de standaard waarde op false.
$query = mysql_query("SELECT geblokkeerd FROM ipadressen WHERE ip = '" . $_SERVER["REMOTE_ADDR"] . "'");
$fetch = mysql_fetch_assoc($query);
if($fetch['geblokkkeerd']==true){
// hier de code wanneer ip geblokkeerd is
}
else{
// hier de code wanneer ip niet geblokkeerd is
}
$query=mysql_query("SELECT geblokkeerd FROM ipadressen WHERE ip = '".$_SERVER["REMOTE_ADDR"]."'");
wanneer je met user-accounts werkt om de pagina te kunnen bezoeken is het wellicht handiger om een gebruiker te blokkeren ipv een ip-adres, ik weet alleen niet of het voor je pagina handig is om gebruik te maken van useraccounts