我正在检查一些现有插件是否存在任何不安全的文件系统访问,这时我遇到了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, 那么,在这种情况下,有哪些例外使其正常?我希望我的插件尽可能以最佳方式运行,但这使得最佳实践有点难以识别。
最合适的回答,由SO网友:Otto 整理而成
直接访问文件系统进行写入是件坏事。。。在大多数情况下,人们实际上是这样做的。
如果您正在编辑一个图像文件,并且它位于wp-content/uploads目录中,那么您就知道了,不管怎样。这不是常见的情况。插件和主题通常不会这样做,因为它们不必这样做。WordPress有代码可以为他们做到这一点。那是非常安全的。
不,插件和主题想要编辑的东西是危险的。他们想用配置信息编写PHP文件,或者保存自定义CSS文件,或者诸如此类的东西。他们想写所有不安全的东西,让它们可以在世界上编辑。
如果和我的网站在同一台cheapo共享服务器上的人决定摆弄我的图片之类的东西,那真是令人讨厌。如果他们决定篡改我的PHP代码或CSS,那就是安全漏洞。关于直接写入文件系统是邪恶的问题完全取决于您正在编写什么以及在什么上下文中使用它。