PHP सुरक्षित ईमेल

पिछले अध्याय में दिए गए PHP ईमेल स्क्रिप्ट में एक छेड़छाड़ है。

PHP ईमेल इंजेक्शन

पहले, पिछले अध्याय में दिए गए PHP कोड को देखें:

<html>
<body>
<?php
if (isset($_REQUEST['email']))
//यदि "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
//यदि "email" भरा नहीं है, फॉर्म प्रदर्शित करें
  {
  echo "<form method='post' action='mailform.php'>
  ई-मेल: <input name='email' type='text' /><br />
  विषय: <input name='subject' type='text' /><br />
  संदेश:<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: फील्ड हैं। जब उपयोगकर्ता सबमिट बटन पर क्लिक करता है, तो यह e-mail उपरोक्त सभी पतों पर भेजा जाएगा!

PHP से E-mail इंजेक्शन रोकना

e-mail इंजेक्शन को रोकने का सबसे अच्छा तरीका इनपुट की वैलिडेशन करना है।

इस कोड को पिछले अध्याय के समान, लेकिन हमने फॉर्म के email फील्ड के इनपुट वैलिडेशन प्रोग्राम को जोड़ा है:

<html>
<body>
<?php
function spamcheck($field)
  {
  //filter_var() sanitizes the e-mail 
  
  $field=filter_var($field, FILTER_SANITIZE_EMAIL);
  //filter_var() validates the e-mail
  
  if(filter_var($field, FILTER_VALIDATE_EMAIL))
    {
    return TRUE;
    }
  else
    {
    return FALSE;
    }
  }
if (isset($_REQUEST['email']))
  {//if "email" is filled out, proceed
  //check if the email address is invalid
  $mailcheck = spamcheck($_REQUEST['email']);
  if ($mailcheck==FALSE)
    {
    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'>
  ई-मेल: <input name='email' type='text' /><br />
  विषय: <input name='subject' type='text' /><br />
  संदेश:<br />
  <textarea name='message' rows='15' cols='40'>
  </textarea><br />
  <input type='submit' />
  </form>";
  }
?>
</body>
</html>

ऊपरी कोड में हमने PHP फ़िल्टर का उपयोग किया है कि इनपुट को प्रमाणीकरण करने के लिए:

  • FILTER_SANITIZE_EMAIL ई-मेल के अवैध अक्षरों को स्ट्रिंग से हटाना
  • FILTER_VALIDATE_EMAIL ई-मेल पता की प्रमाणीकरण

आप हमारे PHP फ़िल्टरइस अनुभाग में फ़िल्टर के बारे में अधिक पढ़ें