Почему редактор изображений 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;
}

Мой вопрос в том, каковы причины этого? По словам Отто, прямой доступ к файловой системе - это зло, так какие же исключения делают это правильным в данном случае? Я хочу, чтобы мои плагины вели себя наилучшим образом, но это немного затрудняет распознавание лучших практик.

Author: Dan, 2014-03-30

1 answers

Прямой доступ к файловой системе для записи - это зло... для большинства случаев, когда люди действительно это делают.

Если вы редактируете файл изображения, и он находится в каталоге wp-content/uploads, то вы знаете, что угодно. Это не обычный случай. Плагины и темы обычно этого не делают, потому что им это не нужно. У WordPress есть код, чтобы сделать это за них. Это совершенно безопасно.

Нет, то, что плагины и темы хотят редактировать, является опасным вещи. Они хотят писать PHP-файлы с информацией о конфигурации, или сохранять пользовательские CSS-файлы, или что-то в этом роде. Они хотят написать все те вещи, которые небезопасны для редактирования во всем мире.

Если кто-то на том же общем сервере cheapo, что и мой сайт, решит поиграть с моими изображениями и тому подобным, это раздражает. Если они решат поиграть с моим PHP-кодом или моим CSS, это нарушение безопасности. Вопрос о том, что прямая запись в файловую систему является злом, полностью зависит от того, что вы написание и в каком контексте оно используется.

 7
Author: Otto, 2014-03-30 18:16:06