web-dev-qa-db-fra.com

Pourquoi WP_Image_Editor n'enregistre-t-il pas les images à l'aide de l'API du système de fichiers?

J'étais en train de vérifier certains de mes plugins existants pour tout accès non sûr au système de fichiers, lorsque j'ai rencontré la fonction save de WP_Image_Editor , qui appelle _save, qui appelle finalement make_image (ci-dessous). WP_Image_Editor a été publié dans WP 3.5, alors que le Filesystem API existe depuis le WP 2.6, donc je suppose que le raisonnement est lié aux spécificités du cas d'utilisation plutôt que de ne pas être modifié pour répondre aux nouvelles normes.

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;
}

Ma question est la suivante: quelles en sont les raisons? Selon Otto, accéder directement au système de fichiers est pervers , quelles sont donc les exceptions qui permettent de le corriger dans ce cas? Je veux que mes plugins se comportent de la meilleure façon possible, mais cela rend les meilleures pratiques un peu difficiles à discerner.

6
Dan

Accéder directement au système de fichiers pour écrire est un mal ... dans la plupart des cas où les gens le font réellement.

Si vous éditez un fichier image et qu'il se trouve dans le répertoire wp-content/uploads, alors vous savez, peu importe. Ce n'est pas le cas commun. Les plugins et les thèmes ne le font généralement pas car ils n'ont pas à le faire. WordPress a le code pour le faire pour eux. C'est parfaitement en sécurité.

Non, ce que les plugins et les thèmes veulent éditer sont des choses dangereuses. Ils veulent écrire PHP fichiers avec des informations de configuration, ou sauvegarder des fichiers CSS personnalisés, ou des choses du même genre. Ils veulent écrire toutes ces choses qui ne sont pas sûres pour être éditées dans le monde.

Si quelqu'un sur le même serveur partagé cheapo que mon site décide de tripoter mes images, etc., c'est un désagrément. S'ils décident de tripoter mon code PHP ou mon code CSS, il s'agit d'une faille de sécurité. La question de savoir si le fait d’écrire directement sur le système de fichiers soit mal dépend entièrement de ce que vous écrivez et du contexte dans lequel elle est utilisée.

7
Otto