Security Hole Mail Header Injection pada PHP
Wednesday, November 30, 2005
Jika anda menggunakan bahasa pemrograman PHP untuk mengirim email (terutama jika anda mengirim email dari form HTML), harap untuk
berhati-hati. Dalam beberapa minggu terakhir, pihak-pihak yang tidak bertanggung
jawab secara aktif mengeksploitasi script-script PHP yang menggunakan
fungsi mail():
mail($recipient, $subject, $message, [$extraheaders], [$extraparams]);
Kesalahan yang paling umum dilakukan oleh pemrogram PHP adalah tidak
mengecek variabel yang masuk. Jika variabel didapatkan dari form HTML,
maka pihak yang
tidak bertanggung jawab bisa menambahkan header apapun.
Sebagai contoh, misalnya script PHP seperti ini:
mail("saya@example.net", $subject, $text, "From: $email\n");
memiliki celah keamanan jika anda tidak mengecek validitas variabel
$subject dan $email.
Cara pengecekan yang paling mudah untuk mendeteksi eksploitasi header
injection adalah dengan mengecek apakah ada karakter newline (\r atau
\n) pada variabel tersebut. Berikut adalah contoh untuk mengecek
validitas variabel $subject:
<?php
if (eregi("\r", $subject) || eregi("\n", $subject)) {
die("Why??");
}
?>
Perhatikan bahwa anda harus mengecek seluruh variabel yang masuk. Pada
contoh di atas hanya diberikan contoh untuk mengecek variabel $subject
untuk menyederhanakan. Selain itu, untuk contoh di atas, anda juga
harus mengecek variabel $email yang juga digunakan pada fungsi mail() yang
digunakan.
Informasi lebih lanjut dapat dibaca di:
* http://securephp.damonkohler.com/index.php/Email_Injection
* http://us2.php.net/mail (pada bagian komentar)