2011-07-22 81 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; 
    } 

?>