/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Anti-Hacker Denial of Service i php
Fra : Tom Brøndsted


Dato : 31-01-06 23:29

På mit site ligger der en del meget gamle tekster med afvigende
stavemåde. F.eks. er der en maler der i 1790 "brøster" sig af
forskellige ting. Med det resultat, at folk (der ikke kan stave)
undertiden bliver lokket til ved at søge på "store brøster"!

I denne hysteriske tid er der også ganske mange fra eksotiske lande der
lokkes til ved at søge på "Jylland" og "Posten" samt en afvigende
stavemåde af en hvis herre, der har været afbilledet i en større dansk
avis. Noget mere ubehageligt!

Jeg har lavet et program (i c) der autogenerer en php funktion ud fra en
ip-to-country.csv. Funktionen returnerer en tom side (exit'er), hvis den
besøgendes IP er fra et område, jeg ikke ønsker besøg fra. Funktionen er
en masse "if - else" sætninger, ialt ca. 100 kb. Dette er af mange
grunde ikke optimalt. Hvad kan man ellers gøre?

mvh tb

PS jeg vil være taknemmelig hvis vi kan holde os til det tekniske.

 
 
Michael Zedeler (01-02-2006)
Kommentar
Fra : Michael Zedeler


Dato : 01-02-06 00:01

Tom Brøndsted wrote:

> Jeg har lavet et program (i c) der autogenerer en php funktion ud fra en
> ip-to-country.csv. Funktionen returnerer en tom side (exit'er), hvis den
> besøgendes IP er fra et område, jeg ikke ønsker besøg fra. Funktionen er
> en masse "if - else" sætninger, ialt ca. 100 kb. Dette er af mange
> grunde ikke optimalt. Hvad kan man ellers gøre?

Det mest optimale er, at overlade arbejdet til Apache, så PHP slet ikke
bliver aktiveret. Put det hele i en .htaccess-fil eller andetsteds i
konfigurationen.

Hvis det ikke kan lade sig gøre, så stop din liste af ip-numre i en
indeks-fil, som er hurtig at slå op i. Hvis du har adgang til Berkeley
DB, er det vejen frem (bemærkning 1: se
http://dk.php.net/manual/en/ref.dba.php) (bemærkning 2: du kan få Apache
til at bruge lignende filer i mod_rewrite).

Det er ofte hurtigere at bruge denne løsning frem for relationelle
databaser, da dette reelt bare en en (lille) fil, som er meget effektivt
indekseret.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Tom Brøndsted (01-02-2006)
Kommentar
Fra : Tom Brøndsted


Dato : 01-02-06 00:51

Michael Zedeler wrote:

> Tom Brøndsted wrote:
>
>> Jeg har lavet et program (i c) der autogenerer en php funktion ud fra
>> en ip-to-country.csv. Funktionen returnerer en tom side (exit'er),
>> hvis den besøgendes IP er fra et område, jeg ikke ønsker besøg fra.
>> Funktionen er en masse "if - else" sætninger, ialt ca. 100 kb. Dette
>> er af mange grunde ikke optimalt. Hvad kan man ellers gøre?
>
>
> Det mest optimale er, at overlade arbejdet til Apache, så PHP slet ikke
> bliver aktiveret. Put det hele i en .htaccess-fil eller andetsteds i
> konfigurationen.
>
> Hvis det ikke kan lade sig gøre, så stop din liste af ip-numre i en
> indeks-fil, som er hurtig at slå op i. Hvis du har adgang til Berkeley
> DB, er det vejen frem (bemærkning 1: se
> http://dk.php.net/manual/en/ref.dba.php) (bemærkning 2: du kan få Apache
> til at bruge lignende filer i mod_rewrite).
>
> Det er ofte hurtigere at bruge denne løsning frem for relationelle
> databaser, da dette reelt bare en en (lille) fil, som er meget effektivt
> indekseret.
>
> Mvh. Michael.

Tak for dit svar Michael.

Måske ved jeg for lidt om .htaccess-syntaksen. Som du sikkert ved er de
forskellige områders ip-adresser defineret i "ranges", f.eks. er Island
i områderne fra-til
"1049722880","1049731071","IS","ISL","ICELAND"
OG
"1358434304","1358438399","IS","ISL","ICELAND"
OG
"1359937536","1359970303","IS","ISL","ICELAND"
osv.

Hvordan kan det klares i .htaccess?

mvh tb

Michael Zedeler (01-02-2006)
Kommentar
Fra : Michael Zedeler


Dato : 01-02-06 09:18

Tom Brøndsted wrote:
> Michael Zedeler wrote:
>
>> Tom Brøndsted wrote:
>>
>>> Jeg har lavet et program (i c) der autogenerer en php funktion ud fra
>>> en ip-to-country.csv. Funktionen returnerer en tom side (exit'er),
>>> hvis den besøgendes IP er fra et område, jeg ikke ønsker besøg fra.
>>> Funktionen er en masse "if - else" sætninger, ialt ca. 100 kb. Dette
>>> er af mange grunde ikke optimalt. Hvad kan man ellers gøre?
>>
>> Det mest optimale er, at overlade arbejdet til Apache, så PHP slet
>> ikke bliver aktiveret. Put det hele i en .htaccess-fil eller
>> andetsteds i konfigurationen.
>
> Måske ved jeg for lidt om .htaccess-syntaksen. Som du sikkert ved er de
> forskellige områders ip-adresser defineret i "ranges", f.eks. er Island
> i områderne fra-til
> "1049722880","1049731071","IS","ISL","ICELAND"
> OG
> "1358434304","1358438399","IS","ISL","ICELAND"
> OG
> "1359937536","1359970303","IS","ISL","ICELAND"
> osv.
>
> Hvordan kan det klares i .htaccess?

Du er nødt til at konvertere den ovenstående fil til blok-syntaks eller
noget lignende for at få noget som Apache kan håndtere. Du kan se hvad
mulighederne i Apache er i manualen:

http://httpd.apache.org/docs/2.0/mod/mod_access.html

eller (mere kompliceret)

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

Omregning til dot-syntaks (som Apache bruger) står der noget om her:

http://ip-to-country.webhosting.info/node/view/55

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Johan Holst Nielsen (01-02-2006)
Kommentar
Fra : Johan Holst Nielsen


Dato : 01-02-06 12:09

Tom Brøndsted wrote:
> Jeg har lavet et program (i c) der autogenerer en php funktion ud fra en
> ip-to-country.csv. Funktionen returnerer en tom side (exit'er), hvis den
> besøgendes IP er fra et område, jeg ikke ønsker besøg fra. Funktionen er
> en masse "if - else" sætninger, ialt ca. 100 kb. Dette er af mange
> grunde ikke optimalt. Hvad kan man ellers gøre?

Forstår ikke helt hvorfor der er SÅ mange if - elseif'er?

Hvis det udelukkende er ip-to-country ville det (imho) være nemmere at
smide det i en database - og køre en enkelt forespørgsel og tjekke landet?

mvh
Johan

Tom Brøndsted (01-02-2006)
Kommentar
Fra : Tom Brøndsted


Dato : 01-02-06 12:55

Johan Holst Nielsen wrote:
> Tom Brøndsted wrote:
>
>> Jeg har lavet et program (i c) der autogenerer en php funktion ud fra
>> en ip-to-country.csv. Funktionen returnerer en tom side (exit'er),
>> hvis den besøgendes IP er fra et område, jeg ikke ønsker besøg fra.
>> Funktionen er en masse "if - else" sætninger, ialt ca. 100 kb. Dette
>> er af mange grunde ikke optimalt. Hvad kan man ellers gøre?
>
>
> Forstår ikke helt hvorfor der er SÅ mange if - elseif'er?
>
> Hvis det udelukkende er ip-to-country ville det (imho) være nemmere at
> smide det i en database - og køre en enkelt forespørgsel og tjekke landet?
>
> mvh
> Johan

Hvis der er et Denial of Service angreb, drejer det sig jo om 1) at
skabe så lidt trafik som muligt (derfor returnere tom side) og 2)
belaste serveren mindst muligt med andet arbejde (db-opslag, indviklet
php-fortolkning).

Mht. pkt 2 havde jeg en idé om at et php-script ville være hurtigst, men
jeg skal gerne indrømme, at jeg ikke ved hvad htasccess, db (mySQL)
"koster" overfor min løsning.

mvh tb

Erlend Klakegg Bergh~ (01-02-2006)
Kommentar
Fra : Erlend Klakegg Bergh~


Dato : 01-02-06 14:08

Tom Brøndsted skrev:
> Johan Holst Nielsen wrote:
>> Tom Brøndsted wrote:
>>
>>> Jeg har lavet et program (i c) der autogenerer en php funktion ud fra
>>> en ip-to-country.csv. Funktionen returnerer en tom side (exit'er),
>>> hvis den besøgendes IP er fra et område, jeg ikke ønsker besøg fra.
>>> Funktionen er en masse "if - else" sætninger, ialt ca. 100 kb. Dette
>>> er af mange grunde ikke optimalt. Hvad kan man ellers gøre?
>>
>>
>> Forstår ikke helt hvorfor der er SÅ mange if - elseif'er?
>>
>> Hvis det udelukkende er ip-to-country ville det (imho) være nemmere at
>> smide det i en database - og køre en enkelt forespørgsel og tjekke
>> landet?
>>
>> mvh
>> Johan
>
> Hvis der er et Denial of Service angreb, drejer det sig jo om 1) at
> skabe så lidt trafik som muligt (derfor returnere tom side) og 2)
> belaste serveren mindst muligt med andet arbejde (db-opslag, indviklet
> php-fortolkning).
>
> Mht. pkt 2 havde jeg en idé om at et php-script ville være hurtigst, men
> jeg skal gerne indrømme, at jeg ikke ved hvad htasccess, db (mySQL)
> "koster" overfor min løsning.

Du kunne lagt det inn i en database, men for å slippe å hente databasen
hver gang det kommer en ny IP bør du lage en blacklist i en fil som
inneholder registrerte IPer som skal blokkes, og heller la siden
kontrollere den hvis f.eks. $_SESSION["noblock"] = true (kontroll av
session før blokk). Jeg vil tro at du på den måten kan presse ned
arbeidet til serveren til et minimum.

--

Vennlig hilsen

Erlend Klakegg Bergheim

Michael Zedeler (01-02-2006)
Kommentar
Fra : Michael Zedeler


Dato : 01-02-06 18:09

Tom Brøndsted wrote:
> Johan Holst Nielsen wrote:
>
>> Tom Brøndsted wrote:
>>
>>> Jeg har lavet et program (i c) der autogenerer en php funktion ud fra
>>> en ip-to-country.csv. Funktionen returnerer en tom side (exit'er),
>>> hvis den besøgendes IP er fra et område, jeg ikke ønsker besøg fra.
>>> Funktionen er en masse "if - else" sætninger, ialt ca. 100 kb. Dette
>>> er af mange grunde ikke optimalt. Hvad kan man ellers gøre?
>>
>> Forstår ikke helt hvorfor der er SÅ mange if - elseif'er?
>>
>> Hvis det udelukkende er ip-to-country ville det (imho) være nemmere at
>> smide det i en database - og køre en enkelt forespørgsel og tjekke
>> landet?
>
> Hvis der er et Denial of Service angreb, drejer det sig jo om 1) at
> skabe så lidt trafik som muligt (derfor returnere tom side) og 2)
> belaste serveren mindst muligt med andet arbejde (db-opslag, indviklet
> php-fortolkning).

Men et stort PHP-script, der bliver kørt mange gange er også en
belastning. Det er oplagt at det vil performe rimeligt godt, men jo
tidligere man kan stoppe trafikken, jo bedre.

Her er en ret præcis beskrivelse af en blacklist i mod_rewrite:

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

Se afsnittet "Host Deny". Eksemplet skal modificeres så det kan tage
ip-intervaller og så det benytter en indekseret fil - f. eks. Berkeley
DB, dbm eller noget lignende.

> Mht. pkt 2 havde jeg en idé om at et php-script ville være hurtigst, men
> jeg skal gerne indrømme, at jeg ikke ved hvad htasccess, db (mySQL)
> "koster" overfor min løsning.

Jeg tror at performance vil være firewall < Apache < PHP-uden-RDBMS <
PHP-med-RDBMS.

Det hurtigste er altså hvis du kan blokere allerede i en firewall før
trafikken når din server.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste