为什么WP_Image_Editor不使用文件系统API保存图像?

时间:2014-03-30 作者:Dan

我正在检查一些现有插件是否存在任何不安全的文件系统访问,这时我遇到了WP_Image_Editor\'ssave 函数,该函数调用_save, 最终make_image (见下文)。WP\\U Image\\u编辑器于年发布WP 3.5, 而Filesystem API 从那以后一直存在WP 2.6, 因此,我认为推理与用例的细节有关,而不仅仅是为了满足新的标准而不进行更改。

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, 那么,在这种情况下,有哪些例外使其正常?我希望我的插件尽可能以最佳方式运行,但这使得最佳实践有点难以识别。

1 个回复
最合适的回答,由SO网友:Otto 整理而成

直接访问文件系统进行写入是件坏事。。。在大多数情况下,人们实际上是这样做的。

如果您正在编辑一个图像文件,并且它位于wp-content/uploads目录中,那么您就知道了,不管怎样。这不是常见的情况。插件和主题通常不会这样做,因为它们不必这样做。WordPress有代码可以为他们做到这一点。那是非常安全的。

不,插件和主题想要编辑的东西是危险的。他们想用配置信息编写PHP文件,或者保存自定义CSS文件,或者诸如此类的东西。他们想写所有不安全的东西,让它们可以在世界上编辑。

如果和我的网站在同一台cheapo共享服务器上的人决定摆弄我的图片之类的东西,那真是令人讨厌。如果他们决定篡改我的PHP代码或CSS,那就是安全漏洞。关于直接写入文件系统是邪恶的问题完全取决于您正在编写什么以及在什么上下文中使用它。

结束

相关推荐

Link images to post

将图像链接到帖子。大家好我相信这很简单,但我不知道怎么做。我知道如何在帖子中添加图像-单击帖子,添加媒体,选择缩略图。这给了我一个缩略图。我想我要做的是将缩略图链接到帖子,这样我就可以控制缩略图在页面上的显示位置。我有一个这样的模板。 <div class=\"content_div\"> <?php $car_args = array( \'post_type\' =>