Een heel eenvoudig php-script om email te verzenden (bv. feedback form)

uw naam

uw email

opmerking

tel

hier de code van bovenstaand scriptje.

Bij het versturen van de mail worden er geen controles uitgevoerd.
Dus ook niet op het veld $_POST['email']

Een hacker zou nu spam-mail kunnen versturen door gebruik te maken van e-mail attachments.
Hij zou bijvoorbeeld het volgende kunnen invullen in het veld 'email'.

email veld :
---cut---------------------
spam@spammer.be
Content-Type: multipart/mixed; boundary=\"===============0123586012==\"
MIME-Version: 1.0
Subject: aangepast_email_subject
To: info@scoutnet.be
From: spam@spammer.be
---cut---------------------

Het email attachment gaat in een ander veld (bv. opmerking):

opmerking veld :
---cut---------------------
xxxxxxxxx
--===============0123586012==
Content-Type: text/plain; charset=\"us-ascii\"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

u spam bericht hier... 
--===============0123586012==--
xxxxxxxxx
---cut---------------------

De uiteindelijke email ziet er dan zo uit :

---cut---------------------
Date: Fri, 25 Niv 2005 15:08:14 -0500
Message-Id: <20051125150814@scoutnet.be>
To: jorisp@scoutnet.be
Subject: REPORT
from: spam@spammer.be
Content-Type: multipart/mixed; boundary=\"===============0123586012==\"
MIME-Version: 1.0
Subject: aangepast_email_subject
To: info@scoutnet.be
From: spam@spammer.be

Report:

naam      : yyyyy
email     : spam@spammer.be
opmerking : xxxxxxxxx
--===============0123586012==
Content-Type: text/plain; charset=\"us-ascii\"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

u spam bericht hier...
--===============0123586012==--
xxxxxxxxxx
tel       : yyyyy
---cut---------------------

Al wat aangeduid is in het geel is wat door de hacker werd "include". De tekst in het rood is de eigenlijke spam mail.

Belangrijk om weten is dat controles/beperkingen die aan de client zijde (jouw browser) worden uitgevoerd voor een hacker heel gemakkelijk te omzeilen zijn.

Controles met javascript zijn zeker handig voor de gebruiker (de mensen die jouw feedback form invullen), maar bieden geen bescherming.
Ook het beperken van het aantal in te voeren characters op een html-form met maxlength: bv.

<input type="text" maxlength="20">
biedt GEEN ENKELE controle


DE OPLOSSING

CONTROLEER ALLES WAT DE GEBRUIKER INVULT of
VERWIJDER ALLE spaties, enters, new lines uit de waarden die je gebruikt in je email header

zoals bijvoorbeeld met deze controles

Nog een oplossing is steeds een default adres te gebruiken in het from-veld van de mail:

mail("jorisp@scoutnet.be", "REPORT", $body, "from: noreply@scoutnet.be" );

Of gebruik de scoutnet formmail.cgi -> Uitleg via my-site -> Support & Help -> Enkele Scripts -> Formmail
Of wat To voorstelt op het forum (maar dan wel een 'grafische' code)