• 締切済み

GETの引数について

環境:fedora core5+php5+firebird1.5 只今、空メール+メール会員システムを作成している者です。 質問するのははじめてになります。よろしくおねがいします。 ◆現在の状態 携帯端末から空メール送信すると自動で返信メールが来きます。メールの本文に記載されているリンクボタン(xxx.php?=no=hogehoge@ezweb.ne.jp)を押すとそのメールアドレスがDBに登録されるという所です。 ◆困っている所  上の「現在の状態」の所でリンクボタンの引数(メールアドレス)がもろに出てしまいます。  悪意のある人ですと上記の引数に他人のメールアドレスを入力されて、勝手にメールリストを作成されてしまうと思います。 空メールの業者を何件かチェックしたところ引数は乱数でした。 リンクボタンを押すと本登録できるような感じでした。 知識のある方々良い知恵を教えてください。

みんなの回答

回答No.2

いくつか方法があります。 1.乱数(セッション)を使う 空メール受信時にセッションを開始して、セッションにメールアドレスを保存する。自動返信メール本文に .../xxx.php?sess=3A281F1... のようにセッションIDを含んだURLを記載する。xxx.phpでは、セッションからメールアドレスを取り出し、DBへの登録処理を行なう。 2.乱数(自前)を使う 1とほぼ同じですが、セッションを使いません。空メール受信時に、乱数を作成し、DBに乱数とメールアドレスをセットで保存する。自動返信メール本文のURLに .../xxx.php?rnd=42982131 のように乱数を含める。xxx.phpでは、受け取った乱数からDBを検索し、メールアドレスを取り出す。 3.暗号を使う 自動返信メールのURLには、暗号化したメールアドレスを含める。 xxx.php?mail=hogehoge@ezweb..... のhogehoge@ezweb... の部分を暗号化する。xxx.phpではそれを復号化する。 4.MAC(メッセージ認証コード)を使う 改竄を防ぐためのMACを使う方法です。メールアドレスの改竄を防ぐ目的を考えると、暗号化よりも望ましい方法です。しかしURLは長くなります。詳細の説明は省略します。 どれも一長一短あります。 セッションの経験があるなら1、暗号の経験があるなら3か4、どちらも経験が無いならば2が良いかと思います。

回答No.1

空メールを受信した時点でtmpファイルなどやメモリなどにメールアドレスを格納して、格納する場所を乱数にすれば、乱数を渡すだけで良くなるのではないかと思います。 ■メール受信時 #!/usr/bin/php <?php $sh = md5(microtime()); $fname = "/tmp/{$sh}"; $fp = fopen($fname,"w"); fwrite($fp,"mail=メールアドレス"); fwrite($fp,"&etc=その他の情報"); fclose($fp); $url = "http://xxxxxxxxxxxx.jp/?sh=$sh"; ?> ■本登録作業時 <?php if(!preg_match("/^[0-9a-f]*$/",$_GET['sh'])) {exit;} $fname = "/tmp/{$_GET['sh']}"; $data = file_get_contents($fname); ?> なんとなくですがこんな感じです。

関連するQ&A