note-2 をレビューしました。レビューOKです。
opToolkit::getRandom() が定義された経緯を調べましたが #1113 で追加されていました。これを関連チケットとしておきました( #1113 を BP 対応することになった場合、あるいはその修正内容が参考にされた場合に、この問題があることを周知する意図も含めて)。
このメソッドを呼び出しているのは以下に示す箇所のみであり、これらは静的メソッドであることを前提としているため、この修正による副作用はない( note-2 の修正以外にこの問題に関して修正すべき箇所が他には無い)と判断できます。
$ ack 'getRandom' -aiw
lib/util/opToolkit.class.php
491: * Licensed under The BSD License. Original is the Ethna_Util::getRandom() method.
502: public static function getRandom($length = 64)
lib/user/opSecurityUser.class.php
183: $rememberKey = opToolkit::getRandom();
lib/response/opWebResponse.class.php
38: $value = opToolkit::getRandom();
plugins/opOpenSocialPlugin/apps/mobile_frontend/modules/application/actions/actions.class.php
344: $this->tk = opToolkit::getRandom('12');
345: $t = opToolkit::getRandom();
参考までに、なぜこのミスが生じたのか(本当にこのチケットでの修正を行なってしまっても良いのか)追ってみました。
http://redmine.openpne.jp/issues/1113#note-6 にも経緯を示しましたが、 #1113 の修正の詳細は http://co3k.org/blog/8#cookie-id で公開されています。
で、 Ethna は BSD License だったので、 Ethna のコードの一部を Apache License な OpenPNE で流用することはライセンス的に矛盾しません。そういうわけでこの Ethna_Util::getRandom() をありがたく拝借し、 opToolkit::getRandom() として利用させてもらうことにしました
とその記事にある通り、また、 opToolkit::getRandom() メソッドのコメント(以下)にもあるように、 Ethna_Util::getRandom() を参考にしていることが明記されています。
488- /**
489- * Generates a randomized hash (from Ethna 2.5.0)
490- *
491: * Licensed under The BSD License. Original is the Ethna_Util::getRandom() method.
492- *
493- * Copyright (c) 2004-2006, Masaki Fujimoto
494- * All rights reserved.
495- *
496- * @author Masaki Fujimoto <fujimoto@php.net>
497- * @license http://www.opensource.org/licenses/bsd-license.php The BSD License
498- *
499- * @param int $length Length of a hash
500- * @return string
501- */
502- public static function getRandom($length = 64)
503- {
:
かといって初回のセッション ID を使い回すのもどうか……と悩みに悩んで見つけたのが、 Ethna の Ethna_Util::getRandom() です。
http://git.sourceforge.jp/view?p=ethna/ethna.git;a=blob;f=class/Ethna_Util.php;h=c3ab01a60f97e667ded1b13a6cdf8faea9991e9a;hb=HEAD
この問題は #1113 での修正時点で、 Ethna_Util::getRandom() (これは PHP4 を前提としている: スコープ定義演算子 )を、 opToolkit::getRandom() として定義する際に単に static を付け忘れただけであると判断できます(oop5 static キーワード スコープ定義演算子 )。
note-2 の修正は適切であると判断します。