ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 11 years ago

Closed 10 years ago

#1566 closed defect (fixed)

制御文字を入れることで空白のメンバー・記事を作成できてしまう(一部対応)

Reported by: kiwa Owned by: ebihara
Priority: critical Milestone: OpenPNE2.10.4
Component: その他 Version: 2.8.x & 2.10.x & 2.11.x
Keywords: OpenPNE2.8.9 OpenPNE2.11.5 Cc:

Description (last modified by kiwa)

■現象

テキストボックスに制御文字を入れることで、名無しのメンバー、名無しのコミュニティ、空白の日記などが作成できてしまう。

■原因

制御文字が入力されているかどうかチェックしていない。

■修正内容

問題は次の3パターンに分類できる。

  1. 入力した文字がMySQLへの挿入後もOpenPNE上で表示される(正常系)
    1. 英数字や漢字など多くの利用者が日常で入力する文字
    2. 未定義の文字のうち、2, 3 に含まれない文字(?として入力・表示される)
  2. 入力した文字はMySQLに挿入されるが、OpenPNE上では空白として表示される
    1. 制御文字(基本ラテン文字内の制御文字に加えて、ラテン1拡張領域内の制御文字も含む)
    2. 特殊用途文字(U+0FFF0~U+0FFFD)の一部
  3. 入力した文字はMySQLに空白として挿入される(OpenPNEとしてはDBに挿入する時点でも文字情報を保持している)
    1. U+10000 以降

【対処法】

2-1. NULLバイトを除去する pre_filter である ntrim を拡張し、以下の正規表現に引っかかるものを除去するようにした。ただし、HT, LF と NBSP は除去対象に含めない(HT, NBSPはtrim,rtrim,ltrimで除去されるため)

/[\x{0}-\x{08}\x{0b}-\x{1f}\x{7f}-\x{9f}\x{ad}]/u

2-3,3-1. #1960 で対処

■関連情報

Change History (24)

comment:1 Changed 11 years ago by kiwa

Owner: changed from nobody to ebihara

再現チームでは現象を確認できないので開発チームに検証してみてほしいです

comment:2 Changed 11 years ago by ebihara

確認してみます。

comment:3 Changed 11 years ago by kiwa

Description: modified (diff)
Keywords: 再現待ち removed
Summary: 既に退会していると思われるメンバーのf_homeが表示される制御文字を入れることで空白のメンバー・記事を作成できてしまう

すいません再現チームで再現できました。

comment:4 Changed 11 years ago by kiwa

Owner: changed from ebihara to nobody

reassignしわすれてました

comment:5 Changed 11 years ago by ebihara

Keywords: OpenPNE2.8.9 OpenPNE2.11.5 added
Milestone: OpenPNE2.11.5

comment:6 Changed 11 years ago by ebihara

Milestone: OpenPNE2.11.5OpenPNE2.10.4

comment:7 Changed 11 years ago by ebihara

Priority: minorcritical

comment:8 Changed 11 years ago by ebihara

Owner: changed from nobody to ebihara
Status: newassigned

やります

comment:9 Changed 11 years ago by ebihara

「DEL」を表す0x7fを入力したところ、再現できました。

参考:http://e-words.jp/p/r-ascii.html

comment:10 Changed 11 years ago by ebihara

U+20000などの、「CJK統合漢字拡張B」領域内の文字を入力しても再現しました(この場合はMySQLにinsertされる段階で空白文字となる)。

comment:11 Changed 11 years ago by ebihara

問題は次の3パターンに分類できそうです。

  1. 入力した文字がMySQLへの挿入後もOpenPNE上で表示される(正常系)
    • 英数字や漢字など多くの利用者が日常で入力する文字
    • 未定義の文字のうち、2, 3 に含まれない文字(?として入力・表示される)
  2. 入力した文字はMySQLに挿入されるが、OpenPNE上では空白として表示される
    • 制御文字(基本ラテン文字内の制御文字に加えて、ラテン1拡張領域内の制御文字も含む)
    • 特殊用途文字(U+0FFF0~U+0FFFD)の一部
  3. 入力した文字はMySQLに空白として挿入される(OpenPNEとしてはDBに挿入する時点でも文字情報を保持している)
    • U+10000 以降

comment:12 Changed 11 years ago by ebihara

制御文字についてはフィルターで取り除くことで対処します。

MySQLが対応しない範囲の文字をどう扱うかについては、別チケットとして対処します。大きな変更になることが予想されるので、安定版ではおこなわない方針で動きます。

comment:13 Changed 11 years ago by ebihara

MySQLの対応しない範囲の文字列(3. 入力した文字はMySQLに空白として挿入される)については、 #1960 で対処することにしました。

comment:14 Changed 11 years ago by ebihara

Description: modified (diff)
Keywords: 確認中 added

以下のリビジョンで対応しました。制御文字のうち、HT, LF と NBSP は除去対象に含めていません(HT, NBSPはtrim,rtrim,ltrimで除去されるため)。

ご確認ください。

comment:15 Changed 11 years ago by ogawa

Keywords: テスト待ち added; 確認中 removed

comment:16 Changed 10 years ago by kiwa

Description: modified (diff)

comment:17 Changed 10 years ago by kiwa

Keywords: テスト待ち removed

動作テストを行ったところ、以下のような結果でしたので判断をお願いします。

■テスト手順

  1. Windows notepadの「Unicode制御文字の入力」でnotepadに制御文字を入力
  2. 制御文字を入力したいフォームに貼り付け

■テスト結果

  • ○→空欄として扱われ、必須項目が入力されていないエラーメッセージが返ってくる
  • ×→制御文字のみで登録できてしまう
制御文字pc_page_h_config_prof
(「ニックネーム」欄)
admin_page_insert_c_profile
(「項目名」欄)
CSVインポート
LRM × × ×
RLM × × ×
ZWJ × × ×
ZWNJ × × ×
LRE × × ×
RLE × × ×
LRO × × ×
RLO × × ×
PDF × × ×
NADS × × ×
NODS × × ×
ASS × × ×
ISS × × ×
AAFS × × ×
IAFS × × ×
RS ×
US ×

comment:18 Changed 10 years ago by kiwa

Description: modified (diff)

US・RS以外の×結果の文字はAAFSを除きU+2000~U+206Fになります。

comment:19 Changed 10 years ago by kiwa

wikipediaではU+206DがAFFSとなってますが、どうやらAAFSの間違いのようです。

comment:20 Changed 10 years ago by ogawa

Owner: changed from ebihara to ogawa
Status: assignednew

修正担当します。

comment:21 Changed 10 years ago by ogawa

Summary: 制御文字を入れることで空白のメンバー・記事を作成できてしまう制御文字を入れることで空白のメンバー・記事を作成できてしまう(一部対応)

ブラウザ上での表示において意味のある制御文字をフィルターで取り除いてしまうのは望ましくないケースもありうるので今回の安定版修正では対応しないことにします。どこまで対応するかは難しいところですね。

comment:22 Changed 10 years ago by ogawa

Keywords: テスト待ち added
Owner: changed from ogawa to ebihara

comment:23 Changed 10 years ago by kiwa

Keywords: テスト待ち removed

確認しました、問題なさそうです。

comment:24 Changed 10 years ago by kiwa

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.