Jazyková verzia
Zneužívanie PHP funkcie mail()
V poslednej dobe sme zaznamenali pokusy o zneužívanie klientských PHP skriptov na rozposielanie nevyžiadanej elektronickej pošty (SPAM, alebo tiež UCE).
Je veľa spôsobov ako poslať anonymnú poštu. Niektoré falšujú identitu odosielateľa a niektoré odosielajú poštu anonymne.
Zneužívané sú väčšinou skripty, ktoré obsahujú HTML formulár napr. kontaktný, mailový. Takéto webové, mailové formuláre sú v prevažnej miere spracovávané PHP skriptom, ktorý využíva PHP funkciu 'mail()' na odosielanie pošty. Ak sú vstupné dáta z webových formulárov programátorsky nedostatočne ošetrované, funkcia umožňuje odosielať emaily obsahujúce hlavičky s IP adresou servera, na ktorom skript beží. Takýto skript potom umožňuje anonymné odosielanie emailov a webová aplikácia sa stáva otvorenou bránou na rozposielanie nevyžiadanej pošty.
Funkcia 'mail()' má tieto parametre: mail([TO], [SUBJECT], [MESSAGE], [EXTRA_HEADERS])
[TO] - adresa príjemcu
[SUBJECT] - predmet správy
[MESSAGE] - telo správy
[EXTRA_HEADERS] - doplňujúce hlavičky
Veľa PHP programátorov pevne do funkcie zakóduje email adresu príjemcu [TO], príp. [SUBJECT] v domnienke, že email je doručovaný práve iba na adresu definovanú v [TO], čo je CHYBA!
Typickým príkladom môže byť súbor 'send.php':
<?php
if ($_POST['send'])
{
$to = 'webmaster@moja-domena.xx';
$subject = $_POST['predmet'];
$message = $_POST['sprava'];
$from = $_POST['email'];
$headers = "From: " . $from . "n";
if (mail($to, $subject, $message, $headers))
{
echo "sprava odoslana";
}
else
{
echo "sprava neodoslana";
}
}
?>
<form method="POST" action="<?=$_SERVER['PHP_SELF'];?>">
Prijemca: webmaster@moja-domena.xx<br />
E-mail odosielatela: <input type="text" name="email"><br />
Predmet spravy: <input type="text" name="predmet"><br />
Sprava:
<textarea name="sprava" rows="10" cols="60" lines="20">
</textarea><br />
<input type="submit" name="send" value="Odoslat">
<input type="send" value="true">
</form>
Funkcia 'mail()' v súbore 'send.php' môže 'vyprodukovať' takýto výstup:
To: webmaster@moja-domena.xx
Subject: Ahoj
From: navstevnik@domena.xx
Ahoj,
paci sa mi Vasa stranka.
Zo skriptu 'send.php' je zrejmé, že najzaujímavejší parameter je [FROM], ktorým sa priamo dajú modifikovať, alebo pridať hlavičky mailu.
Takýmito hlavičkami môžu byť napr. 'Cc:', 'Bcc:'.
Ako zo špecifikácie podľa RFC 822 (http://www.faqs.org/rfcs/rfc822.html) vyplýva, hlavičky sú oddeľované 'line feed' <LF> a jeho hexa hodnota 0x0A. Takže mailový formulár môže byť modifikovaný napr. takto:
$_POST['email'] = "anonym@anonymous.xxx%0A0ABcc:skrytyprijemca@domena.xxx";
výstup z 'mail()' funkcie bude vyzerať potom takto:
To: webmaster@moja-domena.xx
Subject: predmet
From: anonym@anonymous.xxx
Bcc: skrytyprijemca@domena.xxx
sprava
Takýmto spôsobom sa úspešne podarí odoslať anonymný email na iné email adresy.
Postup SPAMerov je v praxi ešte omnoho sofistikovanejší. Môžu modifikovať viaceré hlavičky a aj obsah správy.
Ako zamedziť takémuto neoprávnenému, anonymnému rozposielaniu mailov?
Heslo je: "Nikdy nedôveruj vstupným dátam od užívateľov!"
Je nutné dôkladne kontrolovať a ošetrovať vstupné dáta z webových formulárov.
Zásady, ktoré by ste mali dodržovať:
- kontrolovať formát email adresy
- dáta by nemali mať neobmedzenú veľkosť
- ošetriť vstupy, ktoré idú priamo do hlavičiek emailu
napr.:
<?php
$from = $_POST['email'];
if (eregi("(r|n)", $from))
{
die("nespravny format email adresy!");
}
?>
Ďalšia možnosť je nepoužívať PHP funkciu 'mail()' na odosielanie pošty. Môžete využiť viacero 'open source' projektov nahradzujúcich funkčnosť funkcie 'mail()':
email() - http://poss.sourceforge.net/email/
PEAR mail() - http://pear.php.net/package/Mail
PHPMailer - http://phpmailer.sourceforge.net/
Attachment Mailer class - http://www.finalwebsites.com/snippets.php?id=41
--
EuroNET Slovakia s.r.o.
Najčastejšie otázky
- Stratené alebo zabudnuté heslo
- Aktivácia bezplatného SSL certifikátu pre web (https)
- Zabezpečenie CMS WordPress a Joomla
- Pridanie e-mailového konta do Gmailu
- Nastavenie emailového klienta Mozilla Thunderbird
- Problém pri odosielaní e-mailov cez náš SMTP server
- Škodlivý kód na stránke (zneužitie webového priestoru)
- Zmena fakturačnej adresy
- Nastavenie filtrovania SPAMu
- Zmena vlastníka .sk domény
- 500 Internal Server Error