問題描述

當我運行 WP_Image_Editorsave 功能,調用_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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。