Teman

Pencarian

PHP Secure E-mails


PHP E-mail Injections


Pertama, lihat program PHP yang sama dengan program pada bab 20.

Program21-1.php
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
  {
  //send email
  $email = $_REQUEST['email'] ; 
  $subject = $_REQUEST['subject'] ;
  $message = $_REQUEST['message'] ;
  mail("someone@example.com", "Subject: $subject",
  $message, "From: $email" );
  echo "Thank you for using our mail form";
  }
else
//if "email" is not filled out, display the form
  {
  echo "<form method='post' action='mailform.php'>
  Email: <input name='email' type='text' /><br />
  Subject: <input name='subject' type='text' /><br />
  Message:<br />
  <textarea name='message' rows='15' cols='40'>
  </textarea><br />
  <input type='submit' />
  </form>";
  }
?>
</body>
</html>

Masalah yang timbul pada kode di atas adalah user yang tidak terotorisasi dapat menyisipkan data ke dalam header mail melalui form input.
Apa yang akan terjadi jika user memasukkan teks-teks berikut ke dalam field input email pada form?

someone@example.com%0ACc:person2@example.com
%0ABcc:person3@example.com,person3@example.com,
anotherperson4@example.com,person5@example.com
%0ABTo:person6@example.com

Fungsi mail() akan meletakkan teks di atas ke dalam header mail seperti biasa, dan sekarang header telah mempunyai tambahan field Cc:, Bcc:, dan To:. Ketika user menekan tombol submit, maka e-mail akan terkirim ke seluruh alamat di atas.


Mencegah PHP E-mail Injections

 

Cara yang terbaik untuk menghentikan e-mail injections adalah dengan menggunakan validasi input.
Program di bawah ini sama dengan program di atas tetapi sekarang kita telah menambahkan mekanisme pengecekan input yang melakukan pemeriksaan field email pada form.

Program21-2.php
<html>
<body>
<?php
function spamcheck($field)
  {
//eregi() performs a case insensitive regular expression match
  if(eregi("to:",$field) || eregi("cc:",$field)) 
    {
    return TRUE;
    }
  else
    {
    return FALSE;
    }
  }
//if "email" is filled out, send email
if (isset($_REQUEST['email']))
  {
  //check if the email address is invalid
  $mailcheck = spamcheck($_REQUEST['email']);
  if ($mailcheck==TRUE)
    {
    echo "Invalid input";
    }
  else
    { 
    //send email
    $email = $_REQUEST['email'] ; 
    $subject = $_REQUEST['subject'] ;
    $message = $_REQUEST['message'] ;
    mail("someone@example.com", "Subject: $subject",
    $message, "From: $email" );
    echo "Thank you for using our mail form";
    }
  }
else
//if "email" is not filled out, display the form
  {
  echo "<form method='post' action='mailform.php'>
  Email: <input name='email' type='text' /><br />
  Subject: <input name='subject' type='text' /><br />
  Message:<br />
  <textarea name='message' rows='15' cols='40'>
  </textarea><br />
  <input type='submit' />
  </form>";
  }
?>
</body>
</html>

PHP Sending E-mails

PHP mengijinkan kita untuk mengirim e-mail secara langsung dari program.

Fungsi mail()

Fungsi mail() digunakan untuk mengirim e-mail dari program.

mail(to,subject,message,headers,parameters)

Parameter
Keterangan
to
Required. Specifies the receiver / receivers of the email
subject
Required. Specifies the subject of the email. Note: This parameter cannot contain any newline characters
message
Required. Defines the message to be sent. Each line should be separated with a LF (\n). Lines should not exceed 70 characters
headers
Optional. Specifies additional headers, like From, Cc, and Bcc. The additional headers should be separated with a CRLF (\r\n)
parameters
Optional. Specifies an additional parameter to the sendmail program
Catatan: Agar fungsi mail dapat bekerja, PHP memerlukan sistem e-mail yang telah terpasang pada sistem. Program e-mail didefinisikan pada file php.ini.


PHP Simple E-Mail

 

Cara yang paling sederhana untuk mengirim e-mail adalah dengan mengirim file teks.
Pada contoh di bawah ini kita peratam kali akan mendeklarasikan variabel-variabel sebagai berikut ($to, $subject, $message, $from, $headers), kemudian kita akan menggunakan variabel pada fungsi mail() untuk mengirim e-mail.

Program20-1.php
<?php
$to = "someone@example.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "someonelse@example.com";
$headers = "From: $from";
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>


Form Mail PHP


