http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2011-08-17T09:57:35Z
OpenPNE Issue Tracking System
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10280
2011-08-17T09:57:35Z
Minoru Takai
main.coeurl@gmail.com
<ul><li><strong>対象バージョン</strong> を <i>OpenPNE 3.7.0</i> にセット</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10332
2011-08-20T15:42:32Z
Minoru Takai
main.coeurl@gmail.com
<ul></ul><p>この問題は <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): Can added the profile distinguished name when blank. (プロフィール識別名を空欄でも追加できてしまう) (Fixed(完了))" href="http://redmine.openpne.jp/issues/839">#839</a> の内容です。</p>
<p><a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): Can added the profile distinguished name when blank. (プロフィール識別名を空欄でも追加できてしまう) (Fixed(完了))" href="http://redmine.openpne.jp/issues/839">#839</a> (3.5.1 向け) とそのBP <a class="issue tracker-4 status-5 priority-4 priority-default closed" title="Backport(バックポート): Can added the profile distinguished name when blank. (プロフィール識別名を空欄でも追加できてしまう) (Fixed(完了))" href="http://redmine.openpne.jp/issues/900">#900</a> (3.4.x 向け) がありましたが、 <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): Can added the profile distinguished name when blank. (プロフィール識別名を空欄でも追加できてしまう) (Fixed(完了))" href="http://redmine.openpne.jp/issues/839">#839</a> は修正が不十分なまま完了となっています。言い換えれば、 3.4.x 向けのみ、より適切な修正が施されています。</p>
<p>これが影響してこのチケットでの問題が生じています。 <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): Can added the profile distinguished name when blank. (プロフィール識別名を空欄でも追加できてしまう) (Fixed(完了))" href="http://redmine.openpne.jp/issues/839">#839</a> はすでにクローズしているため、このチケットで <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug(バグ): Can added the profile distinguished name when blank. (プロフィール識別名を空欄でも追加できてしまう) (Fixed(完了))" href="http://redmine.openpne.jp/issues/839">#839</a> の修正内容を引き継ぐこととします。</p>
<hr />
<p>このチケット作成時点の内容を残しておきます。</p>
<p>プロフィール項目を管理画面で作成するときに識別名に全角文字が使え、その場合に携帯版でプロフィール編集が失敗する</p>
<a name="概要"></a>
<h3 >概要<a href="#概要" class="wiki-anchor">¶</a></h3>
<p>現時点の OpenPNE-3.6 以降で、</p>
<ol>
<li>プロフィール項目追加画面(/pc_backend.php/profile/edit)にアクセスする</li>
<li>識別名に「全角文字を含めた文字列」を入力する</li>
<li>プロフィール項目を作成する</li>
<li>mobile_frontend ログイン後、プロフィール編集ページ(/member/edit/profile)にアクセスする</li>
<li>プロフィール編集ページで「確定」ボタンを押す</li>
</ol>
<p>すると、「正しくありません。」というエラーメッセージが表示され、プロフィール編集が成功しない。</p>
<p>識別名が半角英字列ではない場合について、</p>
<ul>
<li>pc_backend では、プロフィール作成時点でバリデータに弾かれない</li>
<li>pc_frontend では、プロフィール編集時点でバリデータに弾かれない</li>
<li>mobile_frontend では、PC版と異なり、プロフィール編集時点でバリデータに弾かれる</li>
</ul>
<p>という動作となっている。また、識別名に使える文字列が何なのかについて pc_backend では分からない。</p>
<a name="修正すべき内容"></a>
<h3 >修正すべき内容<a href="#修正すべき内容" class="wiki-anchor">¶</a></h3>
<ul>
<li>プロフィール項目の識別名に全角文字を含めた場合に、 pc_backend と pc_frontend ではエラーにならず、 mobile_frontend だけエラーになる不自然な動作を解消する。</li>
</ul>
<p>mobile_frontend でもバリデータに弾かれないようにするのか、あるいは識別名に使える文字を制限するのか、このどちらかが考えられるが、 OpenPNE-3.4 以前は pc_backend でプロフィール項目を作成する時点で「全角文字が含まれている」という場合や「数字から始まる」という場合にはバリデータに弾かれるようになっている。</p>
<p>恐らく次の内容の修正を行うことになる。</p>
<ul>
<li>pc_backend でプロフィール項目を作成する時点で、識別名に使える文字が何かを明示し、それに反する文字列はバリデータで弾くようにする。</li>
</ul>
<a name="対象バージョン"></a>
<h3 >対象バージョン<a href="#対象バージョン" class="wiki-anchor">¶</a></h3>
<p>master(3.7), 3.6.x で修正が必要。</p>
<p>3.4.x では pc_backend でバリデータに弾かれるため、携帯版でプロフィール編集が失敗する問題は起こらない。しかしながら、「識別名に使える文字が何か」を明示する修正を行うとしたら 3.4.x にもバックポートは可能なはずである。</p>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10333
2011-08-20T16:58:47Z
Minoru Takai
main.coeurl@gmail.com
<ul><li><strong>ステータス</strong> を <i>New(新規)</i> から <i>Accepted(着手)</i> に変更</li></ul><p>せっかくなので <a class="issue tracker-4 status-5 priority-4 priority-default closed" title="Backport(バックポート): Can added the profile distinguished name when blank. (プロフィール識別名を空欄でも追加できてしまう) (Fixed(完了))" href="http://redmine.openpne.jp/issues/900">#900</a> の内容をそのまま取り込むよりも好ましい改善を行います。</p>
<a name="2-系の仕様"></a>
<h3 >2 系の仕様<a href="#2-系の仕様" class="wiki-anchor">¶</a></h3>
<ul>
<li>webapp/lib/OpenPNE/Validator.php<br /><pre>
357- case 'regexp':
358- if (isset($rule['regexp']) && !preg_match($rule['regexp'], $reqval)) {
359- if (isset($rule['type_error'])) {
360- $error = $rule['type_error'];
361- } else {
362- $error = "{$rule['caption']}を正しく入力してください";
363- }
</pre></li>
<li>ここで弾かれており、その制約は次の正規表現によるものでした<br /><pre>
識別名を弾いた時点の $rule['regexp'] の値:
string '/^[a-z0-9_]+$/i' (length=15)
</pre></li>
</ul>
<p>そして、その後に別のバリデートも行われています。</p>
<ul>
<li>webapp/modules/admin/do/update_c_profile.php</li>
<li>webapp/modules/admin/do/insert_c_profile.php<br /><pre>
15- function execute($requests)
16- {
17- if (db_admin_c_profile_name_exists($requests['name'])) {
18- admin_client_redirect('insert_c_profile', 'その識別名は既に登録されています');
19- }
20- if (is_numeric($requests['name'])) {
21- admin_client_redirect('insert_c_profile', '識別名は数値のみには設定できません');
22- }
</pre></li>
</ul>
<a name="34-系の仕様344-以降"></a>
<h3 >3.4 系の仕様(3.4.4 以降)<a href="#34-系の仕様344-以降" class="wiki-anchor">¶</a></h3>
<ul>
<li>lib/form/doctrine/ProfileForm.class.php : 56, 59(=118), 64 行目の 3 箇所<br /><pre>
55- $this->validatorSchema->setPostValidator(
56- new sfValidatorDoctrineUnique(array('model' => 'Profile', 'column' => array('name')), array('invalid' => 'Already exist.'))
57- );
58-
59- $this->mergePostValidator(new sfValidatorCallback(array('callback' => array('ProfileForm', 'validateName'))));
60- $this->setValidator('default_public_flag', new sfValidatorChoice(array('choices' => array_keys(Doctrine::getTable('Profile')->getPublicFlags()))));
61- $this->setValidator('value_min', new sfValidatorPass());
62- $this->setValidator('value_max', new sfValidatorPass());
63- $this->setValidator('value_type', new sfValidatorString(array('required' => false, 'empty_value' => 'string')));
64- $this->setValidator('name', new sfValidatorRegex(array('pattern' => '/^\w*[a-z]\w*$/i')));
65-
:
116- static public function validateName($validator, $values)
117- {
118- if (0 === strpos($values['name'], 'op_preset_'))
119- {
120- throw new sfValidatorError($validator, 'invalid');
121- }
</pre></li>
</ul>
<a name="36-系以降の修正前の仕様"></a>
<h3 >3.6 系以降の修正前の仕様<a href="#36-系以降の修正前の仕様" class="wiki-anchor">¶</a></h3>
<p>上記 3.4 系の 64 行目の部分が以下のようになっている。</p>
<pre>
$this->setValidator('name', new opValidatorString(array('required' => true, 'trim' => true)));
</pre>
<p>これによるバリデーションは行われている。</p>
<a name="2-系と-34-系の違い"></a>
<h3 >2 系と 3.4 系の違い<a href="#2-系と-34-系の違い" class="wiki-anchor">¶</a></h3>
<p>2 系:</p>
<ul>
<li>(A1) 正規表現 /^[a-z0-9_]+$/i にマッチする</li>
<li>(A2) 既存の識別名ではない</li>
<li>(A3) is_numeric($value) が偽である</li>
</ul>
<p>3.4 系:</p>
<ul>
<li>(B1) 既存の識別名ではない</li>
<li>(B2) op_preset_ で始まらない( /^op_preset_/ にマッチしない、と同値)</li>
<li>(B3) 正規表現 /^\w*[a-z]\w*$/i にマッチする</li>
</ul>
<p>この条件を全て満たす文字列が許容されています。両者の比較において、「既存の識別名ではない」ことのチェックには差異はありません。また 3 系独自の op_preset_ で始まらないことは以下では触れません。</p>
<p>誤解がないように正規表現について示しておきますが、 /¥w/ と /[_a-zA-Z0-9]/ と /[_a-z0-9]/i はそれぞれ同値である前提とします。(余談ですが、preg 系ではなく mb_ereg 系の関数を用いる場合、\w や \d のようなエスケープシーケンスが全角文字まで含む場合があります。これらは通常であれば半角文字のみを指すものとして考えてよいですが、「常に /\w/ が /[_a-zA-Z0-9]/ と一致する」と思い込むのは危険かもしれません。付け加えれば /[0-9]/ が /0|1|2|3|4|5|6|7|8|9/ と一致することも前提条件があることを忘れてはなりません。)</p>
<ul>
<li>2 系は、 /^¥w+$/ にマッチし、 is_numeric($value) が偽である、という文字列が許容されます。</li>
<li>3.4 系は、 /^¥w+$/ にマッチし、 アルファベットを含む、という文字列が許容されます。</li>
</ul>
<p>後半の内容が異なっていますが、この差異は <a class="issue tracker-4 status-5 priority-4 priority-default closed" title="Backport(バックポート): Can added the profile distinguished name when blank. (プロフィール識別名を空欄でも追加できてしまう) (Fixed(完了))" href="http://redmine.openpne.jp/issues/900">#900</a> で検討されたものであり、このコメントを書いている時点でもその検討内容は妥当だと思っています。</p>
<p>ところで、2系の「 <a href="http://php.net/manual/ja/function.is-numeric.php" class="external">is_numeric()</a> が偽となるかどうか」をチェックしているのは意図がよく分かりません。これでは 1eA が通るのに 1e1 が弾かれ、 0xfg が通るのに 0xff が通らない状態になっています。ここでは「 <a href="http://php.net/manual/ja/function.ctype-digit.php" class="external">ctype_digit()</a> が偽となるかどうか」をチェックするべきでしょう。この違いのことは以下では触れません(「数字のみではない」ことをチェックしていると考えておきます)。</p>
<p>さて、ここまでの確認を経て、</p>
<ul>
<li>2 系は、「 /^¥w+$/ がマッチし、数字のみではない」(アンダースコアのみは許容される)</li>
<li>3.4 系は、「 /^¥w+$/ がマッチし、アルファベットが含まれる」(アンダースコアのみは許容されない)</li>
</ul>
<p>という制約であることが分かりました。</p>
<a name="36-系以降での修正"></a>
<h3 >3.6 系以降での修正<a href="#36-系以降での修正" class="wiki-anchor">¶</a></h3>
<p>管理画面の「識別名についての注釈」について、 2 系は「※半角英数 と _ のみ(数値のみも不可)」という文言があります。しかし 3 系にはありません。</p>
<p>3.6 系以降では、個人的にアンダースコアのみは許容しなくてよいと思うので、バリデーションは 3.4 系と同一のものでよいと考えます。そして、管理画面に注釈をつける改善も施そうと思います。</p>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10334
2011-08-20T17:02:09Z
Minoru Takai
main.coeurl@gmail.com
<ul><li><strong>担当者</strong> を <i>Minoru Takai</i> にセット</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10335
2011-08-20T21:43:02Z
Minoru Takai
main.coeurl@gmail.com
<ul><li><strong>ステータス</strong> を <i>Accepted(着手)</i> から <i>Pending Review(レビュー待ち)</i> に変更</li><li><strong>進捗率</strong> を <i>0</i> から <i>50</i> に変更</li></ul><p>更新履歴 <a class="changeset" title="(fixes #2356) add validation for the profile identification name on backend." href="http://redmine.openpne.jp/projects/op3/repository/revisions/db7c968fab6e646914d40caf64acdb05850b26db">db7c968fab6e646914d40caf64acdb05850b26db</a> で適用されました。</p>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10336
2011-08-20T21:43:03Z
Minoru Takai
main.coeurl@gmail.com
<ul></ul><p>更新履歴 <a class="changeset" title="(fixes #2356) set error message for a case that inputted "op_prefix_" as a prefix." href="http://redmine.openpne.jp/projects/op3/repository/revisions/01d4f29766ac6ea709c51178004b644d8dc5f9ba">01d4f29766ac6ea709c51178004b644d8dc5f9ba</a> で適用されました。</p>
<ul>
<li><a class="changeset" title="(fixes #2356) set error message for a case that inputted "op_prefix_" as a prefix." href="http://redmine.openpne.jp/projects/op3/repository/revisions/01d4f29766ac6ea709c51178004b644d8dc5f9ba">01d4f297</a> (fixes <a class="issue tracker-1 status-5 priority-5 priority-high3 closed" title="Bug(バグ): 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう (Fixed(完了))" href="http://redmine.openpne.jp/issues/2356">#2356</a>) set error message for a case that inputted "op_prefix_" as a prefix.</li>
</ul>
<p>などとコミットログに書いていますが、 "op_prefix_" は "op_preset_" の誤りです。</p>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10337
2011-08-21T16:13:27Z
Minoru Takai
main.coeurl@gmail.com
<ul><li><strong>題名</strong> を <i>プロフィール項目を管理画面で作成するときに識別名に全角文字が使え、その場合に携帯版でプロフィール編集が失敗する</i> から <i>管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう</i> に変更</li><li><strong>説明</strong> を更新 (<a title="差分を表示" href="/journals/10337/diff?detail_id=13268">diff</a>)</li></ul><p>チケットの Description を書き換えました。</p>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10369
2011-08-23T06:42:08Z
Shingo Yamada
s.yamada@tejimaya.com
<ul><li><strong>優先度</strong> を <i>Normal(通常)</i> から <i>High(高め)</i> に変更</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10413
2011-08-23T07:30:10Z
Shingo Yamada
s.yamada@tejimaya.com
<ul><li><strong>360対象</strong> を <i>RC1</i> にセット</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10436
2011-08-23T08:54:09Z
Yuma Sakata
sakata@tejimaya.com
<ul><li><strong>360対象</strong> を削除 (<del><i>RC1</i></del>)</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10452
2011-08-23T09:32:19Z
Yuma Sakata
sakata@tejimaya.com
<ul><li><strong>360対象</strong> を <i>RC1</i> にセット</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10559
2011-08-30T11:09:56Z
Kousuke Ebihara
ebihara@tejimaya.com
<ul><li><strong>ステータス</strong> を <i>Pending Review(レビュー待ち)</i> から <i>Pending Testing(テスト待ち)</i> に変更</li><li><strong>進捗率</strong> を <i>50</i> から <i>70</i> に変更</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=10560
2011-08-30T11:31:26Z
Minoru Takai
main.coeurl@gmail.com
<ul><li><strong>説明</strong> を更新 (<a title="差分を表示" href="/journals/10560/diff?detail_id=13515">diff</a>)</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=11044
2011-09-21T09:45:10Z
Shingo Yamada
s.yamada@tejimaya.com
<ul><li><strong>360対象</strong> を <i>RC1</i> から <i>3.6.0</i> に変更</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=11217
2011-09-27T08:41:19Z
Kousuke Ebihara
ebihara@tejimaya.com
<ul><li><strong>360対象</strong> を <i>3.6.0</i> から <i>RC2</i> に変更</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=11254
2011-09-28T05:45:45Z
Fumie Toyooka
toyooka@tejimaya.com
<ul><li><strong>ステータス</strong> を <i>Pending Testing(テスト待ち)</i> から <i>Fixed(完了)</i> に変更</li><li><strong>進捗率</strong> を <i>70</i> から <i>100</i> に変更</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=11257
2011-09-28T06:17:14Z
Fumie Toyooka
toyooka@tejimaya.com
<ul><li><strong>ステータス</strong> を <i>Fixed(完了)</i> から <i>Pending Testing(テスト待ち)</i> に変更</li><li><strong>進捗率</strong> を <i>100</i> から <i>70</i> に変更</li></ul>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=12000
2011-11-01T08:53:15Z
Fumie Toyooka
toyooka@tejimaya.com
<ul><li><strong>ステータス</strong> を <i>Pending Testing(テスト待ち)</i> から <i>Fixed(完了)</i> に変更</li><li><strong>進捗率</strong> を <i>70</i> から <i>100</i> に変更</li></ul><p>テストOKです。</p>
OpenPNE 3 - Bug(バグ) #2356: 管理画面でプロフィール項目の識別名に全角文字や角括弧が使えてしまう
http://redmine.openpne.jp/issues/2356?journal_id=19498
2015-10-08T08:51:21Z
kaoru n
<ul><li><strong>3.8 で発生するか</strong> を <i>Unknown (未調査)</i> にセット</li></ul>