[php] Mijn ip ban werkt niet?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Hey,

technisch gezien lijkt het me niet mogelijk, aangezien m'n ip ban (naar mijn weten) gewoon klopt, maar toch zien we nog steeds mensen die een ip ban hebben onder dat ip posten en kloten op onze site.
Ik dacht eerst dat hij misschien anoniem zou surfen, maar dan zie je het ip natuurlijk niet meer staan bij z'n nieuwe postings, en dat zien we wel :)

Het ip check ik zo:

PHP:
1
2
3
4
5
6
7
8
<?
// ip checken
if ($_SERVER[HTTP_X_FORWARDED_FOR]){
    $ip = "$_SERVER[HTTP_X_FORWARDED_FOR]";
} else {
    $ip = "$_SERVER[REMOTE_ADDR]";
}
?>


De ban voer ik zo uit, alle ip's staan in een tabel genaamd ipbans, die ip's gooi ik in een array, en als het huidige ip in die array voorkomt moet hij ermee stoppen.
Niet echt nodig om hier ook de code van te posten, maar ik zal het toch maar even doen:

PHP:
1
2
3
4
5
6
7
8
9
10
<?
$sql = "SELECT ip FROM ipbans";
$result = mysql_query($sql);
while ($record = mysql_fetch_object($result)) {
    $ips[] = "$record->ip";
}
if (in_array("$ip",$ips)) {
    exit;
}
?>


Technisch gezien moet je nu toch niet meer kunnen posten vanaf een ip dat in de ip bans tabel staat, of kijk ik echt ergens gigantisch overheen? :/

Acties:
  • 0 Henk 'm!

Verwijderd

die(); ipv exit?

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

PHP:
1
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
;)
je kan ook
PHP:
1
getenv('HTTP_X_FORWARDED_FOR');
gebruiken.

Verder zou ik die check meteen in mysql uitvoeren, met
MySQL:
1
SELECT COUNT(*) FROM ipbans WHERE '$ip' LIKE ip
zodat je IP's als wildcard in de db kan zetten (192.%.168.1._ bv)

En is de rest niet gewoon debugwerk?

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13:04
Werkt het wel als je je query iets maakt als 'SELECT ip FROM ipbans WHERE ip = '111.222.33.44'', en dan controleert of er een record is (of desnoods met een count of zo)? De manier waarop je het nu doet is nogal omslachtig.
Wordt je DB goed bijgewerkt?

Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
chem schreef op 30 januari 2003 @ 10:28:
PHP:
1
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
;)
je kan ook
PHP:
1
getenv('HTTP_X_FORWARDED_FOR');
gebruiken.

Verder zou ik die check meteen in mysql uitvoeren, met
MySQL:
1
SELECT COUNT(*) FROM ipbans WHERE '$ip' LIKE ip
zodat je IP's als wildcard in de db kan zetten (192.%.168.1._ bv)

En is de rest niet gewoon debugwerk?
Thanks, een hele tijd terug is me ooit wijs gemaakt dat je ip's op bovenstaande manier moest checken :)
Euhm, dat maakt toch niet veel uit?

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

iig zou ik variabelen niet checken/setten/whatever met
PHP:
1
"$ip" = ..
, die " maakt het maar nodeloos langzamer en trager :)

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Chem, ik moet bij mijzelf al REMOTE_ADDR gebruiken, want bij mij is HTTP_X_FORWARDED_FOR helemaal leeg.

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

Je kan ook het beste zowel de x-fwd-for checken als de rem-addr, aangezien x-fwd-for te vervalsen is zonder een proxy te gebruiken.

Dus zoiets als
MySQL:
1
... WHERE '$ip' LIKE ip OR '$ip2' LIKE ip  ...

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

Verwijderd

TangLeFuzZ schreef op 30 January 2003 @ 10:30:
[...]

Euhm, dat maakt toch niet veel uit?
Geen idee.. :) ik gebruik altijd 'die'.

Kun je anders niet gewoon checken of 't ip voorkomt in de database met een directe select? Zoiets dus:

PHP:
1
2
3
4
5
6
7
$result = mysql_query('SELECT * FROM bans WHERE ip=\'' . $ip . '\'', $DBlink)
if (mysql_num_rows($result) == 0) {
    return false;
}
else {
    return true;
}

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

die
die -- Alias of exit()
Description
This function is an alias of exit().

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Mijn oude ip check werkte trouwens wel gewoon bij mij hoor, daarom was het niet echt een kwestie van debuggen, als ik (en andere lui waar ik het bij testte) mezelf/ons bande, dan waren we ook daadwerkelijk geband.
Verwijderd schreef op 30 januari 2003 @ 10:41:
[...]

