PHP/PHP ელ.ფოსტის დაცვა

< PHP

PHP ელ. ფოსტის ინექციები

რედაქტირება

პირველი, შევხედოთ 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>

ზემოთ მოყვანილი კოდის პრობლემა არის ის რომ, არა ავტორიზებულ მომხმარებლებს შეუძლიათ ფორმის მეშვეობით ჩასვან მონაცემები ფოსტის სათაურებში.
რა მოხდება თუ მომხმარებელი შეიყვანს მიმდიანრე ტექსტ ფოსტის ველში?

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

mail() ფუნქცია ზემოთ მოყვანილ ტექტს წერს ფოსტის სათაურების ველში და ახლა სათაურს აქვს ექსტრა Cc:, Bcc: და To: ველი. როდესაც მომხმარებელი იმოქმედებს “Submit” ღილაკზე, ფოსტა გაიგზავნება ზემოთ მოყვანილ ყველა მისამართზე.

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>