|
| 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
| |
|
|