/ 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
php-formular uønsket brug
Fra : Lotte M


Dato : 23-09-05 20:39

Jeg har en php-formular til en lille forening og vi oplever noget sært!

Indenfor 2 minutter sendes 50 udfyldte formularer. I hver formular
indeholder felterne en email-adresse a la:
pladder@foreningens-domænenavn.dk

Alle de anvendte emailadresser er vores eget domæne, men ugyldige
adresser. Alle felter i hver formular indeholder samme adresse, feks
også et postnr felt, hvor der kun kan indtastes 4 tal, ligeså indeholder
radio buttons felter emailadressen.

Hvad mon der sker med vores formular og hvordan kan jeg forhindre dette
uønskede brug?
--
Lotte M - http://www.lotte-m.dk/
Klubben for Brugere og Hjælpere i Nordjylland - http://www.kbh-nord.dk/

 
 
Geert Lund (23-09-2005)
Kommentar
Fra : Geert Lund


Dato : 23-09-05 21:03

Lotte M wrote:

> Hvad mon der sker med vores formular og hvordan kan jeg forhindre dette
> uønskede brug?

Det er den "nye" metode til at udsende spam - der fuskes med formularens
data og hvis ikke du får inputtet valideret rigtigt inden afsendelse af
mailen vil en spammer kunne bruge din formular til at afsende spam.

Check fx http://securephp.damonkohler.com/index.php/Email_Injection

som beskriver emnet.

--
Med venlig hilsen
Geert Lund,
www.GLD.dk

Lotte M (23-09-2005)
Kommentar
Fra : Lotte M


Dato : 23-09-05 21:48

Geert Lund skrev:

>> Hvad mon der sker med vores formular og hvordan kan jeg forhindre dette
>> uønskede brug?
>
> Det er den "nye" metode til at udsende spam

ØV!

> Check fx http://securephp.damonkohler.com/index.php/Email_Injection

Tak - jeg er helt og aldeles grøn udi php og forstår ikke konkret hvad
spammeren gør, ligesom jeg heller ikke begriber "kuren".

<?php
$from=$_POST["sender"];
if (eregi("\r",$from) || eregi("\n",$from)){
die("Why ?? :(");
}
?>

Hvad er der der sker ovenfor?

--
Lotte M - http://www.lotte-m.dk/
Klubben for Brugere og Hjælpere i Nordjylland - http://www.kbh-nord.dk/

Jacob Atzen (24-09-2005)
Kommentar
Fra : Jacob Atzen


Dato : 24-09-05 09:46

On 2005-09-23, Lotte M <post@lotte-m.dk> wrote:
> <?php
> $from=$_POST["sender"];
> if (eregi("\r",$from) || eregi("\n",$from)){
> die("Why ?? :(");
> }
> ?>
>
> Hvad er der der sker ovenfor?

Man checker, at om "sender" feltet fra formularen indeholder
carriage return (\r) eller newline (\n) og i så fald stopper man
scriptet.

Pointen er, at angriberen prøver at tilføje flere headerlinier (så
angriberen kan sætte flere modtagere på mailen) til den mail du afsender
og ovenstående sikrer, at dette ikke kan lade sig gøre.

--
Med venlig hilsen
- Jacob Atzen

Lotte M (24-09-2005)
Kommentar
Fra : Lotte M


Dato : 24-09-05 11:45

Jacob Atzen skrev:

> Pointen er, at angriberen prøver at tilføje flere headerlinier (så
> angriberen kan sætte flere modtagere på mailen) til den mail du afsender
> og ovenstående sikrer, at dette ikke kan lade sig gøre.

Hmm - jeg er i tvivl om hvor i scriptet filteret skal bruges - skal
hvert felt i formen filtreres, eller er det ifm mailfunktionen?
--
Lotte M - http://www.lotte-m.dk/
Klubben for Brugere og Hjælpere i Nordjylland - http://www.kbh-nord.dk/

Benny Nissen (24-09-2005)
Kommentar
Fra : Benny Nissen


Dato : 24-09-05 12:27

