2012-01-15 5 views
0

私の電子メール確認スクリプトでは、私の既存の一方向暗号化機能を使用してユーザーの電子メールアドレスを実行し、その中間から20文字を取得してトークンを生成します。私はトークンを$ _GET変数または$ _POST変数としてユーザーから取得します。私は "バグ"に遭遇しました。電子メールアドレスにプラス記号(+)が入力され、そのトークンが$ _GET変数としてユーザから取り戻されると、プラス記号はスペースに変換され、ハッシュが変化し、そのためトークンはもはや一致しない。

これを回避するにはどうすればよいでしょうか?プラス記号を脱出する?プラス記号を変換しますか? URLエンコードする? $ _GETを使用すると、他の文字はどうなりますか?それは便利だ場合にはここで

は、適切なコードです:

<?php 
if (isset ($_GET['email'], $_GET['token'])) { 
    $email = strtolower (mysql_real_escape_string($_GET['email'])); 
    $token = mysql_real_escape_string($_GET['token']); 
    $correctToken = substr (doEncrypt ($email), -26, -6); 
}elseif (isset ($_POST['submit'])) { 
    $email = strtolower (mysql_real_escape_string($_POST['email'])); 
    $token = mysql_real_escape_string($_POST['token']); 
    $correctToken = substr (doEncrypt ($email), -26, -6); 
} 

if (isset ($email, $token, $correctToken)){  
    if ($token == $correctToken) { 
     // Confirm user's email! 
    } 
} 
?> 

はどうもありがとうございました! Billy

編集:OK、これは最大の問題です。プラス記号は$ _GETで検索したときにスペースに変換される唯一の文字ですか?そうであれば、$ _GETセクション内にこれを追加することができるようです:$email = str_replace(' ', '+', $email);スペースはメールアドレス内にある他の理由はありませんか?それは私だったら、再び、 ビリー

+2

はい、[urlencode'](http://php.net/urlencode)は(メールを送信する前に)最も適切です。 – mario

+0

可能な複製[PHP - GETクエリ付きプラス記号](http://stackoverflow.com/questions/2671840/php-plus-sign-with-get-query) – mario

+0

[PHPでは文字列をhtmlspecialchars()を使用して不正な文字を処理するか、正規表現を使用する必要がありますか?](http://stackoverflow.com/questions/2993027/in-php-when-submitting-strings-to-the-database-should- i-take-care-of-illegal-cha) –

答えて

0

おかげで、私はハッシュ前のスペースにプラス記号を変換するstr_replace()を行うだろう。 str_replace()をハッシュ関数に入れます。その方法では、ユーザーの電子メールアドレスは関数のスコープ内でのみ変更され、残りのスクリプトでは変更されません。

function hash_email($email) 
{ 
    $email = str_replace('+', ' ', $email); 

    ...hashing stuff happens here... 

    return $token; 
} 

$token = hash_email($_GET['email']); 
+0

唯一の問題は、私はいくつかの場所でそれをしなければならないということです。正しいトークンを計算する前にスペースをプラス符号に変換するとどうなりますか?私は 'if(isset($ _GET ['email']))'セクション内でのみこれを行うことができますか?私の編集を参照してください。 @njbairさんの返信をありがとう! – JeepFreak

+0

サンプルコードを含むように編集されました。 – njbair

+0

パーフェクト!どうもありがとうございます! – JeepFreak

関連する問題