|
| email injection Fra : J Christensen |
Dato : 11-02-06 17:14 |
|
Jeg har været så uheldig, at en emailformular på min hjemmeside er
blevet brugt til at sende emails i alle retninger (jeg har som
webmaster fået alle fejlmeldingerne).
Jeg er nu (!) ved at lave lidt forebyggende og har læst og kopieret
noget kode:
if (eregi("\r",$navn) || eregi("\n",$navn) || eregi("@",$navn)) {
die("Ingen emailadresse i navnefeltet, tak");
}
men jeg kan indsætte alle de \r\n, jeg vil, i feltet, hvorimod der
reageres, som der bør, ved et snabel-a.
Hvad er det lige, jeg ikke har forstået.....
Og er det ikke nok, at der ikke kan indsættes en emailadresse (og at
der ikke kan sættes kommaer i emailfeltet)?
Mvh.
Janni Christensen
| |
Erik Ginnerskov (12-02-2006)
| Kommentar Fra : Erik Ginnerskov |
Dato : 12-02-06 01:09 |
| | |
Dennis Munding (12-02-2006)
| Kommentar Fra : Dennis Munding |
Dato : 12-02-06 13:26 |
|
Hej Erik!
"Erik Ginnerskov" <erik@donotspammmeplease.invalid> skrev i en meddelelse
news:43ee7c96$0$15788$14726298@news.sunsite.dk...
> Prøv at kigge på denne side. Den er lige blevet opdateret af samme grund:
>
> http://hjemmesideskolen.dk/scripts/phpmail.php
Du har en fejl (tror jeg nok!?) i flg. linie:
!eregi("\n",$_POST['email'])) // tjek, at der ikke er "linjeskift" i
"email"
Er der ikke en ")" for meget??
En anden ting - jeg har samme problem, som du og Janni havde - har modtaget
nogle "hyggelige" mails via min formmail.... :-/
Men jeg har lidt problemer med at implementere din kode i min egen...
Jeg har lagt min "send-fil" op på nettet her:
http://www.skovaa-munding.dk/Send.phps
Håber, at der er en kyndig, som kan hjælpe mig - problematikken er beskrevet
nederst i filen...
På forhånd mange tak for hjælpen!
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www.mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
Johan Holst Nielsen (12-02-2006)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 12-02-06 18:57 |
|
Dennis Munding wrote:
> Hej Erik!
> "Erik Ginnerskov" <erik@donotspammmeplease.invalid> skrev i en meddelelse
> news:43ee7c96$0$15788$14726298@news.sunsite.dk...
>
>>Prøv at kigge på denne side. Den er lige blevet opdateret af samme grund:
>>
>> http://hjemmesideskolen.dk/scripts/phpmail.php
>
>
> Du har en fejl (tror jeg nok!?) i flg. linie:
>
> !eregi("\n",$_POST['email'])) // tjek, at der ikke er "linjeskift" i
> "email"
>
> Er der ikke en ")" for meget??
Nej - nr. 2 er slut på if'en ;)
> En anden ting - jeg har samme problem, som du og Janni havde - har modtaget
> nogle "hyggelige" mails via min formmail.... :-/
>
> Men jeg har lidt problemer med at implementere din kode i min egen...
> Jeg har lagt min "send-fil" op på nettet her:
>
> http://www.skovaa-munding.dk/Send.phps
>
> Håber, at der er en kyndig, som kan hjælpe mig - problematikken er beskrevet
> nederst i filen...
if(empty($navn) || empty($email) || empty($emne) ||
empty($tekst))
Laves om til
if(empty($_POST['navn']) ||
empty($_POST['email']) ||
empty($_POST['emne']) ||
empty($_POST['tekst']) ||
strpos($_POST['navn'],'mundings-memorial.dk') !== false ||
strpos($_POST['email'],'mundings-memorial.dk') !== false ||
strpos($_POST['navn'],'@') !== false ||
eregi("\n",$_POST['navn']) ||
eregi("\r",$_POST['navn']) ||
eregi("\n",$_POST['email']) ||
eregi("\r",$_POST['email']) ||
) {
....
}
mvh
Johan
| |
Johan Holst Nielsen (12-02-2006)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 12-02-06 18:59 |
|
Johan Holst Nielsen wrote:
> if(empty($navn) || empty($email) || empty($emne) ||
> empty($tekst))
>
> Laves om til
>
> if(empty($_POST['navn']) ||
> empty($_POST['email']) ||
> empty($_POST['emne']) ||
> empty($_POST['tekst']) ||
> strpos($_POST['navn'],'mundings-memorial.dk') !== false ||
> strpos($_POST['email'],'mundings-memorial.dk') !== false ||
> strpos($_POST['navn'],'@') !== false ||
> eregi("\n",$_POST['navn']) ||
> eregi("\r",$_POST['navn']) ||
> eregi("\n",$_POST['email']) ||
> eregi("\r",$_POST['email']) ||
Den sidste skal selvfølgelig ikke have || med ... var lige lidt for
meget copy-paste.
mvh
Johan
| |
Dennis Munding (12-02-2006)
| Kommentar Fra : Dennis Munding |
Dato : 12-02-06 21:00 |
|
Hej Johan!
"Johan Holst Nielsen" <spam@phpgeek.dk> skrev i en meddelelse
news:43ef7752$0$78279$157c6196@dreader1.cybercity.dk...
> Johan Holst Nielsen wrote:
>> if(empty($navn) || empty($email) || empty($emne) ||
>> empty($tekst))
>>
>> Laves om til
>>
>> if(empty($_POST['navn']) ||
>> empty($_POST['email']) ||
>> empty($_POST['emne']) ||
>> empty($_POST['tekst']) ||
>> strpos($_POST['navn'],'mundings-memorial.dk') !== false ||
>> strpos($_POST['email'],'mundings-memorial.dk') !== false ||
>> strpos($_POST['navn'],'@') !== false ||
>> eregi("\n",$_POST['navn']) ||
>> eregi("\r",$_POST['navn']) ||
>> eregi("\n",$_POST['email']) ||
>> eregi("\r",$_POST['email']) ||
Det virker fint, tak! Men! Jeg kunne godt tænke mig at dele det op, som
herunder:
if(empty($_POST['navn']) ||
empty($_POST['email']) ||
empty($_POST['emne']) ||
empty($_POST['tekst']))
--> Fejl-melding nr. 1
elseif(
strpos($_POST['navn'],'mundings-memorial.dk') !== false ||
strpos($_POST['email'],'mundings-memorial.dk') !== false ||
strpos($_POST['navn'],'@') !== false)
--> Fejl-melding nr. 2
elseif(
eregi("\n",$_POST['navn']) ||
eregi("\r",$_POST['navn']) ||
eregi("\n",$_POST['email']) ||
eregi("\r",$_POST['email']))
{
--> Fejl-melding nr. 3
Det har jeg prøvet, men uanset hvilken bevidst fejl jeg laver, så sender den
mailen alligevel...??
> Den sidste skal selvfølgelig ikke have || med ... var lige lidt for meget
> copy-paste.
Det kender jeg godt!
Tak for hjælpen indtil nu!
Håber du kan hjælpe mig med det sidste....?
Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www.mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/
| |
Johan Holst Nielsen (12-02-2006)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 12-02-06 21:04 |
|
Dennis Munding wrote:
> Hej Johan!
> "Johan Holst Nielsen" <spam@phpgeek.dk> skrev i en meddelelse
> news:43ef7752$0$78279$157c6196@dreader1.cybercity.dk...
>
>>Johan Holst Nielsen wrote:
>>
>>>if(empty($navn) || empty($email) || empty($emne) ||
>>>empty($tekst))
>>>
>>>Laves om til
>>>
>>>if(empty($_POST['navn']) ||
>>> empty($_POST['email']) ||
>>> empty($_POST['emne']) ||
>>> empty($_POST['tekst']) ||
>>> strpos($_POST['navn'],'mundings-memorial.dk') !== false ||
>>> strpos($_POST['email'],'mundings-memorial.dk') !== false ||
>>> strpos($_POST['navn'],'@') !== false ||
>>> eregi("\n",$_POST['navn']) ||
>>> eregi("\r",$_POST['navn']) ||
>>> eregi("\n",$_POST['email']) ||
>>> eregi("\r",$_POST['email']) ||
>
>
> Det virker fint, tak! Men! Jeg kunne godt tænke mig at dele det op, som
> herunder:
>
> if(empty($_POST['navn']) ||
> empty($_POST['email']) ||
> empty($_POST['emne']) ||
> empty($_POST['tekst']))
>
> --> Fejl-melding nr. 1
>
> elseif(
> strpos($_POST['navn'],'mundings-memorial.dk') !== false ||
> strpos($_POST['email'],'mundings-memorial.dk') !== false ||
> strpos($_POST['navn'],'@') !== false)
>
> --> Fejl-melding nr. 2
>
> elseif(
> eregi("\n",$_POST['navn']) ||
> eregi("\r",$_POST['navn']) ||
> eregi("\n",$_POST['email']) ||
> eregi("\r",$_POST['email']))
> {
>
> --> Fejl-melding nr. 3
>
> Det har jeg prøvet, men uanset hvilken bevidst fejl jeg laver, så sender den
> mailen alligevel...??
Kan du ikke sende en phps til hele scriptet? :) Tror ikke fejlen ligger
i if/elseif'erne.... selvom det kun er hurtigt kigget igennem... :)
mvh
Johan
| |
Dennis Munding (12-02-2006)
| Kommentar Fra : Dennis Munding |
Dato : 12-02-06 21:12 |
| | |
Kim Ludvigsen (12-02-2006)
| Kommentar Fra : Kim Ludvigsen |
Dato : 12-02-06 12:38 |
|
Den 11-02-06 17.14 skrev J Christensen følgende:
> Jeg er nu (!) ved at lave lidt forebyggende og har læst og kopieret
> noget kode:
>
> if (eregi("\r",$navn) || eregi("\n",$navn) || eregi("@",$navn)) {
> die("Ingen emailadresse i navnefeltet, tak");
> }
Jeg er først lige begyndt at lege med php, så jeg kan ikke forklare,
hvorfor det ikke virker - jeg prøvede et script i stil med ovenstående,
også uden held. "\" blev ikke medtaget som et tegn, så scriptet
reagerede udelukkende på "n" og "r", hvilket jo ikke er så praktisk.
Efter at have prøvet mig frem, fik jeg det til at virke med:
if (eregi("[\]",$navn) || eregi("[\]",$email)|| eregi(" ",$navn)){
die(header( 'Location: http://***.dk/ikkesendt.html' ));
}
Den forbyder så al brug af "\" i navne- og mail-felterne, men det burde
jo ikke være det store problem.
> Og er det ikke nok, at der ikke kan indsættes en emailadresse (og at
> der ikke kan sættes kommaer i emailfeltet)?
Man kan vist også forhindre misbrug ved at samle felterne i en enkelt
streng som dette:
$oplysninger="Følgende er sendt via kontaktformular på
hjemmesiden:\r\n\r\n$navn\r\n$adresse1\r\n$adresse2\r\n$postnr\r\n$by\r\n$email\r\n$telefon\r\n\r\nBesked:\r\n$besked";
Jeg har i hvert fald aldrig oplevet misbrugsproblemer - ovenstående
forebyggelse er udelukkende lavet for at slippe for at få kontakt-mails
hver gang nogen forsøger at misbruge formen.
Er der nogen, der vil kommentere, om samlingen af felter forhindrer misbrug?
--
Mvh. Kim Ludvigsen
Sunbird: gratis kalender som du kan dele med andre.
http://kimludvigsen.dk
| |
|
|