Backport(バックポート) #2108
部分一致検索を行う箇所でワイルドカード検索ができてしまう
100%
Description
Overview (現象)¶
メンバー画面の「メンバー検索」や「コミュニティ検索」、あるいは管理画面の「メンバー管理」などでは、ニックネームやキーワード等で部分一致検索が行える。ここで、アンダースコア("_")やパーセント("%")を含めて検索すると、文字としてではなくメタ文字(ワイルドカード)として検索が行なわれてしまう。
これは仕様と考えれば問題ではないと言えるが、この動作は意図した仕様ではなく、不具合として扱うべきであると考えられる。
Causes (原因)¶
LIKE検索を行っている箇所では
$query->addWhere('name LIKE ?', '%'.$value.'%');
のように(部分一致)検索文字列として入力された値を直接渡しているためメタ文字がそのままメタ文字として扱われてしまっている。
Way to fix (修正内容)¶
LIKE検索は関数化されていない(LIKEメソッドがあるわけではない)ため、LIKE文を用いている箇所全てで入力文字列中のメタ文字をエスケープするか、最終的にSQLが生成される時点でエスケープを施すという対応が考えられる。
opDoctrineQuery クラスに LIKE 検索用のメソッドを作成し、それを各所で使用するように書き換える。このチケットではコアのみを扱う。
なお、このチケットで「意図しないワイルドカード検索ができてしまう問題」を解消するのは MySQL を使っている場合とする(仮に他のDBで問題が解消されていなくても MySQL でさえ解消されていれば良いものとする)。
Note (補足)¶
バックスラッシュを含む文字列での検索についての挙動も気になる。例えば "foo\bar" というニックネームのメンバーがいる場合、メンバー検索で "foo" と検索すればヒットするが、 "foo\" と検索してもヒットせず、 "foo\\" と検索するとヒットするような動作を確認している。
Related issues
Associated revisions
History
#2
Updated by Kousuke Ebihara over 12 years ago
- Target version changed from OpenPNE3.6beta11 to OpenPNE3.6beta12
親チケットが「テスト待ち」「完了」でないものをすべて beta12 以降での対応とします。
#3
Updated by Shingo Yamada over 12 years ago
- Target version changed from OpenPNE3.6beta12 to OpenPNE3.6beta13
#4
Updated by Maki Takahashi over 12 years ago
- Status changed from New(新規) to Accepted(着手)
#5
Updated by Hiroshi Kato over 12 years ago
- Status changed from Accepted(着手) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
更新履歴 eb3383af9e8fdef853037086e4750698e7075d7f で適用されました。
#6
Updated by Maki Takahashi over 12 years ago
- Assignee set to Maki Takahashi
#7
Updated by Minoru Takai over 12 years ago
- Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)
親チケットを差し戻したため、こちらのチケットも差し戻しにしておきます。 http://redmine.openpne.jp/issues/2106#note-10
#8
Updated by Maki Takahashi over 12 years ago
- Status changed from Rejected(差し戻し) to Accepted(着手)
#9
Updated by Hiroshi Kato over 12 years ago
- Status changed from Accepted(着手) to Pending Review(レビュー待ち)
更新履歴 af2ea8e2afb2e242e9d63880d4d8dcc6c995d7a6 で適用されました。
#10
Updated by Hiroshi Kato over 12 years ago
更新履歴 86c35c07518227b17684447d6e1d4b2a5be225ed で適用されました。
#11
Updated by Hiroshi Kato over 12 years ago
更新履歴 133a648b365337f662e8d8a9502b6a7be2b48f52 で適用されました。
#12
Updated by Yuma Sakata over 12 years ago
テスト実施のため、こちらのコミットログ 133a648b365337f662e8d8a9502b6a7be2b48f52 を release-3.6beta13 ブランチに取り入れてください。
以上、よろしくお願いします。
#13
Updated by Minoru Takai over 12 years ago
- Description updated (diff)
#14
Updated by Minoru Takai over 12 years ago
- Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)
親チケットを http://redmine.openpne.jp/issues/2106#note-16 で差し戻したため、こちらも差し戻しにしておきます。
#15
Updated by Hiroshi Kato over 12 years ago
- Status changed from Rejected(差し戻し) to Pending Review(レビュー待ち)
更新履歴 6592d9b1e7e192a794c88397ff6ac37d0561b56e で適用されました。
#16
Updated by Minoru Takai over 12 years ago
- Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
- % Done changed from 50 to 70
stable-3.6.x 向けの修正としてレビューしました。 master ブランチと同一の修正が施されていることを確認しました。本件に関連するコードについて master と 3.6.x では異なる箇所がなく、修正箇所についても同一でよいと認識しているので note-15 のコミットを以てレビュー OK とします。
#17
Updated by Yuma Sakata over 12 years ago
- Status changed from Pending Testing(テスト待ち) to Fixed(完了)
- % Done changed from 70 to 100
テストOKです。