2011-07-22 59 views
1

我正在使用php邮件功能,并且我有一个带有名称字段,电话字段,电子邮件字段和消息字段的表单,这是一个文本区域。电子邮件字段(以及名称和电话字段)会显示在邮件中,不会用于向该地址发送电子邮件。 To:字段和主题:字段和From:标题在脚本中是静态的,并且始终保持相同。如何测试电子邮件注入

我最近试图尝试将电子邮件注入到我自己的脚本中,以便我可以知道我的预防措施是否正常工作。

我试过把字段放在 %0ATo:[email protected],还有%0ACc:[email protected],但是电子邮件根本没有发送到正确的邮件地址。我只是想知道什么是正确的方法来做到这一点,以及当我使用预防性方法,如识别字符串,并删除它们或拒绝发送电子邮件,发送像%这样的字符时,我也应该关注?

+0

你好, 有没有你不使用CAPTCHA的原因吗? 垃圾邮件可以抓取您的网站,查看联系人表单并手动将发布的数据发送到表单的操作。然后,它将能够发送任何会收到表格联系信息的垃圾邮件。 如果你想自己玩这个游戏,你可以使用[Snoopy](http://sourceforge.net/projects/snoopy/)或其他任何可以让你轻松发送发布数据给你的图书馆形成。 如果您对收件人进行硬编码或接受文件上传,那么对我而言,听起来特别容易受到电子邮件注入的威胁。 – Andy

+0

我正计划使用captcha来防止垃圾邮件发送随机表单,但我试图做的是保护自己免受恶意用户的侵害,但无论如何感谢您的回答,我会检查Snoopy。 – Mathew

+0

我认为与电子邮件注入你指的是头注入。 php ['mail'函数](http://php.net/manual/en/function.mail.php)有一些额外的标题可以进入电子邮件的文档。 – hakre

回答

1

它看起来并不像使用表格直接输入注射工作得很好。我使用the following来测试一个我正在放在一起的邮件程序,它会发布脚本中的数据。 $postData将不得不进行修改以适应您的表单。这只是一个个BCC“受害者”:

<?php 

    $postData = 
     'contactname=Lord+Sauron&'. 
     '[email protected]%0ABcc:[email protected]'. 
     '&message=Sorry+about+that+whole+ring+thing.+No+hard+feelings%3F'; 

    $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/onetrueformmailer.php'; 

    $result = do_post_request($url, $postData); 

    echo($result); 




    // http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/ 
    function do_post_request($url, $data, $optional_headers = null) { 
     $params = array('http' => array(
      'method' => 'POST', 
      'content' => $data 
     )); 
     if ($optional_headers !== null) { 
      $params['http']['header'] = $optional_headers; 
     } 
     $ctx = stream_context_create($params); 
     $fp = @fopen($url, 'rb', false, $ctx); 
     if (!$fp) { 
      throw new Exception("Problem with $url, $php_errormsg"); 
     } 
     $response = @stream_get_contents($fp); 
     if ($response === false) { 
      throw new Exception("Problem reading data from $url, $php_errormsg"); 
     } 
     return $response; 
    } 

?>