Dengan menggunakan PHP, kita dapat membuat feedback form pada situs internet. Contoh di bawah ini akan mengirimkan pesan teks ke alamat e-mail yang telah ditentukan.

Program20-2.php
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
  {
  //send email
  $email = $_REQUEST['email'] ; 
  $subject = $_REQUEST['subject'] ;
  $message = $_REQUEST['message'] ;
  mail( "someone@example.com", "Subject: $subject",
  $message, "From: $email" );
  echo "Thank you for using our mail form";
  }
else
//if "email" is not filled out, display the form
  {
  echo "<form method='post' action='mailform.php'>
  Email: <input name='email' type='text' /><br />
  Subject: <input name='subject' type='text' /><br />
  Message:<br />
  <textarea name='message' rows='15' cols='40'>
  </textarea><br />
  <input type='submit' />
  </form>";
  }
?>
</body>
</html>

Keterangan program di atas:
  • Pertama, periksa apakah field input email telah terisi.
  • Jika belum, tulis output ke form html.
  • Jika sudah, kirim e-mail dari form.
  • ketika tombol submit ditekan setelah form selesai diisi, halaman akan me-reload, kemudian akan melihat apakah input email telah diisi dan mengirimkan email tersebut.

PHP Sessions

Session digunakan untuk menyimpan informasi mengenai, atau merubah setting dari sesi seorang user. Variabel session menyimpan informasi mengenai seorang user, dan menyediakan informasi tersebut pada seluruh halaman web pada suatu aplikasi .

Variabel Session PHP

 

Ketika kita membuat suatu aplikasi, kita membuka aplikasi tersebut kemudian melakukan beberapa perkerjaan hingga akhirnya menutup aplikasi tersebut. Aplikasi akan mengetahui siapa kita. Aplikasi mengetahui ketika kita mulai menjalankan aplikasi dan ketika kita menutup aplikasi tersebut. Tetapi pada aplikasi internet terdapat satu kesulitan, yaitu: web server tidak dapat mengetahui siapa user yang menggunakan aplikasinya dan apakah yang sedang kita lakukan karena alamat HTTP tidak menyimpan state aplikasi.

Mekanisme session pada PHP akan menyelesaikan permasalahan ini dengan cara memperbolehkan aplikasi untuk menyimpan informasi pada server untuk digunakan kemudian (contohnya: username, shopping items dll). Bagaimanapun, informasi session bersifat sementara dan akan dihapus setelah user meninggalkan situs yang digunakan. Jika kita membutuhkan informasi yang bersifat permanent, kita dapat menyimpan data pada database.

Session bekerja dengan cara membuat Unique ID (UID) untuk setiap user dan menyimpan variabel berdasarkan UID tersebut. UID disimpan baik pada cookie atau URL.


Memulai Session PHP (session_start())

 

Catatan: fungsi session_start() harus ditulis sebelum tag <html>.

Program19-1.php
<?php session_start(); ?>
<html>
<body>
</body>
</html>
Kode di atas akan mendaftarkan session user ke server, dan mengijinkan kita untuk memulai menyimpan informasi user dan memebuat UID untuk session user tersebut.

Menyimpan Session Variabel


Cara yang tepat untuk menyimpan dan mengambil variabel session adalah menggunakan variabel $_SESSION:

Program19-2.php
<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
</body>
</html>

Output:
Pageviews=1

Pada contoh di bawah ini, kita akan membuat counter page-views sederhana. Fungsi isset() akan melakukan pengecekan terhadap variabel “views” apakah telah dibuat. Jika “views” telah tersedia, maka kita dapat melakukan proses penambahan pada counter. Jika “views” tidak ada, maka kita akan membuat variabel “views” dan mensetnya dengan 1.

Program19-3.php
<?php

  

  
session_start();
if(isset($_SESSION['views']))

  $_SESSION['views']=$_SESSION['views']+1;

  

  
else

  $_SESSION['views']=1;

echo "Views=". $_SESSION['views']; 

?>

Menghapus Session

 

Jika kita ingin menghapus beberapa data session, kita dapat menggunakan fungsi unset() atau fungsi session_destroy().

Fungsi unset() digunakan untuk membebaskan variabel session tertentu.

Program19-4.php
<?php

unset($_SESSION['views']);
?>

Kita juga dapat menghapus keseluruhan session dengan menggunakan fungsi session_destroy().

Program19-5.php
<?php

session_destroy();
?>

Catatan: session_destroy() akan me-reset session kita dan kita akan kehilangan seluruh data session yang telah tersimpan.