Backport(バックポート) #2090
完了携帯のプロフィール画像変更画面などの画像の大サイズ表示がアクセスエラーになる
100%
説明
Overview (現象)¶
http://sns.openpne.jp/diary/25849 より転記
2010年12月22日にリリースされた脆弱性対処が原因で携帯ページの画像が表示されません。 該当部分は下記ファイルで指定されている 320x320 サイズの拡大画像です。 member/templates/configImageSuccess.php member/templates/deleteImageSuccess.php friend/templates/showImageSuccess.php community/templates/configImageSuccess.php community/templates/deleteImageSuccess.php プラグイン等はまだ検索していません。
Causes (原因)¶
sfImageHandlerPlugin 側で許可されていない画像サイズを指定していることが原因。
許可されている画像サイズを指定するか、320x320を許可リストに追加する必要があります。
Way to fix (修正内容)¶
sfImageHandlerPlugin の画像許可サイズに 320x320 を追加する修正で対応します。
Shinichi Urabe さんが13年以上前に更新
- 対象バージョン を OpenPNE 3.4.14 から OpenPNE 3.4.15 に変更
親チケットが対応中のため修正は次期バージョンとします
Yuya Watanabe さんが13年以上前に更新
- ステータス を New(新規) から Accepted(着手) に変更
- 担当者 を Yuya Watanabe にセット
Yuya Watanabe さんが13年以上前に更新
理由としては以下のものとなります。
- OpenPNE 3.5.3を対象とする#1087における修正をもとにしたものであるため、依存関係を解決できない
以下本チケットにおける調査結果を示します。
調査結果¶
本チケットは携帯版での写真編集ページ(/index.php/member./configImage)における問題を扱っているので以下このページについて述べます。
写真編集ページでapps/mobile_frontend/modules/community/templates/configImageSuccess.phpのテンプレートを用いていますが、ここで以下の記述があります。
6 link_to(__('Expansion'), sf_image_path($community->getFile(), array('size' => '320x320', 'format' => 'jpg'))),
この記述の意図としては、指定した画像ファイルの大きさ320x320のものを表示するものだと思われます。
※plugins/sfImageHandlerPlugin/lib/helper/sfImageHelper.phpのsf_image_path()において'format'は用いられていませんが今回とは別問題とします。
sf_image_path()では「img/ファイルフォーマット/画像ファイルサイズ/ファイル名」という形式の文字列が返ってくるようです。今回の場合、「img/ファイルフォーマット/w320_h320/ファイル名」という形になります。
ここで生成されたURLのリンクへ行くと画像が表示されないという状態になります。
サーバ側を見てみると対象となる画像ファイルサイズのディレクトリ(img/ファイルフォーマット/w320_h320)が存在していませんでした。
また、画像を生成するクラスであるplugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorGD.class.phpには以下のように記述されています。ここはバックポート元の修正部分に相当する部分だと思われます。
27 $allowedSize = array('76x76', '120x120', '180x180', '240x320', '600x600'),
修正案¶
以上より、本チケットの修正案としては以下の3つが挙げられます。- バックポート元と同様に#1087相当の修正を行った後にバックポート元と同じ修正を行う
- configImageSuccess.phpにおける表示するファイルサイズを画像許可サイズに指定されているものに変更する
- sfImageGeneratorGDの画像許可サイズに320x320を追加する
修正実行案¶
本チケットにおいては#1087における修正を加味する必要はなく、バックポート元単体では3番目を採用しているため、本チケットでも- sfImageGeneratorGDの画像許可サイズに320x320を追加する
を採用することで解決することを考えます。
wa ta さんが13年以上前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 ccdee1322e10cca3b3aa5490193b0361a608bb86 で適用されました。
Minoru Takai さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
レビューをしました。
この問題は note-4 で示されている通り、sfImageGenerator クラス周りのファイルが 3.4 以前と 3.6 以後で異なっているため、親チケットの修正を直接取り入れることができません。しかしながら note-4 で検討されている内容の通りで plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorGD.class.php の $allowedSize を変更する修正は適切だと思います。修正内容は OK です。
余談ですが、 3.6 以降では array('48x48', '76x76', '120x120', '180x180', '240x320', '320x320', '600x600') のように 48x48 まで許可されていますが、これは #1116 の内容を扱ったために追加されています。 48x48 サイズの画像を扱う箇所がない限りは 3.4.x には 76x76 から 600x600 までの 6 種類のサイズが許可されていれば良いということです。
Mutsumi Imamura さんが13年以上前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
http://redmine.openpne.jp/issues/2090#note-6 でテスト済みです。
問題ありませんので完了とします。