ファイル管理で削除ができません

質問全般・改善要望
ichiun
メンバー
メンバー
記事: 1
登録日時: 2017年3月14日(火) 19:43

ファイル管理で削除ができません

投稿記事by ichiun » 2017年3月14日(火) 20:08

はじめまして。
掲題のとおり、[エレメント]>[ファイル管理]での削除機能が動かず困っています。

アップロードは正常にできますが、そのアップしたファイルの削除もできない状態です。
画像ファイル等の削除を実行しても「/hoge/piyo.jpg」の削除:失敗 と表示されてしまいます。

サーバーはさくらインターネットのスタンダードを利用しており、以下の環境です。

 Apache/2.2.31
 MODXのバージョン: 1.0.19J
 PHPのバージョン: 5.6.30
 セーフモード: off
 MySQLのバージョン: 5.5.38-log

原因・解決策などご存知の方がいらっしゃいましたら、ご教示頂ければ幸いです。
どうぞよろしくお願いいたします。
アバター
yama
管理人
記事: 2915
登録日時: 2009年7月29日(水) 02:50

ファイル管理で削除ができません

投稿記事by yama » 2017年3月15日(水) 13:18

了解です、後ほど調べてみます
yutamp
メンバー
メンバー
記事: 1
登録日時: 2017年10月30日(月) 22:09

ファイル管理で削除ができません

投稿記事by yutamp » 2017年10月30日(月) 22:24

詳しく見ていないですが、checkToken()の処理がどうもうまく動いていないかも。
./manager/includes/extenders/ex_managerapi.php
にあるFunction checkToken()の返り値を常にTrueにすれば削除できるかと。当然ながらCSRFに対して脆弱になります。

それでも削除できない時はファイル名に2バイト文字を使うのをやめる。
a href="javascript:deleteFile('%E6%97%A5%E6%9C%AC%E8%AA%9E.pdf');"
って感じで削除対象のファイル名を渡しているんだけど、これだとブラウザが勝手にURLデコードしちゃう。さらにIEだと正しくデコードしてくれないので削除に失敗する。
mod_kks
メンバー
メンバー
記事: 3
登録日時: 2017年11月04日(土) 01:31

ファイル管理で削除ができません

投稿記事by mod_kks » 2017年11月04日(土) 02:23

checkTokenの挙動自体はおそらく正常です。
ただ、ファイル管理におけるファイル削除ではcheckTokenが2度呼ばれており、1度目の戻し直前で「$_SESSION['token']」の値をリセットしているため、2度目はトークンが合わずfalseが返されるのが原因のようです。アップロード動作に関してはfiles.dynamic.phpを見る限り、URL遷移なしで動作しているのに対し、削除動作はフレームの中でwindow.location.hrefによってURL遷移しているので、このあたりが2度呼ばれてしまう原因なのかもしれませんね。
アバター
yama
管理人
記事: 2915
登録日時: 2009年7月29日(水) 02:50

ファイル管理で削除ができません

投稿記事by yama » 2017年11月08日(水) 09:16

checkToken()が2度呼ばれるのは、$_POST['token']か$_GET['token']のどちらかが渡ってきた時にコアが自動的にcheckToken()を実行するように仕様を改めたからだと思います。なのでfiles.dynamic.phpの中でcheckToken()を実行しなくてもセキュリティチェックが行なわれるため、該当する記述を全て削除すればよいと思います。後ほど修正します。