login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Beste manier voor Ip-ban

Offline voltrex - 14/05/2009 20:54
Avatar van voltrexLid 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)

Hoe zou ik dit nu het beste doen? (a/b)

Voltrex

27 antwoorden

Gesponsorde links
Offline GJ2086 - 14/05/2009 20:59
Avatar van GJ2086 Nieuw lid 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.
Offline voltrex - 14/05/2009 21:05
Avatar van voltrex Lid Is er ook een mogelijkheid zonder MySQL?  
Offline vinTage - 14/05/2009 21:09
Avatar van vinTage Nieuw lid PHP.net: fopen
PHP.net: fwrite

Kheb alleen geen idee of je .htaccess kan openen, maar dat mag je zelf testen, met een database is natuurlijk veel makkelijker te beheren ..
Offline voltrex - 14/05/2009 21:11
Avatar van voltrex Lid Ja, waarschijnlijk wel, maar ik heb (totaal) geen verstand van MySQL en het verbinden van php -> mysql 
Offline ArieMedia - 14/05/2009 21:24 (laatste wijziging 14/05/2009 21:30)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Het beste is gewoon zoals Vintage zegt, .htaccess =). fopen en fwrite toepassen, en klaar =)

Edit: Maar ik heb hem ook gewoon via MYSQL geregeld =).. Wel automatisch =)
Offline voltrex - 14/05/2009 22:03
Avatar van voltrex Lid Ik zit nu al heel de tijd te knoeien met het domste ding:
Ik moet mijn waarde van mijn veld in dit krijgen:
  1. $somecontent = "Deny from HIERWAARDE\n";

Heel dom, ik weet het  
Hoe moet ik dat doen? (veld noemt: ip)
Offline Koen - 14/05/2009 22:14 (laatste wijziging 14/05/2009 22:16)
Avatar van Koen PHP expert *zucht*
Dit is basiskennis, ik heb een fantastische site voor je. Je gaat hem zeker leuk vinden. Klik
Offline ArieMedia - 14/05/2009 22:17
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Eeeuh, als je het via de DB doet...

Waarom niet gewoon een tabel aanmaken
ID || IP || Reden

--------------
  1. $ip = addslashes($_SERVER['REMOTE_ADDR']);
  2. $sql = 'SELECT reden FROM banlijst WHERE ip = "'.$ip.'"';
  3. $res = mysql_query($sql);
  4. if(mysql_num_rows($res) != 0) {
  5. $rij = mysql_fetch_assoc($res);
  6. die('Je bent verbannen met de reden<br>'.$rij['reden']);
  7. }
Offline vinTage - 14/05/2009 23:17
Avatar van vinTage Nieuw lid en een timestamp, zodat je iemand een tempban kan geven ( zie je dat via een db veel geiler is ? )
Offline voltrex - 15/05/2009 16:38
Avatar van voltrex Lid Ja weet ik maar ik heb al reeds dingen geprobeerd met een db maar geen ervan werkte  
Offline Koen - 15/05/2009 16:45
Avatar van Koen PHP expert ..Zonder code zijn we niets..
Offline ArieMedia - 15/05/2009 16:50
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
voltrex schreef:
Ja weet ik maar ik heb al reeds dingen geprobeerd met een db maar geen ervan werkte  
Ga gewoon SQL leren, Ga naar php.net en zoek MYSQL-functies op.
Offline voltrex - 15/05/2009 16:50 (laatste wijziging 15/05/2009 17:17)
Avatar van voltrex Lid @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?
Offline kevboy09 - 16/05/2009 16:44 (laatste wijziging 16/05/2009 16:47)
Avatar van kevboy09 Nieuw lid Tabellen aanmaken is heel simpel te doen in php hoor  

  1. CREATE TABLE ipban (
  2. `id` INT NOT NULL AUTO_INCREMENT ,
  3. `ipadres` VARCHAR( 20 ) NOT NULL ,
  4. `reason` text() NOT NULL,
  5. PRIMARY KEY (id)
  6. ) TYPE=MyISAM;


