PHP – Güvenli Email

 

Önceki dersimizde güvenlik düşünülmeden hazirlanmış email gönderme formunu açıkladık.İnternet ne kadar verimli ve yararlı bir platform olsa da güvenlik düşünülmesi gereken en önemli konulardan biridir

E-mail Sızmalarıİlk olarak bir önceki dersimizde uyguladığımız e-mail formunu tekrar ele alalım:

<html>

<body>

<?php

if (isset($_REQUEST[’email’]))

{

//send email

$email = $_REQUEST[’email’] ;

$subject = $_REQUEST[‘subject’] ;

$message = $_REQUEST[‘message’] ;

mail(“[email protected]”, “Subject: $subject”,

$message, “From: $email” );

echo “Email formumuzu kullandığınız için teşekkürler”;

}

else

//if “email” is not filled out, display the form

{

echo “<form method=’post’ action=’mailform.php’>

Email: <input name=’email’ type=’text’ /><br />

Konu: <input name=’subject’ type=’text’ /><br />

Mesaj:<br />

<textarea name=’message’ rows=’15’ cols=’40’>

</textarea><br />

<input type=’submit’ />

</form>”;

}

?>

</body>

</html>

Yukarıdaki kodumuzun sorunu,yetkilendirilmemil kullanıcıların ,mail başlıklarına fazla,zaman zaman da zararlı olan verilerin girmelerini engellememekti.

Aşağıdaki textin e-mail input bölümüne girildiğini düşünelim,, sonuç ne olacak sizce?

[email protected]%0ACc:[email protected]

%0ABcc:[email protected],[email protected],

[email protected],[email protected]

%0ABTo:[email protected]

mail() fonksiyonu yukardaki texti normal bir veri olarak işleme koyacaktır. Kullanıcı submit butonuna bastığı anda yukarda yazan tüm adreslere mail gönderilecektir!

E-mail Sızmalarını DurduralımE-mail sızmalarını engellemenin en iyi yolu input onaylama yapmaktır.Aşağıdaki kod örneğimiz ,önceki örneğimiz ile aynı yapıya sahiptir,fakat bu örneğimizde input-girdi alanlarımızı onaylayıcı kodlar ekledik:

<html>

<body>

<?php

function spamcheck($field)

{

if(eregi(“to:”,$field) || eregi(“cc:”,$field))

{

return TRUE;

}

else

{

return FALSE;

}

}

// “email” alanı doldurulmuş ise ,gönder

if (isset($_REQUEST[’email’]))

{

//e-mail adresinin doğruluğunu kontrol et

$mailcheck = spamcheck($_REQUEST[’email’]);

if ($mailcheck==TRUE)

{

echo “Geçersiz girdi”;

}

else

{

// email gönder

$email = $_REQUEST[’email’] ;

$subject = $_REQUEST[‘subject’] ;

$message = $_REQUEST[‘message’] ;

mail(“[email protected]”, “Subject: $subject”,

$message, “From: $email” );

echo “Formumuzu kullandığınız için teşekkürler”;

}

}

else

//”email” alanımız doldurulmamış ise formu yeniden yükle

{

echo “<form method=’post’ action=’mailform.php’>

Email: <input name=’email’ type=’text’ /><br />

Konu: <input name=’subject’ type=’text’ /><br />

Mesaj:<br />

<textarea name=’message’ rows=’15’ cols=’40’>

</textarea><br />

<input type=’submit’ />

</form>”;

}

?>

</body>

</html>