07. januar 2007 - 00:31Der 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
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.
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)
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).
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.
Synes godt om
Ny brugerNybegynder
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.