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

J Christensen wrote:

> 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");
> }

Prøv at kigge på denne side. Den er lige blevet opdateret af samme grund:

http://hjemmesideskolen.dk/scripts/phpmail.php

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



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

Hej Johan!
"Johan Holst Nielsen" <spam@phpgeek.dk> skrev i en meddelelse
news:43ef9495$0$78286$157c6196@dreader1.cybercity.dk...
> Kan du ikke sende en phps til hele scriptet? :) Tror ikke fejlen ligger i
> if/elseif'erne.... selvom det kun er hurtigt kigget igennem... :)

Jo da!

http://www.skovaa-munding.dk/Send.phps

Det er hele scriptet, som kontrollerer om formmailen er udfyldt korrekt...


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/



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

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

Månedens bedste
Årets bedste
Sidste års bedste