Avatar billede s_f Nybegynder
07. januar 2007 - 00:31 Der er 8 kommentarer og
1 løsning

Ban script - mange IP'er

Hej, da jeg har oplevet en del spam i en gæstebog på en website jeg administerer manger jeg en ban script til alle de ip adresser jeg har registeret i den forbindelse.. Jeg har selv fundet frem til dette, hurtige simple script:

<?php

$bannedIps = array();
$bannedIps[] = "127.0.0.1";

if ($_SERVER["REMOTE_ADDR"] == $bannedIps) {
    echo("You have been banned!");
    exit();
}
?>

Mit problem er jeg har omkring 30 ip adresser jeg vil have bannet, så mangler en html form, eller noget så jeg kan tilføje dem alle, og ikke skal side og gøre det manuelt - ellers får jeg da gigt :D

Mvh.
Avatar billede hberg Nybegynder
07. januar 2007 - 01:14 #1
Uanset om du vil tilføje dine bannede adresser fra en form eller du vil indsætte dem direkte i din sourcekode, så skal du jo tilføje dem manuelt - tror sågar det er lidt nemmere at 'hardcode' i din sourcekode, men det gør det selvfølgelig ikke så elegant at tilføje nye adresser.

Hvis du vil kunne banne nye adresser via en form kræver det en database på din webserver. Hvis du har det, så er det nemt at lave en tabel med bannede adresser og derefter bare lave en:

SELECT COUNT(*) from banned_ips_table where ip_address = $_SERVER["REMOTE_ADDR"]

hvis det er 0 er adressen godkendt, ellers er den bannet.
Avatar billede hmortensen Nybegynder
07. januar 2007 - 01:29 #2
Eller du kan smide dem i en tekstfil, en på hver linie.

Når folk så kommer ind på siden:

$ips = file("BannedIps.txt");
if (in_array($_SERVER['REMOTE_ADDR'], $ips))
{
  echo "You have been banned!";
  exit;
}
Avatar billede s_f Nybegynder
07. januar 2007 - 01:51 #3
hberg - hvis dit forslag skulle virke, skulle det være at hvis 0 så er adressen _ikke_ godkendt, jeg kan jo ikke tilføje alle de adresser jeg vil have derind, dem kender jo ikke..

hmortensen - genialt, det var da nemt - smid svar :O)
Avatar billede hmortensen Nybegynder
07. januar 2007 - 01:52 #4
Ved du hvordan du skriver ip'erne ind i en tekstfil via en form?
Avatar billede coderdk Praktikant
07. januar 2007 - 02:01 #5
s_f, Nej, hberg's er god nok, hvis query'en returnerer 0 så har du ikke indsat adressen som banned ;)
Avatar billede hmortensen Nybegynder
07. januar 2007 - 02:06 #6
Yup, men måske en sjat hurtigere med en tekstfil i det her tilfælde, afhængig af hvor mange der skal bannes. Hvis det er mange 1000 er db søgning nok hurtigere (ved ikke hvilken søge algoritme in_array() bruger).
Avatar billede coderdk Praktikant
07. januar 2007 - 02:15 #7
Enig, enig, ville bare lige påpeje at der intet galt var i hbergs ;)
Avatar billede s_f Nybegynder
07. januar 2007 - 12:10 #8
Okay så læste jeg hberg's forslag forkert.

Jeg lukker nu..
Avatar billede hberg Nybegynder
08. januar 2007 - 15:56 #9
Som andre også påpeger så kan der være lidt overvejelser mht. effektivitet. Hvis du har RIGTIG mange adresser du skal banne, så er løsningen med en teksfil alt andet end optimal. Jeg kender ikke implementation af in_array(), men så vidt jeg kan se, så kan du ikke undgå en lineær søgning af alle linierne i filen, medmindre seævfølgelig du kan garantere at filen er sorteret, men det tror jeg slet ikke in_array() tager hensyn til.

Desuden vil løsningen med en fil altid give et ekstra hit på disken og det kan være dyrt for en stor side. Ved DB løsningen kan du være heldig at din query er cachet eller at tabellen er lille nok til at dit DBMS kan holde den i memory.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester