はじめまして。
掲題のとおり、[エレメント]>[ファイル管理]での削除機能が動かず困っています。
アップロードは正常にできますが、そのアップしたファイルの削除もできない状態です。
画像ファイル等の削除を実行しても「/hoge/piyo.jpg」の削除:失敗 と表示されてしまいます。
サーバーはさくらインターネットのスタンダードを利用しており、以下の環境です。
Apache/2.2.31
MODXのバージョン: 1.0.19J
PHPのバージョン: 5.6.30
セーフモード: off
MySQLのバージョン: 5.5.38-log
原因・解決策などご存知の方がいらっしゃいましたら、ご教示頂ければ幸いです。
どうぞよろしくお願いいたします。
ファイル管理で削除ができません
ファイル管理で削除ができません
了解です、後ほど調べてみます
ファイル管理で削除ができません
詳しく見ていないですが、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だと正しくデコードしてくれないので削除に失敗する。
./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だと正しくデコードしてくれないので削除に失敗する。
ファイル管理で削除ができません
checkTokenの挙動自体はおそらく正常です。
ただ、ファイル管理におけるファイル削除ではcheckTokenが2度呼ばれており、1度目の戻し直前で「$_SESSION['token']」の値をリセットしているため、2度目はトークンが合わずfalseが返されるのが原因のようです。アップロード動作に関してはfiles.dynamic.phpを見る限り、URL遷移なしで動作しているのに対し、削除動作はフレームの中でwindow.location.hrefによってURL遷移しているので、このあたりが2度呼ばれてしまう原因なのかもしれませんね。
ただ、ファイル管理におけるファイル削除ではcheckTokenが2度呼ばれており、1度目の戻し直前で「$_SESSION['token']」の値をリセットしているため、2度目はトークンが合わずfalseが返されるのが原因のようです。アップロード動作に関してはfiles.dynamic.phpを見る限り、URL遷移なしで動作しているのに対し、削除動作はフレームの中でwindow.location.hrefによってURL遷移しているので、このあたりが2度呼ばれてしまう原因なのかもしれませんね。
ファイル管理で削除ができません
checkToken()が2度呼ばれるのは、$_POST['token']か$_GET['token']のどちらかが渡ってきた時にコアが自動的にcheckToken()を実行するように仕様を改めたからだと思います。なのでfiles.dynamic.phpの中でcheckToken()を実行しなくてもセキュリティチェックが行なわれるため、該当する記述を全て削除すればよいと思います。後ほど修正します。