Geen idee.. :) ik gebruik altijd 'die'.

Kun je anders niet gewoon checken of 't ip voorkomt in de database met een directe select? Zoiets dus:
Ja, dat heb ik nu gedaan, eens kijken of het werkt :)
Mysql_num_rows is trouwens nogal traag, doe het liever met count(ip).

Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Nog even voor Chem; als ik dat zou doen zou ik dus ook bij elke posting/logactie 2 ip's moeten loggen, hetgeen dat in REMOTE_ADDR zit en hetgeen in HTTP_X_FORWARDED_FOR, niet?
Dan worden bepaalde zaken wel weer vrij lastig...maar ok, dat moet dan maar :)

Ik heb nu in ieder geval m'n ip check zo gemaakt dat hij checkt of 1 van die 2 in de db zit zoals je al aangaf, ben benieuwd hoe het nu gaat...

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

2 IP's loggen is iets anders dan 2 IP's checken, nietwaar?
Ik zou enkel het echte, betrouwbare rem-addr bewaren als je niet alle 2 kan doen. Als er veel misbruik is via een proxy dan hebben ze pech :)

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 13:20

BrZ

chem schreef op 30 januari 2003 @ 10:38:
Je kan ook het beste zowel de x-fwd-for checken als de rem-addr, aangezien x-fwd-for te vervalsen is zonder een proxy te gebruiken.

Dus zoiets als
MySQL:
1
... WHERE '$ip' LIKE ip OR '$ip2' LIKE ip  ...
Ok, of ik ben niet goed wakker, maar is het niet
code:
1
WHERE ip LIKE '$ip' OR ip LIKE '$ip2'

:?

Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-09 01:23
Tja, alles leuk en aardig, maar heeft de topicstarter nu een oplossing voor zijn probleem?? Ik bedoel, hij zei dat iemand met een gebanned ip toch nog kan posten. Ok, zijn script is bevestigd dat het klopt.
Ik vindt het maar raar dat mensen toch nog kunnen posten. Weet je zeker dat je wel overal controleert of het ip adres gebanned is??

Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

Ik weet niet of het wat uitmaakt, maar in de code die je boven hebt gegeven schreef je exit; ipv. exit(); Volgens mij is exit() een methode en moet je hem op deze manier aanroepen..

The hardest thing in the world to understand is the income tax. - Albert Einstein


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-09 01:23
esf schreef op 30 januari 2003 @ 21:38:
Ik weet niet of het wat uitmaakt, maar in de code die je boven hebt gegeven schreef je exit; ipv. exit(); Volgens mij is exit() een methode en moet je hem op deze manier aanroepen..
Mwah, exit; kan ook, maar zoals je zelf al zegt is het idd een methode dus exit(); is zeker beter (en moet in mijn ogen zelfs).

Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

offtopic:
Ik heb het opgezocht in de php docs en het is geen functie, dus de () hoeven niet. Een beetje raar van PHP dat je methoden en niet-methoden hebt die op dezelfde manier kunnen worden uitgevoerd. Bij exit zijn () optioneel


Maar moeten HTTP_X_FORWARDED_FOR en REMOTE_ADDR dan niet met ""'s?

The hardest thing in the world to understand is the income tax. - Albert Einstein


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-09 01:23
Single of double quotes mag allebei. Ze gebruiken double quotes meestal voor strings en single voor functies.
PHP:
1
2
$tekst = "dit is tekst";
$getvar = $_GET['getvar_naam'];

Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

FlamerX schreef op 03 February 2003 @ 23:15:
Single of double quotes mag allebei. Ze gebruiken double quotes meestal voor strings en single voor functies.
PHP:
1
2
$tekst = "dit is tekst";
$getvar = $_GET['getvar_naam'];
Ja maar de topicstarter gebruikte helemaal geen quotes tussen de [ en ].

The hardest thing in the world to understand is the income tax. - Albert Einstein


Acties:
  • 0 Henk 'm!

  • Millennium
  • Registratie: Augustus 2000
  • Laatst online: 14-09 18:02

Millennium

Bug free !!!

HTTP_X_FORWARD_FOR kan meerdere IP adressen bevatten. Dus als iemand via 2 proxy surft, zal je het IP nooit terug vinden door te zoeken op $ip. Want die zal in dit geval 2 IP adressen bevatten (gescheiden door ","). Dit zou dus een oorzaak kunnen zijn van het niet altijd werken.

Rampen bak 2004

Pagina: 1