« 玄箱のファンを交換 | メイン | MODx本いよいよ出ます!! »

OpenPNEの2.0→2.6バージョンアップに伴う、メールアドレスの文字化けの問題について

[ PC ]

OpenPNEにおいて、バージョンアップによってメールアドレスが文字化けする問題が最近ありました。
いろいろ情報をあさったところ、OpenPNE付属のPEER Crypt/Blowfish関数の古いバージョンに起因するバグに問題があるようです。(MCryptが入っていない事が原因だ、と書いてある情報がありますが、具体的には違うと思います。MCryptが問題ではなくて、Blowfishのバグが問題です。それにより、新バージョンではバグが直っているので、バグありの状態でエンコードしたものが、新バージョンでデコードできないためです。)

http://q.hatena.ne.jp/mobile/1150003912
このバグはプラットホームによって発現するようです。チェックするには

< ? php
echo -2861207174 ^ 493813264;
? >

この値が、1209765738ならOK、-1653670384 だとバグありです。
内部で使用されているunsigned int の演算に問題があるようです。

このOpnePNE付属のPEER Crypt/Blowfish関数は、システムのPHPでMCrypt拡張モジュールが使える状態では、MCryptを使用しています。(新旧のOpenPNEともに)
使えない環境では、付属のライブラリで暗号化しています。
なので、既にMCRyptモジュールが使えるようになっている環境では、新旧ともにMCryptを使うはずなので、問題にならなかったかと思います。
あと、バグなしのBlowfishで、なおかつMCryptが導入されていない環境から、
MCryptがある環境へ移行する際も、文字化けしてしまいました。
その場合は、
define('CRYPT_BLOWFISH_NOMCRYPT', true);
をコンフィグに記述してやると新しいOpenPNEではMCryptを使用しない設定にできます。
これによってCrypt/Blowfishを使うので文字化けしません。


とりあえず、メールアドレス文字化け問題が起きる条件を書いてみますと、
  移行元                 移行先
1 (MCryptなし)旧バグありCrypt/Blowfish   (MCryptなし)新バグなしCrypt/Blowfish
2 (MCryptなし)旧バグありCrypt/Blowfish   MCrypt拡張モジュールあり
3 MCrypt拡張なし(新OpenPNE状態で)    MCrypt拡張モジュールあり

移行ツールを作りましたのでぜひご利用ください。
(データベースを更新するため、mysqldumpやphpMyAdminでバックアップを作ってください)
OpenPNE2.6.2でのみ確認済みです。
これらは、文字化けが発生している状態の新バージョンのOpenPNEで実行してください。
1.の条件用

convert_blowfish.phpをpublic_html以下に置く 
そして、public_htmlに移動して、コマンドで、/usr/bin/php convert_blowfish.php と実行。
2.の条件用
convert_blowfish_NOEXT.phpをpublic_html以下に置く。
BlowfishOldNOEXT.php
OPENPNE_DIRのlib/include/Crypt/以下に
public_htmlに移動して、/usr/bin/php convert_blowfish_NOEXT.php を実行。
3.の条件用
convert_blowfish_mcrypt.phpをpublic_html以下に置く。
BlowfishNOEXT.php
OPENPNE_DIRのlib/include/Crypt/以下に
public_htmlに移動して、/usr/bin/php convert_blowfish_mcrypt.php を実行。

何度もいいますが、データベースのバックアップを取ってください。
それか、別ディレクトリ、別データベースで動かして、その環境で移行してから、確認して元の方へデータベースをそのまま移行するのが良い手だと思います。

本当は、こういう移行ツールを本家で入れておいてくれたら良いと思うのだけど。
なんだか、OpenPNEはドキュメントが足りないと思う。


ランキングアップにご協力ください。
にほんブログ村 IT技術ブログへ
にほんブログ村 大学生日記ブログへ

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


にほんブログ村 IT技術ブログへ
にほんブログ村 大学生日記ブログへ

最近のコメント

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.