Lotte M wrote:
> Jacob Atzen skrev:
>
>
>>Pointen er, at angriberen prøver at tilføje flere headerlinier (så
>>angriberen kan sætte flere modtagere på mailen) til den mail du afsender
>>og ovenstående sikrer, at dette ikke kan lade sig gøre.
>
>
> Hmm - jeg er i tvivl om hvor i scriptet filteret skal bruges - skal
> hvert felt i formen filtreres, eller er det ifm mailfunktionen?

Du bør nok gøre det på hver felt.
Grundreglen er vel, at _alt_ brugerinput skal valideres før det bruges
til noget. Brugere er nogle mærkeligt størrelser, for de kan finde på
alt muligt mærkligt.
Derfor skal du sørge for, at du _kun_ får de data i de forskellige
variblaer, som du vitterligt ønsker.

--
Benny Nissen

Lotte M (24-09-2005)
Kommentar
Fra : Lotte M


Dato : 24-09-05 13:57

Benny Nissen skrev:

> Grundreglen er vel, at _alt_ brugerinput skal valideres før det bruges
> til noget. Brugere er nogle mærkeligt størrelser, for de kan finde på
> alt muligt mærkligt.
> Derfor skal du sørge for, at du _kun_ får de data i de forskellige
> variblaer, som du vitterligt ønsker.

Pyha!

