Почему редактор изображений WP не сохраняет изображения с помощью API файловой системы?
Я был в процессе проверки некоторых из моих существующих плагинов на предмет любых небезопасных обращений к файловой системе, когда я столкнулся с функцией wp_image_editorsave
, которая вызывает _save
, которая, наконец, вызывает make_image
(ниже). Редактор WP_Image_Editor был выпущен в 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;
}
Мой вопрос в том, каковы причины этого? По словам Отто, прямой доступ к файловой системе - это зло, так какие же исключения делают это правильным в данном случае? Я хочу, чтобы мои плагины вели себя наилучшим образом, но это немного затрудняет распознавание лучших практик.
1 answers
Прямой доступ к файловой системе для записи - это зло... для большинства случаев, когда люди действительно это делают.
Если вы редактируете файл изображения, и он находится в каталоге wp-content/uploads, то вы знаете, что угодно. Это не обычный случай. Плагины и темы обычно этого не делают, потому что им это не нужно. У WordPress есть код, чтобы сделать это за них. Это совершенно безопасно.
Нет, то, что плагины и темы хотят редактировать, является опасным вещи. Они хотят писать PHP-файлы с информацией о конфигурации, или сохранять пользовательские CSS-файлы, или что-то в этом роде. Они хотят написать все те вещи, которые небезопасны для редактирования во всем мире.
Если кто-то на том же общем сервере cheapo, что и мой сайт, решит поиграть с моими изображениями и тому подобным, это раздражает. Если они решат поиграть с моим PHP-кодом или моим CSS, это нарушение безопасности. Вопрос о том, что прямая запись в файловую систему является злом, полностью зависит от того, что вы написание и в каком контексте оно используется.