2012-04-04 9 views
0

私のウェブサイトはWordpressで構築されており、私は自分のデータベースに配置する必要がある個人情報を収集しています。ここまで私のPHPの挿入のためです:ワードプレスによるPHP暗号化

//defined in wp-config.php 
$key = KEY_ENCRYPT; 

function encrypt($text) 
{ 
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)))); 
} 


if($_POST){ 
    //POST object placed in variables 
    $user_domain = $_POST['domain']; 
    $s_user = $_POST['s-username']; 
    $s_pass = $_POST['s-password']; 
    $w_user = $_POST['w-username']; 
    $w_pass = $_POST['w-password']; 

    //encrypting data 
    $encrypted_server_username = encrypt($s_user); 
    $encrypted_server_password = encrypt($s_pass); 
    $encrypted_wordpress_username = encrypt($w_user); 
    $encrypted_wordpress_password = encrypt($w_pass); 

    //set up array for options table 
    $user_website_data = array(
     'domain'=>$user_domain, 
     'server_username'=>$encrypted_server_username, 
     'server_password'=>$encrypted_server_password, 
     'wordpress_username'=>$encrypted_wordpress_username, 
     'wordpress_password'=>$encrypted_wordpress_password 
     ); 

     update_option($user_domain . '_website_data', $user_website_data); 

このコードは、配列に情報を正常に格納します。あなたはこのコードが動作していることとプロセスがhttp://thewpvalet.staging.wpengine.com/sign-up/?plan=basicであることを見ることさえできます。テストするCC番号として4242424242424242を使用してください。

私はバックエンドの管理領域にデコードを実装しようとしているので、ドメインで検索して資格情報を取得できます。これは私のコードです:

if(isset($_POST['domain'])){ 
     function decrypt($text) 
     { 
      $key = KEY_ENCRYPT; 

      return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))); 
     } 


     $search_domain = $_POST['domain']; 
     $url_removal = array("http://","www."); 
     $clean_search_domain = str_replace($url_removal, '', $search_domain); 
     $user_options = get_option($search_domain.'_website_data'); 

     echo '<strong>Login Information:</strong></br>' . 
     'Domain:' . $user_options['domain'] . '</br>' . 
     'Server Username:' . decrypt($user_options['server_username']) . '</br>'; 

    } 

これは返すMCRYPT_DECRYPT()[function.mcrypt-解読]:キーのサイズ/ NAS/WP/WWW /ステージング/ thewpvalet/WP-内容で、このアルゴリズムは大きすぎます/ plugins/user-info/index.php on line 43

私はここで間違っていますか?

+0

$ key/KEY_ENCRYPTはどれくらいですか? –

+4

キリスト、あなたは本当にクレジットカードのデータを受け入れるためにワードプレスを使用すべきではありません。 PCIコンプライアンスという非常に面倒な作業を検討しましたか?これにはStripeのようなサービスを使います。 – ceejayoz

+1

ceejayoz、申し訳ありませんが、あなたのコメントをするつもりなら、質問に気をつけてください。ストライプを使用していて、Stripe.jsクラスを使用してCC情報のトークンを送信しています。これで、移行を実行するために必要なWordpressの資格情報とサーバ情報に関することになりました。あなたが何か良いまたは有益なことを仮定せずに言うことがない場合は、コメントしないでください。 – Enrico

答えて

2

私はここで間違っていますか?

はい、間違っていることはrolling your own cryptographyです。 「あなたは非標準のRijndael方式のた​​め、(とにかくIVを破棄)ECBモードで(安全でない)IVを生成している

/** 
* THIS CODE IS INSECURE. DO NOT USE IT. PURGE IT FROM YOUR CODEBASE! 
*/ 
function encrypt($text) 
{ 
    return trim(
     base64_encode(
      mcrypt_encrypt(
       MCRYPT_RIJNDAEL_256, // Non-standard block cipher; not AES 
       $key, 
       $text, 
       MCRYPT_MODE_ECB, // ECB mode is insecure 
       mcrypt_create_iv(// ECB mode doesn't use an IV anyway 
        mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), 
        MCRYPT_RAND // you want MCRYPT_DEV_URANDOM 
       ) 
      ) 
     ) 
    ); 
} 

、そしてあなた:いくつかの空白を追加して、詳細にあなたの関数を見てみましょうメッセージ認証を使用しません。 Encryption without message authentication is a fatal mistake

マルク・B、キーは34文字の長さ

あなたがMCRYPT_RIJNDAEL_256か(排他的にMCRYPT_RIJNDAEL_128方法によってである。mcrypt is considered harmful)AESを使用している場合、これらは許容鍵サイズです。

  • 16バイト
  • 24バイト
  • 32バイト

エラーが発生するのは、34が無効な入力であるためです。これは、暗号化キーの代わりに人間が判読可能なパスワードを使用している可能性が高いことを意味します。

TL; DR:自分の暗号をロールしないで、よく研究された実装を代わりに使用してください。 defuse/php-encryptionZend\Cryptが最適です。