Dit is heel simpel tabelletje voor een ip-ban script.

Sliphead schreef:
Code tags!
Offline voltrex - 16/05/2009 19:03 (laatste wijziging 16/05/2009 19:07)
Avatar van voltrex Lid 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.?  
Offline Koen - 16/05/2009 19:21
Avatar van Koen PHP expert Die haakjes na text hoeven daar niet volgens mij.
Offline voltrex - 16/05/2009 19:27 (laatste wijziging 16/05/2009 19:44)
Avatar van voltrex Lid Ok, nu geeft hij geen error (merci Sliphead ).

Maar even dit om weer een topic in de toekomst te voorkomen:
Klopt dit dan om iets toe te voegen:
  1. <?php
  2. $query="INSERT INTO ipban (ipadres, reden) VALUES ('$ipadres', '$reden')";
  3. mysql_query($query) OR die (mysql_error());
  4. ?>

(ik heb reason in reden veranderd in mijn database).
Of moet ik id er ook nog bijzetten?
Offline maigel - 16/05/2009 19:48 (laatste wijziging 16/05/2009 19:49)
Avatar van maigel PHP beginner variablen tussen double quotes, heel slim ...
Als ik jou was zou ik eerst wat meer theorie leren voor je aan het echte werk begint
Offline voltrex - 16/05/2009 19:53
Avatar van voltrex Lid Ik heb dat van een tutorial!
http://www.site...SQL/INSERT
Offline Martijn - 16/05/2009 20:28
Avatar van Martijn Crew PHP 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
Offline anton - 17/05/2009 10:52 (laatste wijziging 17/05/2009 10:53)
Avatar van anton 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:
  1. $s = "SELECT ban FROM gebruikers WHERE ip='".$_server['REMOTE_ADDR']."'";
  2. $q = mysql_query($s);
  3. if($q == 'ja'){
  4. de inhoud of text die er moet komen indien geband
  5. }
  6. else{
  7. de rest van je pagina
  8. }

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
Offline voltrex - 17/05/2009 17:10
Avatar van voltrex Lid Ok,
maar dit is de eerste keer dat ik echt MySQL gebruik,
dus in welk 'kader' moet ik Ja/nee zetten? (in de mysql database)?
Offline Koen - 17/05/2009 17:26
Avatar van Koen PHP expert
anton schreef:
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


Hoe kan een resource nu gelijk zijn aan "ja"  
Offline jc2 - 17/05/2009 20:26 (laatste wijziging 17/05/2009 20:26)
Avatar van jc2 PHP interesse 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?
Offline anton - 18/05/2009 00:02
Avatar van anton Lid
Sliphead schreef:
[..quote..]

Hoe kan een resource nu gelijk zijn aan "ja"  


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
Offline Martijn - 18/05/2009 10:28 (laatste wijziging 18/05/2009 10:29)
Avatar van Martijn Crew PHP wat slippie bedoeld, is dat je een query doet, en dan niet fetched maar wel gebruikt
Jij doet
  1. $query = mysql_query("blabla");
  2. if($query =="ja"){


maar dat kan niet. Query is een recourse, daarmoet je nog iets mee doen.
  1. $query = mysql_query("blabla");
  2. $fetch = mysql_fetch_assoc($query);
  3. if($fetch['kolom']=="ja"){

je moet een query zien als een commando om een dossier uit te kast te zoeken, en de fetch om het op je bureau te leggen zodat je er iets mee kunt.
Offline pbongers - 22/05/2009 11:58
Avatar van pbongers Nieuw lid 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.

en dan inderdaad in de pagina ietsdergelijks als:

  1. $query = mysql_query("SELECT geblokkeerd FROM ipadressen WHERE ip = '" . $_SERVER["REMOTE_ADDR"] . "'");
  2. $fetch = mysql_fetch_assoc($query);
  3. if($fetch['geblokkkeerd']==true){
  4. // hier de code wanneer ip geblokkeerd is
  5. }
  6. else{
  7. // hier de code wanneer ip niet geblokkeerd is
  8. }


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
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.238s