web-dev-qa-db-fra.com

Comment sécuriser ou désactiver les flux RSS?

J'essaie de configurer WordPress en tant que CMS. En tant que tel, je veux désactiver les flux, car il s’agit principalement d’un site sécurisé. J'ai parcouru toutes les pages de paramètres, mais aucun paramètre n'a été défini pour modifier ou désactiver les flux. Donc, je suppose que je dois écrire une fonction personnalisée ou un plugin pour le faire. Mais comment?

En ce qui concerne les flux existants, je connaissais au moins ces liens ...

http://example.com/comments/feed/
http://example.com/feed/

Donc, en plus de la question principale, je suis aussi un peu inquiet: le code ci-dessus capture-t-il all les flux disponibles? Et est-ce vraiment le moyen de désactiver tous les flux?

Je sais que le support des plugins est hors sujet ici. Cependant, juste pour un contexte/une note de bas de page, j'utilise la combinaison suivante de pièces mobiles pertinentes:

J'ai réussi à sécuriser l'accès aux pages et aux articles de blog en utilisant le plugin. Toutefois, lorsque des utilisateurs non authentifiés visitent une URL de flux, celle-ci affiche toujours du contenu. Parce que le plugin ne semble pas pouvoir faire ce que je veux, j'ai décidé d'écrire du code moi-même pour le faire.

(J'ai parcouru la page Apparence> GeneratePress mais rien n'est activé. J'ai également parcouru la Apparence> Personnaliser page (et tous les paramètres), mais je n'y ai rien trouvé non plus. Enfin, j'ai relu plusieurs fois les options du plug-in "Groupes" mais je n'ai trouvé aucune option.)

4
Jeroen

Comme souligné dans les commentaires de @kaiser, votre question est très similaire à cette question . En fait, le question lui-même détient la réponse. Pour désactiver tous les flux, ajoutez le code suivant ...

function itsme_disable_feed() {
    wp_die( __( 'No feed available, please visit the <a href="'. esc_url( home_url( '/' ) ) .'">homepage</a>!' ) );
}

add_action('do_feed', 'itsme_disable_feed', 1);
add_action('do_feed_rdf', 'itsme_disable_feed', 1);
add_action('do_feed_rss', 'itsme_disable_feed', 1);
add_action('do_feed_rss2', 'itsme_disable_feed', 1);
add_action('do_feed_atom', 'itsme_disable_feed', 1);
add_action('do_feed_rss2_comments', 'itsme_disable_feed', 1);
add_action('do_feed_atom_comments', 'itsme_disable_feed', 1);

... dans un plugin vide, et activez ce plugin. Cela devrait empêcher quiconque d'accéder à une action de fil.

Notez que ce qui précède est uniquement un exemple de code. De préférence, vous ne devriez pas wp_die mais rediriger ou utiliser un code 404 à la place.

3
Jeroen

Sur la base de la fonction add_feed, voici une implémentation prototype de remove_feed:

/**
 * Remove a feed type like /atom1/.
 *
 * @global WP_Rewrite $wp_rewrite
 *
 * @param string   $feedname Feed name.
 * @return string Feed action name.
 */
function remove_feed( $feedname ) {
        global $wp_rewrite;

        if ( in_array( $feedname, $wp_rewrite->feeds ) ) {
                $wp_rewrite->feeds = array_diff( $wp_rewrite->feeds, array( $feedname ) );
        }

        $hook = 'do_feed_' . $feedname;

        // Remove default function hook
        remove_all_actions( $hook );
        add_action( $hook, $hook );

        return $hook;
}

Usage:

remove_feed( 'rss' );
2
Tom J Nowell