USER_PUBLIC_FIELDS の扱いについて
問題
- いくつかの api で email を secret にしているユーザーの email が漏洩しているのを確認した。
- USER_PUBLIC_FIELDS を用いて populate した user 情報をそのまま返しているのが問題である。
対応
- https://github.com/weseek/growi/pull/3530 external_link にて email が漏洩している箇所を修正した。
- routes で用いていた USER_PUBLIC_FIELDS を除外してデータ取得後に serializeUserSecurely を使用するようにした。
- models/page でも USER_PUBLIC_FIELDS を使用している場所があるが以下の理由により修正をしない
- 影響範囲が大きく使用している箇所を漏れなく特定するのが困難なため
- 撲滅したときに漏れがあり password が公開されてしまうのを防ぐため
- 管理ページでも使用されることがあり、その場合は USER_PUBLIC_FIELDS での制限で事足りる
- USER_PUBLIC_FIELDS の存在自体が悪ではなく、それを routes で使用してしまうことによる人的ミスが問題。
- models/page で存在することに問題はない。
- USER_PUBLIC_FIELDS という命名が誤解を招くので USER_FIELDS_EXCEPT_CONFIDENTIAL に rename を行った。
今後の対応