【问题标题】:PHP Stopping E-mail InjectionsPHP 停止电子邮件注入
【发布时间】:2011-02-07 08:46:24
【问题描述】:
<html>
<body>
<?php
function spamcheck($field)
  {
  //filter_var() sanitizes the e-mail
  //address using FILTER_SANITIZE_EMAIL
  $field=filter_var($field, FILTER_SANITIZE_EMAIL);

  //filter_var() validates the e-mail
  //address using FILTER_VALIDATE_EMAIL
  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'>
  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
  • 你的问题是什么,你不明白什么?

标签: php email code-injection


【解决方案1】:

解释一下?好吧,基本上如果有人没有填写邮件表格,表格就会显示出来。否则,函数 spamcheck 控制邮件地址是否有效。如果是,则为 mail() 函数填写信息并发送电子邮件。如果不是,则说明输入无效。

我认为这不是最安全的脚本...

【讨论】:

    【解决方案2】:

    这是阻止电子邮件注入的方法

    <html>
    <body>
    <?php
    if (isset($_REQUEST['email']))
    {//if "email" is filled out, proceed
        $email = $_REQUEST['email'] ;
        $subject = $_REQUEST['subject'] ;
        $message = $_REQUEST['message'] ;
        mail("someone@example.com", "Feedback",
        "From: $email\n\nSubject: $subject\n\n$message");
        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> 
    

    【讨论】:

    • 也许你应该解释一下为什么
    • @Felix 我怀疑这是否值得付出努力。我怀疑 OP 会注意他的问题,如果他还没有的话。
    • @Col。 Shrapnel:这不仅与 OP 有关,还与看到此问题和/或有类似问题的其他人有关。但这是你的决定。
    • @Felix LOL,别再笑了:) 几乎没有人会注意到这个问题。已经有数十亿个相同的废话。一万个,一个具有巨大评级的 - 可能是。但绝对不是这个。这绝对不值得。这是慈善网站,伙计,不是知识库。即时工作代码 - 这是每个人都要求的,仅此而已。一个能够找到的人,将会找到所有的解释——有很多。一个找不到的人 - 永远不会看到我的答案。
    • @Col。弹片:如果你明明不在意,为什么还要发帖?
    猜你喜欢
    • 2013-11-06
    • 2012-10-08
    • 2012-09-12
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2012-09-20
    • 2018-12-18
    相关资源
    最近更新 更多