Jeg kontrollerer kun om felterne er udfyldt:
if (isset($_POST['indmeld'])) {   
   $fejl=FALSE;            
   $navn = $_POST['navn'];
   if ($navn=="")            
      $fejl=TRUE;      

hvis det er en god ide at bruge:
<?php
$from=$_POST["sender"];
if (eregi("\r",$from) || eregi("\n",$from)){
die("Why ?? :(");
}
?>

Hvordan skriver jeg det så ind i min feltvalidering ovenfor?

Er det muligt at tjekke om en e-mailadresse er valid?
--
Mange hilsner

Lotte M - http://www.lotte-m.dk/
Klubben for Brugere og Hjælpere i Nordjylland - http://www.kbh-nord.dk/

Jacob Atzen (24-09-2005)
Kommentar
Fra : Jacob Atzen


Dato : 24-09-05 16:36

On 2005-09-24, Lotte M <post@lotte-m.dk> wrote:
> Jeg kontrollerer kun om felterne er udfyldt:
> if (isset($_POST['indmeld'])) {   
>    $fejl=FALSE;            
>    $navn = $_POST['navn'];
>    if ($navn=="")            
>       $fejl=TRUE;      
>
> hvis det er en god ide at bruge:
><?php
> $from=$_POST["sender"];
> if (eregi("\r",$from) || eregi("\n",$from)){
> die("Why ?? :(");
> }
> ?>
>
> Hvordan skriver jeg det så ind i min feltvalidering ovenfor?

Det er lidt svært at svare på, når vi ikke ved, hvilke felter du henter
ind fra $_POST. Prøv at poste hele dit script på www.pastebin.com så vi
kan se, hvad det er du laver.

> Er det muligt at tjekke om en e-mailadresse er valid?

Det er muligt at checke, om den overholder kravene til en gyldig
e-mailadresse. Det er umuligt at vide, om der er nogen, der læser den
uden at sende en mail til den og få modtageren til at bekræfte
modtagelsen.

--
Med venlig hilsen
- Jacob Atzen

Lotte M (24-09-2005)
Kommentar
Fra : Lotte M


Dato : 24-09-05 21:49

Jacob Atzen skrev:

> Prøv at poste hele dit script på www.pastebin.com så vi
> kan se, hvad det er du laver.

Ok - jeg håber, jeg har gjort det rigtigt!
http://lotte-m.pastebin.com/373117

>> Er det muligt at tjekke om en e-mailadresse er valid?
>
> Det er muligt at checke, om den overholder kravene til en gyldig
> e-mailadresse. Det er umuligt at vide, om der er nogen, der læser den
> uden at sende en mail til den og få modtageren til at bekræfte
> modtagelsen.

Hmm, jeg kan godt se, at nytten af valideringen er begrænset.
--
Lotte M
http://www.lotte-m.dk/

Jacob Atzen (24-09-2005)
Kommentar
Fra : Jacob Atzen


Dato : 24-09-05 22:27

On 2005-09-24, Lotte M <post@lotte-m.dk> wrote:
> Ok - jeg håber, jeg har gjort det rigtigt!
> http://lotte-m.pastebin.com/373117

Det har du. Det ser ud som om variablen $email_bestiller er den eneste
kritiske. Sørg for at checke, at den kun indeholder en e-mailadresse og
ikke andet. Du vil formentlig checke både for newlines, carriage return
og kommaer (der i så fald vil gøre det muligt, at sende mailen til flere
personer). Hvis du yderligere vil gøre noget for at stoppe misbrug kan
du f.eks. logge IP adressen mailen formularen submittes fra og nægte
gentagne submits.

Jeg vil i øvrigt anbefale dig at prøve at dele din kode op i flere og
mindre bidder. Den måde du blander PHP og HTML gør det meget svært at
overskue, hvad det er, der foregår.

--
Med venlig hilsen
- Jacob Atzen

Lotte M (26-09-2005)
Kommentar
Fra : Lotte M


Dato : 26-09-05 21:00

Jacob Atzen skrev:

>> http://lotte-m.pastebin.com/373117

> Sørg for at checke, at den kun indeholder en e-mailadresse og
> ikke andet.

Hvordan gør jeg det?

> Du vil formentlig checke både for newlines, carriage return
> og kommaer (der i så fald vil gøre det muligt, at sende mailen til flere
> personer).

Jeg har indsat (i linje 49):
$email_bestiller=$_POST["email_bestiller"];
if (eregi("\r",$from) || eregi("\n",$from) || eregi(",",$from)){
die("Why ?? :(");
}

- mit script fungerer stadig, men er stumpen ovenfor rigtig?

> Hvis du yderligere vil gøre noget for at stoppe misbrug kan
> du f.eks. logge IP adressen mailen formularen submittes fra og nægte
> gentagne submits.

Det lyder fornuftigt, desværre rækker mine evner ikke så langt!
--
Lotte M - http://www.lotte-m.dk/
Klubben for Brugere og Hjælpere i Nordjylland - http://www.kbh-nord.dk/

Leonard (27-09-2005)
Kommentar
Fra : Leonard


Dato : 27-09-05 07:50

Jacob Atzen <jacob@aub.dk> wrote:

>Du vil formentlig checke både for newlines, carriage return
>og kommaer (der i så fald vil gøre det muligt, at sende mailen til flere
>personer).

Er det ikke bedre at tjekke for de tegn der gerne må være i en
mailadresse ?

--
mvh Leonard
Har du kigget på: http://dk.php.net/ el. http://www.webcafe.dk/

Jacob Atzen (24-09-2005)
Kommentar
Fra : Jacob Atzen


Dato : 24-09-05 12:30

On 2005-09-24, Lotte M <post@lotte-m.dk> wrote:
> Jacob Atzen skrev:
>
>> Pointen er, at angriberen prøver at tilføje flere headerlinier (så
>> angriberen kan sætte flere modtagere på mailen) til den mail du afsender
>> og ovenstående sikrer, at dette ikke kan lade sig gøre.
>
> Hmm - jeg er i tvivl om hvor i scriptet filteret skal bruges - skal
> hvert felt i formen filtreres, eller er det ifm mailfunktionen?

Du bør principielt altid validere input fra kilder du ikke stoler på -
f.eks. formularer.

--
Med venlig hilsen
- Jacob Atzen

Benny Nissen (24-09-2005)
Kommentar
Fra : Benny Nissen


Dato : 24-09-05 12:33

Jacob Atzen wrote:

> Du bør principielt altid validere input fra kilder du ikke stoler på -
> f.eks. formularer.
>

Og det vil sige alt, hvad brugeren kan pille ved.

--
Benny Nissen

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste