ファイル管理で削除ができません
ファイル管理で削除ができません
はじめまして。
掲題のとおり、[エレメント]>[ファイル管理]での削除機能が動かず困っています。
アップロードは正常にできますが、そのアップしたファイルの削除もできない状態です。
画像ファイル等の削除を実行しても「/hoge/piyo.jpg」の削除:失敗 と表示されてしまいます。
サーバーはさくらインターネットのスタンダードを利用しており、以下の環境です。
Apache/2.2.31
MODXのバージョン: 1.0.19J
PHPのバージョン: 5.6.30
セーフモード: off
MySQLのバージョン: 5.5.38-log
原因・解決策などご存知の方がいらっしゃいましたら、ご教示頂ければ幸いです。
どうぞよろしくお願いいたします。
掲題のとおり、[エレメント]>[ファイル管理]での削除機能が動かず困っています。
アップロードは正常にできますが、そのアップしたファイルの削除もできない状態です。
画像ファイル等の削除を実行しても「/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()を実行しなくてもセキュリティチェックが行なわれるため、該当する記述を全て削除すればよいと思います。後ほど修正します。
ファイル管理で削除ができません
横から申し訳ありません。
同様の症状で困っております。
動作環境は、以下の通りです。
Apache : 2.2.15
PHPのバージョン : 5.3.3
セーフモード : off
MySQLのバージョン : 5.1.73
MODXのバージョン : 1.0.19J
現状のバージョンで問題の箇所のみ修正して運用できればと考えておりますが、MODXを1.0.20Jにアップデートすることが解決策となるのでしょうか。
よろしくお願い致します。
同様の症状で困っております。
動作環境は、以下の通りです。
Apache : 2.2.15
PHPのバージョン : 5.3.3
セーフモード : off
MySQLのバージョン : 5.1.73
MODXのバージョン : 1.0.19J
現状のバージョンで問題の箇所のみ修正して運用できればと考えておりますが、MODXを1.0.20Jにアップデートすることが解決策となるのでしょうか。
よろしくお願い致します。
ファイル管理で削除ができません
http://forum.modx.jp/viewtopic.php?f=32&t=1822
以前ファイル管理からのアップロード絡みで上記のような話があったのですが、
ファイルの削除だけ上手くいっていなかったと思います。
削除が上手くいかないのは、おそらく以前の話で出てきているtoken処理が関係しています。
/manager/actions/element/files.dynamic.php のdelete_file()内で以下のような記述があると思います。
if(!$token_check || !@unlink($file))
この$token_checkの値がfalseなため動作していないように見えます。
$token_checkの値を強制的にtrueにしたり、判別自体から$token_checkを外すと削除が上手くいくようです。
以前ファイル管理からのアップロード絡みで上記のような話があったのですが、
ファイルの削除だけ上手くいっていなかったと思います。
削除が上手くいかないのは、おそらく以前の話で出てきているtoken処理が関係しています。
/manager/actions/element/files.dynamic.php のdelete_file()内で以下のような記述があると思います。
if(!$token_check || !@unlink($file))
この$token_checkの値がfalseなため動作していないように見えます。
$token_checkの値を強制的にtrueにしたり、判別自体から$token_checkを外すと削除が上手くいくようです。
ファイル管理で削除ができません
mod_kksさん
ご返信ありがとうございます。
/manager/actions/element/files.dynamic.php のdelete_file()内の
if(!$token_check || !@unlink($file))
上記の記述を
if(!@unlink($file))
のように修正することで、削除できるようになりました。
しばらく様子を見たいと思います。
あと、files.dynamic.phpですが、レポジトリを確認したところ、このスレッドのやりとりがなされていた11月以降更新等がなされていないよう思われますが、
この不具合は、最新版の1.0.20Jでも生じる不具合なのでしょうか?別の箇所の修正で改善等がなされているのでしょうか。
何か情報があればお教え頂けると幸いです。
ご返信ありがとうございます。
/manager/actions/element/files.dynamic.php のdelete_file()内の
if(!$token_check || !@unlink($file))
上記の記述を
if(!@unlink($file))
のように修正することで、削除できるようになりました。
しばらく様子を見たいと思います。
あと、files.dynamic.phpですが、レポジトリを確認したところ、このスレッドのやりとりがなされていた11月以降更新等がなされていないよう思われますが、
この不具合は、最新版の1.0.20Jでも生じる不具合なのでしょうか?別の箇所の修正で改善等がなされているのでしょうか。
何か情報があればお教え頂けると幸いです。
ファイル管理で削除ができません
file.dynamic.phpに関しては結局checkToken関連の削除修正が行われていないかもしれませんね。
master/developとも該当箇所はそのままになっているようです。
該当ファイルでセキュリティチェックは不要となったとのことですので、1.0.20Jでは以下3箇所を
変更すれば問題ないかと思います。
if(!$token_check || !@rrmdir($folder)) → if(!@rrmdir($folder))
if(!$token_check || !@unlink($file)) → if(!@unlink($file))
if(!$token_check) return false; → 削除
これと並行してJPEG拡張子問題でFileUpload.phpの修正が行われ、modx_move_uploaded_file
メソッドの移動云々でファイルブラウザが動作しなかったように記憶しています。
ファイルブラウザに関しては前投稿のトピックを参照していただければと思います。
ファイルブラウザもアップロードした画像などのパーミッションに問題があって、ファイルの削除
が上手く動作しなかったように思いますので、アップロードはファイル管理行った方が良いかと思います。
master/developとも該当箇所はそのままになっているようです。
該当ファイルでセキュリティチェックは不要となったとのことですので、1.0.20Jでは以下3箇所を
変更すれば問題ないかと思います。
if(!$token_check || !@rrmdir($folder)) → if(!@rrmdir($folder))
if(!$token_check || !@unlink($file)) → if(!@unlink($file))
if(!$token_check) return false; → 削除
これと並行してJPEG拡張子問題でFileUpload.phpの修正が行われ、modx_move_uploaded_file
メソッドの移動云々でファイルブラウザが動作しなかったように記憶しています。
ファイルブラウザに関しては前投稿のトピックを参照していただければと思います。
ファイルブラウザもアップロードした画像などのパーミッションに問題があって、ファイルの削除
が上手く動作しなかったように思いますので、アップロードはファイル管理行った方が良いかと思います。
ファイル管理で削除ができません
mod_kksさん
ご返信ありがとうございます。
if(!$token_check) return false; → 削除
この部分だけ、未修正ですので、修正しておきたいと思います。
ファイルアップロードに関する不具合についてもありがとうございます。
http://forum.modx.jp/viewtopic.php?f=32&t=1822のスレッドも参考に対応させていただこうと思います。
ご返信ありがとうございます。
if(!$token_check) return false; → 削除
この部分だけ、未修正ですので、修正しておきたいと思います。
ファイルアップロードに関する不具合についてもありがとうございます。
http://forum.modx.jp/viewtopic.php?f=32&t=1822のスレッドも参考に対応させていただこうと思います。