問題描述
當我執行 WP_Image_Editor 的 save 功能,呼叫_save(最終呼叫 make_image(下文)) 時,我正在檢查一些我現有的外掛,用於任何不安全的檔案系統訪問。 WP_Image_Editor 在 WP 3.5 中釋出,而 Filesystem API 已經在 WP 2.6 以外,所以我認為推理與 use-case 的具體細節有關,而不是僅僅是不符合新標準。
protected function make_image( $filename, $function, $arguments ) {
if ( $stream = wp_is_stream( $filename ) ) {
ob_start();
} else {
// The directory containing the original file may no longer exist when using a replication plugin.
wp_mkdir_p( dirname( $filename ) );
}
$result = call_user_func_array( $function, $arguments );
if ( $result && $stream ) {
$contents = ob_get_contents();
$fp = fopen( $filename, 'w' );
if ( ! $fp )
return false;
fwrite( $fp, $contents );
fclose( $fp );
}
if ( $stream ) {
ob_end_clean();
}
return $result;
}
我的問題是,這是什麼原因?根據奧託,directly accessing the filesystem is evil,那麼在這種情況下有什麼例外呢?我希望我的外掛以最好的方式行事,但這使得最佳實踐有點難以辨別。
最佳解決方案
直接訪問檔案系統的寫作是惡的… 對於大多數情況下,人們實際上這樣做。
如果您正在編輯影像檔案,並且它是在 wp-content /uploads 目錄,那麼你知道,無論如何。這不是常見的情況。外掛和主題通常不會這樣做,因為它們不必這樣做。 WordPress 有程式碼為他們做這個。這是完全安全的。
不,外掛和主題想要編輯的東西是危險的東西。他們想用配置資訊編寫 PHP 檔案,或者儲存自定義的 CSS 檔案,或者這樣的東西。他們想把所有那些不安全的東西寫成 world-editable 。
如果有人在同一個廉價的共享伺服器上,因為我的網站決定搞砸我的影像等等,這是一個煩惱。如果他們決定搞定我的 PHP 程式碼或 CSS,那就是安全漏洞。直接寫入惡意檔案系統的問題完全取決於您正在撰寫的內容以及使用的內容。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。