Bug(バグ) #1635
完了
SNS名称変更で入力した値がエスケープされていない
Hiroki Mogi さんが約14年前に追加.
約9年前に更新.
説明
■バグ概要¶
SNS名称変更(pc_backend.php/sns/term)で入力した値がエスケープされていないため、pc_frontendの表示が崩れる
■再現手順¶
1)SNS名称変更(pc_backend.php/sns/term)を表示
2)アクティビティ(pc)に<script>alert("alert");</script>を入力して、編集ボタンを押す
3)pc_frontendのマイホームを表示し、スクリプトが動作する事を確認
■環境¶
OS: Mac OSX
ブラウザ: Firefox3
■仕様¶
入力した文字がエスケープされる
■修正内容¶
SnsTermモデルが文字列をを出力する際に呼ばれるメソッド(__toString())の最後にescapeを実装しました。
関連するチケット
3 (0件未完了 — 3件完了)
- 対象バージョン を OpenPNE 3.7.0 にセット
- 3.6 で発生するか を Yes にセット
- ステータス を New(新規) から Accepted(着手) に変更
SNS名称設定は、通常連想配列形式(ex:$op_term['community'])でアクセスしますが、これの実態はオブジェクトのため,連想配列形式でのアクセスはマジックメソッドによって行われています。これにエスケープを行うラッパーを適用すると、その部分が正常に動作しなくなる、というのが根本問題です。
↑は間違いで、ArrayAccessの実装がDecoratorに反映されないのが問題です。
本来ならArrayのインタフェースに対応しており、なおかつObjectのように振る舞うDecoratorが望ましく、それを実装するのも良い解決策ですが、コードの変更が大きくなるため,今回はpc_backend側でescapeしたものをDBに入れるような方針にします。
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
ちゃんと見ていませんが取り急ぎ差し戻します(管理画面で繰り返し編集することで多重エスケープとかになってしまいそうとか思いましたが、まったく見ていません)。この変更を stable-3.6.x に入れるのは待ってください。
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
- ステータス を Rejected(差し戻し) から Accepted(着手) に変更
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
SnsTermがfrontingなどの処理を終え、最終的にStringを出力する__toString()の部分にescapeを実装しました。
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
- 優先度 を Normal(通常) から High(高め) に変更
- ステータス を Rejected(差し戻し) から Accepted(着手) に変更
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
- 3.8 で発生するか を Unknown (未調査) にセット
他の形式にエクスポート: Atom
PDF