2011-07-22 10 views
1

私はphp mail関数を使用しています。名前フィールド、電話フィールド、電子メールフィールド、およびテキストエリアのメッセージフィールドを持つフォームがあります。電子メールフィールド(名前と電話フィールドとともに)はメッセージに表示され、そのアドレスに電子メールを送信するために使用されません。 To:フィールドとSubject:フィールドとFrom:ヘッダーはスクリプト内で静的であり、常に同じになるように設計されています。電子メールインジェクションのテスト方法

私は最近自分のスクリプトに電子メールインジェクションを試みていたので、私の予防措置が有効かどうかを知ることができました。

私はフィールド %0ATo:[email protected]と%0ACc:[email protected]を入力しようとしましたが、電子メールは適切な電子メールアドレスにまったく送信しません。私はちょうどこれを行うための正しい方法は何か、また私は文字列を識別し、それらを削除するなどの予防的な方法を使用しているかと思っていたか%などの文字が送信されることを拒否する?

+0

Hiya、 はあなたがCAPTCHAを使用していない何らかの理由はありますか? スパムボットがサイトをクロールし、連絡先フォームを参照し、手作業で投稿データをフォームのアクションに送信できます。フォームの連絡先情報を受け取った者をスパムすることができます。 あなた自身で再生したい場合は、[Snoopy](http://sourceforge.net/projects/snoopy/)または他のライブラリを使ってテストを設定して、あなたの投稿データを簡単に送信することができます形。 受信者をハードコーディングしている場合やファイルのアップロードを承諾している場合は、電子メールインジェクションに特に脆弱だとは思われません。 – Andy

+0

私はスパムボットがランダムフォームを送信するのを防ぐためにcaptchaを持っているつもりですが、私は悪意のあるユーザーから自分自身を守ることを試みていますが、とにかく答えていただきありがとうございます。 – 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; 
    } 

?> 
関連する問題