OpenPNE Issue Tracking System: チケット
http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2020-06-12T13:38:53Z
OpenPNE Issue Tracking System
Redmine
OpenPNE 3 - Enhancement(機能追加・改善) #4447 (New(新規)): 携帯(ガラケー)向けの機能を削除する
http://redmine.openpne.jp/issues/4447
2020-06-12T13:38:53Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-概要"></a>
<h3 >Overview (概要)<a href="#Overview-概要" class="wiki-anchor">¶</a></h3>
<p>携帯(ガラケー)向けの機能を削除する。(スマートフォン向けの機能は対象外)</p>
<p>mobile_frontend, mobile_mail_frontend, 携帯向けメール 等</p>
<a name="Spec-仕様"></a>
<h3 >Spec (仕様)<a href="#Spec-仕様" class="wiki-anchor">¶</a></h3>
<p>仕様がある場合、仕様を記入</p>
opLikePlugin - Bug(バグ) #4182 (Fixed(完了)): opSkinThemePlugin の Bootstrap とバージョンが違うためデザインが崩れる箇所がある
http://redmine.openpne.jp/issues/4182
2017-03-31T08:00:14Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opLikePlugin をインストールした環境で、opSkinThemePlugin を有効にすると、PC画面でデザインが崩れる箇所がある。</p>
<p>例:モーダルが画面外に表示される</p>
<p><img src="http://redmine.openpne.jp/attachments/download/655/modal.png" alt="" /></p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>opLikePlugin と opSkinThemePlugin で同梱されている Bootstrap のバージョンが異なるため。</p>
PC:
<ul>
<li>opLikePlugin: v2.0.1</li>
<li>opSkinThemePlugin: v2.3.2</li>
</ul>
<p>なお、スマートフォンの画面では opLikePlugin に同梱されている Bootstrap は読み込まれない。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
opLikePlugin - Bug(バグ) #4181 (Fixed(完了)): opSkinBasicPlugin 使用時にPC画面全般のデザインが崩れる
http://redmine.openpne.jp/issues/4181
2017-03-31T07:41:34Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>opLikePlugin をインストールした環境で、opSkinBasicPlugin を有効にすると、PC画面でデザインが崩れる箇所がある。</p>
<p>例えば、以下のようにフォームのラジオボタンや、右サイドの言語切替部分が不自然な表示となる。<br /><img src="http://redmine.openpne.jp/attachments/download/654/skin_basic_plugin.png" alt="" /></p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>opSkinBasicPlugin 使用時のPC画面では Bootstrap は本来使用されていないが、opLikePlugin では PC 版ログイン後の全画面で Bootstrap の CSS を強制的に読み込むため、デザインが崩れる。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>opLikePlugin に関係ない箇所のデザインに影響が出ないような変更をするか、opSkinBasicPlugin との併用は不可として説明する。</p>
opLikePlugin - Bug(バグ) #4180 (Fixed(完了)): 日記のスマートフォン版に対応していない
http://redmine.openpne.jp/issues/4180
2017-03-31T07:25:02Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>README のスクリーンショットには、日記のスマートフォン版の画面が存在するが、実際には対応していない。<br /><a class="external" href="https://github.com/tejimaya/opLikePlugin/blob/opLikePlugin-1.2.4/README.md">https://github.com/tejimaya/opLikePlugin/blob/opLikePlugin-1.2.4/README.md</a></p>
<p>opDiaryPlugin 用のパッチ<br /><a class="external" href="https://github.com/tejimaya/opLikePlugin/blob/opLikePlugin-1.2.4/data/patches/opDiaryPlugin.patch">https://github.com/tejimaya/opLikePlugin/blob/opLikePlugin-1.2.4/data/patches/opDiaryPlugin.patch</a><br />スマートフォン用のファイルに対する変更がない。</p>
<p>日記のスマートフォン版に対応するか、READMEの説明を改める必要あり</p>
opCalendarPlugin - Bug(バグ) #3822 (Accepted(着手)): SNS内名称設定の「コミュニティ」に対応していない
http://redmine.openpne.jp/issues/3822
2015-06-30T09:29:37Z
Rimpei Ogawa
ogawa@tejimaya.com
<p>管理画面のSNS内名称設定で「コミュニティ」を変更しても反映されない箇所がある。</p>
<pre>
apps/pc_frontend/i18n/messages.ja.xml
266- <source>All Community Member's opened Schedule and Community Event</source>
267: <target>全メンバーのスケジュールとコミュニティイベントをカレンダーに表示</target>
274- <source>Only Community Event</source>
275: <target>コミュニティイベントのみカレンダーに表示</target>
</pre>
OpenPNE 3 - Bug(バグ) #3602 (Fixed(完了)): プロフィール入力値が空の場合の公開設定がプロフィール編集時のデフォルト値に反映されるものとされないものがある
http://redmine.openpne.jp/issues/3602
2014-05-07T08:41:40Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>プロフィール登録・編集フォームで、公開設定変更が可能かつ必須項目ではないプロフィール項目に対して値が空の状態で公開設定のみを変更して送信した後に、プロフィール編集フォームを開くと公開設定のデフォルト値に変更が反映されるものとされないものが混在した状態で表示されます。</p>
<p>値が空の場合の公開設定が保持されるかどうかは、管理画面から設定可能なプロフィール項目の種類(フォームタイプと入力値タイプ)によって変わります。</p>
<p>プリセット</p>
<table>
<tr>
<th>タイプ </th>
<th>値が空の場合の公開設定 </th>
</tr>
<tr>
<td> 性別 </td>
<td> 保持されない </td>
</tr>
<tr>
<td> 誕生日 </td>
<td> 保持されない </td>
</tr>
<tr>
<td> 国または地域 </td>
<td> 保持される </td>
</tr>
<tr>
<td> 都道府県 </td>
<td> 保持される </td>
</tr>
<tr>
<td> 郵便番号 </td>
<td> 保持される </td>
</tr>
<tr>
<td> 電話番号 </td>
<td> 保持される </td>
</tr>
<tr>
<td> 自己紹介 </td>
<td> 保持される </td>
</tr>
</table>
<p>汎用</p>
<table>
<tr>
<th>フォームタイプ </th>
<th>入力値タイプ </th>
<th>値が空の場合の公開設定 </th>
</tr>
<tr>
<td> テキスト </td>
<td> 文字列 </td>
<td> 保持される </td>
</tr>
<tr>
<td> テキスト </td>
<td> 数値 </td>
<td> 保持されない </td>
</tr>
<tr>
<td> テキスト </td>
<td> メールアドレス </td>
<td> 保持される </td>
</tr>
<tr>
<td> テキスト </td>
<td> URL </td>
<td> 保持される </td>
</tr>
<tr>
<td> テキスト </td>
<td> 正規表現 </td>
<td> 保持される </td>
</tr>
<tr>
<td> テキスト(複数行) </td>
<td> 文字列 </td>
<td> 保持される </td>
</tr>
<tr>
<td> 単一選択(プルダウン) </td>
<td> - </td>
<td> 保持されない </td>
</tr>
<tr>
<td> 単一選択(ラジオボタン) </td>
<td> - </td>
<td> 保持されない </td>
</tr>
<tr>
<td> 複数選択(チェックボックス) </td>
<td> - </td>
<td> 保持されない </td>
</tr>
<tr>
<td> 日付 </td>
<td> - </td>
<td> 保持されない </td>
</tr>
</table>
<p>なお、プロフィールの表示に関しては、値が空の場合には公開設定が保持されるされないに関わらず非表示となるため影響がありません。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>値が空の場合に公開設定が保持されるものは member_profile テーブルにレコードが生成されるもの、保持されないものはレコードが生成されないものです。(メンバーの各プロフィール項目の値と公開設定値は member_profile テーブルの同一のレコード内に保存されます。)</p>
<p>メンバープロフィール情報の登録・編集をおこなう MemberProfileForm には、値が <code>NULL</code> の場合に既存レコードを削除し、新しいレコードは登録しない分岐があります。</p>
<p>MemberProfileForm::save()<br /><pre><code class="php syntaxhl"><span class="CodeRay"> <span class="keyword">if</span> (<span class="predefined">is_null</span>(<span class="local-variable">$value</span>[<span class="string"><span class="delimiter">'</span><span class="content">value</span><span class="delimiter">'</span></span>]))
{
<span class="keyword">if</span> (<span class="local-variable">$memberProfile</span>)
{
<span class="keyword">if</span> (<span class="local-variable">$profile</span>->isMultipleSelect())
{
<span class="local-variable">$memberProfile</span>->clearChildren();
}
<span class="local-variable">$memberProfile</span>-><span class="predefined">delete</span>();
}
<span class="keyword">continue</span>;
}
</span></code></pre></p>
<p>is_null() の判定であるため、値が <code>NULL</code> ではなく空文字列や空配列等である場合にはこのブロックは実行されず member_profile テーブルにはレコードが生成されることになります。</p>
<p>ユーザー入力値が空だった場合に、フォーム内での value がどの値になるかはバリデーターの empty_value オプションの値に依ります。<br />プロフィール項目の種類(フォームタイプと入力値タイプ)によって挙動が変わるのは、バリデーターをフォームタイプと入力値タイプによって生成している (opFormItemGenerator::generateValidator()) のが原因です。</p>
例:
<ul>
<li>「フォームタイプ:テキスト、入力値タイプ:文字列」の場合、<br />バリデーターは opValidatorString で、empty_value は空文字列 → 公開設定が「保持される」</li>
<li>「フォームタイプ:テキスト、入力値タイプ:数値」の場合、<br />バリデーターは sfValidatorInteger で、empty_value は <code>NULL</code> → 公開設定が「保持されない」</li>
</ul>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>
opMessagePlugin - Bug(バグ) #3506 (Fixed(完了)): 申請系のメッセージをPCで表示すると二重にHTMLエスケープされる
http://redmine.openpne.jp/issues/3506
2013-11-29T06:45:36Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>申請系のメッセージをPC版の message/show アクションで表示すると、変数部分のメッセージ内容、メンバーのニックネーム、コミュニティ名などが二重にHTMLエスケープされた状態で出力される。</p>
<p>携帯版では decorate なしで body がそのまま出力される実装になっているため影響はない。</p>
<p>対象</p>
<ul>
<li>コミュニティ管理者交代申請 decorateCommunityTakingOverBody</li>
<li>コミュニティ副管理者交代申請 decorateCommunitySubAdminRequestBody</li>
<li>コミュニティ参加申請 decorateCommunityJoiningRequestBody</li>
<li>フレンド申請 decorateFriendLinkBody</li>
</ul>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>申請系のメッセージ表示時に opMessageSender::decorateBySpecifiedTemplate() 経由で取得したメッセージ本文は sfView を利用しており変数が自動的に HTML エスケープされた状態となるが、この文字列は message/showSuccess のテンプレート表示でさらに HTML エスケープ処理されるため二重にエスケープされてしまう。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>PluginSendMessageData::getDecoratedMessageBody() が返す文字列は message type が 'message' の場合の処理をみる限り HTML ではないことを想定していると考えられるため、opMessageSender::decorateBySpecifiedTemplate() で HTML エスケープされないよう修正するのがよいと思われる。</p>
OpenPNE 3 - Bug(バグ) #3295 (New(新規)): ログインフォームの next_uri に特定の値を渡した場合に500エラーとなる
http://redmine.openpne.jp/issues/3295
2013-01-15T04:23:04Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>ログインフォームには認証後に遷移する URL を引き継ぐために next_uri という名前の hidden フィールドが用意されています。<br />この next_uri に特定の不正な値を指定した状態でログイン操作を行うと認証成功時に 500 エラーとなります。</p>
<p>なお、next_uri の値の改変は input[type="hidden"] の値を書き換えるか、もしくは、 <a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): http のWeb全体に公開が可能な画面に https のログイン画面を経由してアクセスしようとするとログインに失敗する (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3073">#3073</a> の修正以後であれば <code>/member/login?next_uri=XXXXX</code> のURLパラメーターを与えれば可能です。</p>
<p>prod 環境で表示されるエラーメッセージ<br /><pre>
現在、サーバが混み合っているか、メンテナンス中です。
ご迷惑をおかけいたしますが、しばらく時間を空けて再度アクセスしてください。
</pre></p>
<p>dev 環境で表示されるエラーメッセージ<br /><pre>
500 | Internal Server Error | sfConfigurationException
The route "foobar" does not exist.
</pre></p>
<p>また、 next_uri の値によっては 500 エラーとはならないが、不自然な挙動をするものもあります。</p>
<p>next_uri の値の例:</p>
<table>
<tr>
<th>next_uri </th>
<th>リダイレクト先 </th>
<th>エラー </th>
<th>備考 </th>
</tr>
<tr>
<td> <code>foobar</code> </td>
<td> なし </td>
<td> 500 エラー </td>
<td> リダイレクトできずに500エラー </td>
</tr>
<tr>
<td> <code>foo/bar</code> </td>
<td> <code>/foo/bar</code> </td>
<td> 404 エラー </td>
<td> エラーだが自然な動作 </td>
</tr>
<tr>
<td> <code>/foo</code> </td>
<td> <code>/foo</code> (※) </td>
<td> 404 エラー </td>
<td> ※OpenPNE.yml の base_url のパスも消える </td>
</tr>
<tr>
<td> <code>/foo/bar</code> </td>
<td> <code>/foo/bar</code> (※) </td>
<td> 404 エラー </td>
<td> ※OpenPNE.yml の base_url のパスも消える </td>
</tr>
<tr>
<td> <code>foo/bar/baz</code> </td>
<td> <code>/foo/bar</code> </td>
<td> 404 エラー </td>
<td> "/baz" の情報がなくなっている </td>
</tr>
<tr>
<td> <code>foo/bar?baz=qux</code> </td>
<td> <code>/foo/bar/baz/qux</code> </td>
<td> 404 エラー </td>
<td> URLの形式が変わっている </td>
</tr>
<tr>
<td> (空の値) </td>
<td> <code>/</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>http://example.com</code> </td>
<td> <code>/</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>member_config_image</code> </td>
<td> <code>/member/image/config</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>@member_config_image</code> </td>
<td> <code>/member/image/config</code> </td>
<td> なし </td>
<td></td>
</tr>
<tr>
<td> <code>member/image/config</code> </td>
<td> <code>/member/image</code> </td>
<td> 404 エラー </td>
<td> "/config" の情報がなくなっている </td>
</tr>
<tr>
<td> <code>member/config/image</code> </td>
<td> <code>/member/config</code> </td>
<td> なし </td>
<td> 意図とは別のURLへリダイレクトしている </td>
</tr>
</table>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>※以下では、symfony 内部で利用するための独自のURL形式を <strong>内部URL形式</strong> 、ブラウザからアクセスする際のURLに利用されるものを <strong>外部URL形式</strong> と呼びます。(ここでは外部サイトを指す URL のことではありません)</p>
<p>この問題はログイン情報POST時に next_uri の入力をチェックする opValidatorNextUri が routing->findRoute() で <strong>外部URL形式</strong> からルートを探している一方で、ログイン成功後のリダイレクト処理で使われている sfAction::redirect() から呼ばれる sfWebController::genUrl() では <strong>内部URL形式</strong> で next_uri の値を扱っていることにより発生しています。</p>
<p>現行の実装では next_uri の値を生成する opWidgetFormInputHiddenNextUri は、routing->getCurrentInternalUri() としているため <strong>内部URL形式</strong> (かつ <code>:module/:action?parameters..</code> の形式)の値をフォームに設定しています。</p>
<p>例えば、next_uri=foobar は opValidatorNextUri 内の findRoute() 時点で以下のルーティングルールとマッチするために、バリデーションをパスしています。</p>
<pre>
array(3) {
["name"]=>
string(13) "default_index"
["pattern"]=>
string(8) "/:module"
["parameters"]=>
array(3) {
["module"]=>
string(6) "foobar"
["action"]=>
string(5) "index"
["sf_culture"]=>
string(5) "ja_JP"
}
}
</pre>
<p>一方、sfWebController::genUrl() は <code>foobar</code> を module_name ではなく route_name と扱ってしまうため、例外が発生します。</p>
<pre>
The route "foobar" does not exist.
</pre>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>(※修正内容が確定したら書き換えてください)</p>
<p>修正方針についての参考情報を記します。</p>
<p>next_uri の役割は、未ログイン状態のユーザーがログイン後に最初にアクセスした URL と同じ URL へ遷移させることであると考えられるため、next_uri の値は 外部URL形式 とするのが自然だと思われます。</p>
<p>一方で、next_uri の役割をユーザーが最初にアクセスした "URL" ではなく "アクション" へ遷移させることと考えれば、 内部URL形式 であっても目的を果たせることになります。しかし、next_uri の値はユーザーが書き換え可能な状態に置かれるものであるため、システム内部で利用するための値を露出させるのはあまり得策ではないとも考えられます。</p>
<p>従って、修正は next_uri を一貫して 外部URL形式 で扱うようにするのがよいのではないかと思います。</p>
<p>next_uri を 内部URL形式 で扱う方針にした場合でも、opValidatorNextUri の修正が必要です。</p>
<a name="参考情報"></a>
<h3 >参考情報<a href="#参考情報" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): http のWeb全体に公開が可能な画面に https のログイン画面を経由してアクセスしようとするとログインに失敗する (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3073">#3073</a> のレビュー中に発見して <a href="/issues/3073#note-18">note-18</a> で最初に報告したものです。</p>
OpenPNE 3 - Bug(バグ) #3155 (Won't fix(対応せず)): スマートフォンで携帯メールアドレスを利用することができない
http://redmine.openpne.jp/issues/3155
2012-08-08T02:59:42Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>スマートフォンで「携帯メールアドレス(※)」を利用している場合、 OpenPNE の登録をはじめとしたメールアドレスに関連する機能が使用できない。</p>
<p>※ OpenPNE が携帯メールアドレスと判定する @docomo.ne.jp, @ezweb.ne.jp, @softbank.ne.jp など<br /><a class="external" href="https://raw.github.com/openpne/OpenPNE3/OpenPNE-3.8.0/lib/config/config/mobile_mail_domain.yml">https://raw.github.com/openpne/OpenPNE3/OpenPNE-3.8.0/lib/config/config/mobile_mail_domain.yml</a></p>
<p>影響のある機能</p>
<ul>
<li>メンバー登録
<ul>
<li>携帯メールアドレスへ送った招待メールから登録できない(招待側はPC、携帯、管理画面からのいずれも同じメールが送信される)</li>
<li>招待なしでの登録時に携帯メールアドレスを入力した場合 [opAuthMailAddressPlugin]</li>
</ul>
</li>
<li>ログイン
<ul>
<li>ログイン用メールアドレス設定が「PCメールアドレスと携帯メールアドレスのどちらか一方を受け付ける」に設定されている場合のみ [opAuthMailAddressPlugin]</li>
</ul>
</li>
<li>携帯メールアドレス変更</li>
<li>パスワード再設定 [opAuthMailAddressPlugin]</li>
<li>携帯メールアドレスへ送信されるメールのうちOpenPNEのURLを含むもの
<ul>
<li>登録完了メール</li>
<li>コミュニティ参加お知らせメール</li>
<li>フレンドの誕生日お知らせメール</li>
<li>デイリー・ニュース</li>
</ul></li>
</ul>
<p>考慮すべきユーザーの状態変化</p>
<ul>
<li>フィーチャーフォン → スマートフォン にメールアドレスそのままで機種変更(SIMカード入れ替え含む)</li>
<li>スマートフォン → フィーチャーフォン にメールアドレスそのままで機種変更(SIMカード入れ替え含む)</li>
</ul>
<p>関連する管理画面設定</p>
<ul>
<li>SNS設定
<ul>
<li>一般設定
<ul>
<li>PC版使用設定</li>
<li>携帯版使用設定</li>
</ul>
</li>
<li>認証関連設定
<ul>
<li>登録の可否</li>
</ul>
</li>
</ul>
</li>
<li>メール設定
<ul>
<li>メール通知テンプレート設定</li>
</ul>
</li>
<li>上級者向け設定
<ul>
<li>携帯関連設定
<ul>
<li>メンバー登録時の携帯個体識別番号取得設定</li>
</ul>
</li>
</ul>
</li>
<li>プラグイン設定
<ul>
<li>opAuthMailAddressPlugin
<ul>
<li>招待モード</li>
<li>PC版有効設定</li>
<li>携帯版有効設定</li>
<li>ログイン用メールアドレス設定</li>
</ul></li>
</ul></li>
</ul>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>スマートフォンのウェブブラウザからのアクセスは OpenPNE の pc_frontend アプリケーションに関連付けられる(スマートフォン対応は謳っていないが 3.6.x 以下も同様の状態である)一方で、メールアドレス関連機能ではスマートフォンでも利用できる「携帯メールアドレス」を mobile_frontend アプリケーションに関連付けているため不整合が起きている。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>以下の4つの問題を修正対象とした。</p>
<ol>
<li>携帯メールアドレス宛てに送られるメールに含まれるURLが mobile_frontend.php となっておりスマートフォンのブラウザからアクセスするとエラー画面が表示される [core][メール送信機能を持つプラグイン全般]</li>
<li>pc_frontend から携帯メールアドレスを利用して新規登録することができない [opAuthMailAddressPlugin]</li>
<li>管理画面からの設定内容によっては、スマートフォン版ログイン画面で携帯メールアドレスを入力してもログインできない [opAuthMailAddressPlugin]</li>
<li>管理画面から登録時に携帯個体識別番号の登録を必須にしている場合にスマートフォンからは登録完了できないことがユーザーにとってわかりにくい [core]</li>
</ol>
<p>修正内容</p>
<p>1. メールに含まれる URL の形式は変更せず、mobile_frontend.php や mobile_frontend_dev.php へ PC やスマートフォンのブラウザでアクセスした場合に pc_frontend の対応する URL へリダイレクトするように変更した。</p>
<p>これにより、携帯メールアドレスに宛てに送られた mobile_frontend.php の付いた URL にスマートフォンのブラウザでもアクセスできるようになった。</p>
<p>2. opAuthMailAddressPlugin の新規登録フローで、pc_frontend 側では PCメールアドレス、携帯メールアドレスのいずれのメールアドレスでも登録完了できるように変更した。</p>
<p>3. opAuthMailAddressPlugin のプラグイン設定から『ログイン用メールアドレス設定』を削除し、設定によらず「PCメールアドレスと携帯メールアドレスの両方を受け付ける」の場合と同様の挙動となるよう変更した。</p>
<p>以前のバージョンから利用している管理者に対しては、変更内容説明のための告知が必要。</p>
<p>ログイン用メールアドレスについて、「PCメールアドレスと携帯メールアドレスのどちらか一方を受け付ける」の挙動が必要だという要望があれば、その設定と合わせて登録フローについても一方のみを受け付ける設定の追加を検討する。</p>
<p>4. 「PC・携帯登録時に携帯個体識別番号の登録を必須にする」設定の場合に pc_frontend での登録フローの最後に表示される携帯メールアドレスを入力するフォーム画面に、「スマートフォンからは登録することができませんのでご注意ください。」という説明文を追加した。</p>
<p>携帯メールアドレスに含まれる URL は、pc_frontend で携帯メールアドレスを入力するフォームが表示されるページと同じ形式のものとなっており、スマートフォンのブラウザからアクセスした場合は今回注意文を追加した画面が表示されることになる。</p>
OpenPNE 3 - Bug(バグ) #3135 (New(新規)): サブクエリのWHERE節に「field IN ?」の形式のDQLがあると Invalid parameter numbe...
http://redmine.openpne.jp/issues/3135
2012-07-27T07:13:19Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>Doctrine でサブクエリの WHERE 節に <code>filed IN ?</code> の形式のものがあると、 DQL から SQL を生成する際に Invalid parameter number のエラーが発生する。</p>
<pre>
SELECT 〜 WHERE field = (SELECT field FROM table WHERE field IN ?);
</pre>
<pre>
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
</pre>
<p>次のようにパラメーター数分の <code>?</code> が DQL 時点で展開されている場合はエラーは発生しない。</p>
<pre>
SELECT 〜 WHERE field = (SELECT field FROM table WHERE field IN (?, ?, ?));
</pre>
<p>具体的には以下のようなコードでエラーが発生する。</p>
<p><strong>例1</strong> : サブクエリの生成に andWhereIn() を利用する場合<br /><pre>
opActivateBehavior::disable(); // あってもなくてもエラー
$q = Doctrine_Core::getTable('MemberConfig')->createQuery('c');
$q2 = $q->createSubquery()
->select('m.id')
->from('Member m')
->andWhereIn('m.id', array('1', '2'));
$q->andWhere('c.member_id IN ('.$q2->getDql().')');
$q->execute();
</pre></p>
<p><strong>例2</strong> : サブクエリを手動で記述する場合<br /><pre>
opActivateBehavior::disable(); // あってもなくてもエラー
$q = Doctrine_Core::getTable('MemberConfig')->createQuery('c');
$q->andWhere('c.member_id IN (SELECT m.id FROM Member m WHERE m.id IN ?)', array(array('1', '2')));
$q->execute();
</pre></p>
<p>※ただし、上の2つの例は APC のキャッシュが有効な状態では2回目以降のアクセスで成功していた</p>
<p>本問題は基本的には Doctrine のバグである可能性が高いが、例1 に関しては opDoctrineQuery を利用しない場合はエラーが発生しないため、OpenPNE の問題とも考えられる可能性がある。</p>
<p>本問題は <a class="issue tracker-1 status-13 priority-4 priority-default closed" title="Bug(バグ): activity/community.json 実行時にDoctrineでエラーが発生する場合がある (Won't fix(対応せず))" href="http://redmine.openpne.jp/issues/3052">#3052</a> の調査中に発見した。(#3052 は 例1 のケースに該当する)</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>DQL から SQL を生成するタイミングで <code>filed IN ?</code> の形式は、 <code>field IN (?, ?, ?)</code> のようにパラメーター配列の要素数に応じた形式に変換されるが、サブクエリ内の変換処理を行なう際にパラメーターを正しく扱えていないようで、要素数を間違ったり、パラメーターが展開されなかったりでエラーになる。</p>
<p>opDoctrineQuery::andWhereIn() は、パフォーマンスチューニングのため <code>filed IN ?</code> の形式の DQL を生成するが (<a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): [Optimization] Doctrine_Query::andWhereIn() add inefficient conditions to a DQL (Doctrine_Query::... (Fixed(完了))" href="http://redmine.openpne.jp/issues/991">#991</a>)、親クラスの Doctrine_Query_Abstract::andWhereIn() をそのまま使う場合は DQL 時点でパラメーターの展開が行われるためこの問題が発生しない。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>例1 だけを修正するのであれば、以下のようにサブクエリ利用前提の場合はパフォーマンスチューニングのためのコードを利用しないという修正案が考えられます。</p>
<pre>
--- a/lib/util/opDoctrineQuery.class.php
+++ b/lib/util/opDoctrineQuery.class.php
@@ -189,6 +189,11 @@ class opDoctrineQuery extends Doctrine_Query
}
}
+ if ($this->isSubquery())
+ {
+ return parent::andWhereIn($expr, $params, $not);
+ }
+
$this->addWhereInCount(count($params));
if ($not)
</pre>
<p>ただし、この修正では例2は動作しないため修正としては不十分かもしれない。</p>
OpenPNE 3 - Bug(バグ) #3112 (Won't fix(対応せず)): メールアドレス変更時のトークンチェックが正しくおこなわれない
http://redmine.openpne.jp/issues/3112
2012-07-09T12:39:00Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>メールアドレス変更時にメールで通知されるURL(/member/configComplete)に含まれるトークンのチェックが機能しておらず、任意のトークン(空の値を含む)で処理が続行されてしまう。</p>
<p>メールアドレス変更後のメールアドレスが正当なものであるか(メールアドレスが存在し、メンバー自身がメール内容を読むことができるか)のチェックが機能していないことになり、メンバーが自身の登録メールアドレス情報を任意の値に変更できてしまうことが考えられる。</p>
<p>一方、他のメンバーのメールアドレスについては、パスワードを知らない前提では変更することはできない。(このため本バグはセキュリティイシューとしていない。)</p>
<p>トークンチェックの機能が実装された 3.0 開発中の時点から報告時点の最新版である 3.8.0 まで、問題となる部分のソースコードは変更されていないため、OpenPNE 3 の全バージョンでこの現象が発生するものと予想される。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>member/configComplete アクションでのトークンチェックのための条件式が間違っており、リクエストURLに含まれるトークンの値によらず次の行へ処理が続行されてしまっているのが原因。</p>
<p>該当部分</p>
<pre>
$this->forward404Unless((bool)$request->getParameter('token') !== $memberConfig->getValue());
</pre>
<ul>
<li>3.8.0 時点 <a class="external" href="https://github.com/openpne/OpenPNE3/blob/OpenPNE-3.8.0/lib/action/opMemberAction.class.php#L241">https://github.com/openpne/OpenPNE3/blob/OpenPNE-3.8.0/lib/action/opMemberAction.class.php#L241</a></li>
<li>初期の開発時点 <a class="external" href="https://github.com/openpne/OpenPNE3/commit/49211457b4a2cf95e4c4c0313f375e9920216a86#L0R93">https://github.com/openpne/OpenPNE3/commit/49211457b4a2cf95e4c4c0313f375e9920216a86#L0R93</a></li>
</ul>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>トークンチェックの条件式を正しいものに修正する。</p>
<p>3.6.4 ベースの修正パッチが以下になります。</p>
<pre>
--- a/lib/action/opMemberAction.class.php
+++ b/lib/action/opMemberAction.class.php
@@ -238,7 +238,7 @@ abstract class opMemberAction extends sfActions
$memberConfig = Doctrine::getTable('MemberConfig')->retrieveByNameAndMemberId($type.'_token', $memberId);
$this->forward404Unless($memberConfig);
- $this->forward404Unless((bool)$request->getParameter('token') !== $memberConfig->getValue());
+ $this->forward404Unless($request->getParameter('token') === $memberConfig->getValue());
$option = array('member' => $memberConfig->getMember());
$this->form = new opPasswordForm(array(), $option);
</pre>
OpenPNE 3 - Bug(バグ) #2440 (Fixed(完了)): 携帯版で外部サイトのURLへリダイレクトする処理を記述すると、リダイレクト先のURLにセッションIDが付与されてしま...
http://redmine.openpne.jp/issues/2440
2011-09-27T10:06:27Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p>携帯版(mobile_frontend アプリケーション内)で外部URLへリダイレクトする処理を記述すると、Cookie を利用できない携帯端末でアクセスした際に、リダイレクト先の URL のパラメーターとしてセッションIDが自動的に付与されてしまいます。</p>
<p>例えば、アクション内に <code>$this->redirect('http://externalsite.example.com/');</code> のように記述した場合がこれに該当し、このときリダイレクト先の URL が <code>http://externalsite.example.com/?OpenPNE_mobile_frontend=XXX</code> のようになってしまいます。</p>
<p>mobile_frontend のアクション内でこの問題を回避してリダイレクト処理を記述するには、Location ヘッダーを送信する処理を自前で記述する方法くらいしか思いつかず、mobile_frontend 内にリダイレクト処理を記述している場合のほとんどこの問題の発生条件に該当するのではないかと思います。</p>
<p>OpenPNE 3.6RC1 で現象を確認しましたが、原因となっている箇所は OpenPNE 3.0 〜 3.7 まで同じ実装となっており、現行の OpenPNE 3 のすべてのバージョンで発生すると思われます。</p>
<p>携帯版で信頼できない外部URLへリダイレクトする際には、既存のセッションを無効にした上でおこなう必要があり、その場合には付与されたセッションIDによる攻撃は成立せず、セキュリティ上の問題はありません。(また、たとえ本チケットの問題を修正したとしても、リファラーからセッションIDが漏えいする危険があるため、既存のセッションが有効な状態で携帯版のログイン後ページから信頼できない外部URLへ直接リダイレクトしてはなりません。)</p>
<p>ただし、付与されるのが無効なセッションIDであったとしても、不要なURLパラメーターが強制的に付与されてしまうのは問題であるため、通常のバグとして報告しました。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>opMobileFrontWebController::redirect() で渡された URL の内容によらず、強制的にリダイレクト先の URL パラメーターにセッションIDを追加しているため。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>opMobileFrontWebController::redirect() に渡された URL が絶対URLである場合、URL は外部サイトを指していると仮定して、セッションIDのパラメーターをリダイレクト先のURLに付与しないよう修正します。</p>
<p>絶対URLであるからと言って外部サイトを指しているとは限らないですし、逆に絶対URLでないからと言って外部サイトを指していないとも限らないですが、本チケットでの修正対象を絶対URLの場合としたのは、PHP の session.use_trans_sid の仕様に合わせるためです。</p>
<p>(参考)PHP: セッションIDの受渡し<br /><a class="external" href="http://www.php.net/manual/ja/session.idpassing.php">http://www.php.net/manual/ja/session.idpassing.php</a></p>
<p>ここで絶対URLというのは、 <a href="http://tools.ietf.org/html/rfc3986#section-4.3" class="external">RFC 3986 : 4.3. Absolute URI</a> で定義されている absolute-URI の条件を満たすURLで、scheme(http や https)から始まるURLです。</p>
<p>よって、以下のようなURLについてはこのチケットでは修正対象としません。</p>
<ol>
<li>foo (相対パス)</li>
<li>/bar (絶対パス)</li>
<li>//hoge.com (スキームを省略したURL)</li>
</ol>
<p>これらはいずれも PHP の session.use_trans_sid でも相対URL扱いをされ、セッションIDが付与される対象となります。(このうち、相対パス形式の指定は redirect() メソッドの引数として渡した場合は、symfony の内部 URI とみなされるため HTML 内に直接書いた場合とは意味が異なりますが、セッションIDが付与されるかどうかの判定に関しては同じ結果となります。)</p>
<p>この修正以後も、開発者は mobile_frontend 内で絶対URL以外の形式で外部サイトを指す URL を安易に利用するべきではありません。これはリダイレクト先として指定する URL に限らず、PHP の session.use_trans_sid で変換対象となる HTML 内の URL にも当てはまります。</p>
<p>一方、この修正により、サイト内部の URL を絶対URLで記述している場合、セッションIDのパラメーターが付与されなくなるため、正常に動作しなくなる可能性があります。ただ、 redirect() メソッドを利用する際に OpenPNE (symfony) 内部の URL を指定するのに絶対URLを使うメリットはほとんどないと思われるため、このようなケースは珍しいと考えられます。仮にこのようなケースに該当する場合は、symfony の内部 URI 形式を利用するようにするか、もしくは、自力でセッションIDを付与するようにする必要があります。</p>
OpenPNE 3 - Bug(バグ) #2253 (Fixed(完了)): Yahoo! ケータイから入力した絵文字が [] という文字列で保存されてしまう
http://redmine.openpne.jp/issues/2253
2011-06-29T04:43:47Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="Overview-現象"></a>
<h3 >Overview (現象)<a href="#Overview-現象" class="wiki-anchor">¶</a></h3>
<p><a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): Yahoo! ケータイにおける SSL 仕様変更対応(絵文字) (Fixed(完了))" href="http://redmine.openpne.jp/issues/2135">#2135</a> の変更以降で発生します。</p>
<p>Yahoo! ケータイから入力した絵文字が [] という文字列で保存されてしまう。</p>
<a name="Causes-原因"></a>
<h3 >Causes (原因)<a href="#Causes-原因" class="wiki-anchor">¶</a></h3>
<p>入力の1バイト目がShiftJISで 0xF7, 0xF9, 0xFB の場合、そのバイトを含む2バイトをSoftbank絵文字と見なし、バイナリ列からOpenPNE形式文字列への変換を行う。</p>
<p>従来、この2バイトをSoftBank旧来の「ISO-2022絵文字 (1B 24 xx yy 0F)」に変換した上でテーブルルックアップしていたが、#2135 にてテーブル側(→lib/vendor/OpenPNE2/KtaiEmoji/Softbank.php)がこのバイナリフォーマットを廃し、実体参照で保持するように変更されたので、ルックアップに失敗するようになったのが原因である。</p>
<a name="Way-to-fix-修正内容"></a>
<h3 >Way to fix (修正内容)<a href="#Way-to-fix-修正内容" class="wiki-anchor">¶</a></h3>
<p>lib/vendor/OpenPNE2/KtaiEmoji.php において、ISO-2022絵文字ではなく実体参照をキーとしてテーブルルックアップを行うように修正する。</p>
OpenPNE 3 - Bug(バグ) #1598 (Fixed(完了)): opApplicationConfiguration::setCacheDir() に不要な処理が残っている
http://redmine.openpne.jp/issues/1598
2010-09-17T13:35:32Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>opApplicationConfiguration::setCacheDir() に不要な処理が残っている。</p>
<pre>
sfConfig::set('sf_cache_dir', $newCacheDir);
</pre>は、 sfProjectConfiguration::setCacheDir() で同じ処理が行われるので不要。
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<ul>
<li>opApplicationConfiguration::setCacheDir() の sfConfig::set('sf_cache_dir', $newCacheDir); を削除</li>
</ul>
OpenPNE 3 - Bug(バグ) #938 (Pending Fixing(修正待ち)): メール投稿処理中にエラーが発生した場合にエラー用のHTMLがメールとして返信されてしまう
http://redmine.openpne.jp/issues/938
2010-04-07T06:44:12Z
Rimpei Ogawa
ogawa@tejimaya.com
<a name="現象"></a>
<h3 >現象<a href="#現象" class="wiki-anchor">¶</a></h3>
<p>メール投稿処理中にエラー(捕捉されない例外)が発生した場合にエラー用のHTMLがメールとして返信されてしまう。</p>
<a name="原因"></a>
<h3 >原因<a href="#原因" class="wiki-anchor">¶</a></h3>
<p>config/error/error.html.php の出力内容が openpneExecutemailactionTask 内の処理によりメール送信元に返送されるため。</p>
<a name="修正内容"></a>
<h3 >修正内容<a href="#修正内容" class="wiki-anchor">¶</a></h3>
<p>修正内容を記入</p>