Aller au contenu

N’importe qui peut lancer les tâches planifiées de votre site via wp-cron.php

Avertissement Tout le domaine Sécurité

Instructions générales. Ouvrez cet article depuis votre rapport PageCheck pour le voir rempli avec l’adresse de votre site et les règles pour son serveur web.

De quoi s’agit-il

WordPress exécute ses tâches planifiées – publication des articles programmés, envoi d’e-mails, sauvegardes, mises à jour d’extensions – via le fichier wp-cron.php. Par défaut, il lance lui-même ce fichier pendant que les visiteurs parcourent le site : le fichier doit donc répondre aux requêtes venant d’Internet.

Ce qui ne va pas

Le fichier répond à tout le monde : n’importe qui, robots compris, peut lancer les tâches planifiées du site aussi souvent qu’il veut. Chaque requête charge WordPress en entier : des requêtes répétées sont un moyen bon marché de charger le serveur et de ralentir le site. Les tâches lancées par les visites sont aussi peu fiables : sur un site calme, elles s’exécutent en retard.

Comment corriger

Suivez les étapes dans cet ordre : bloquer d’abord le fichier arrêterait les articles programmés et les e-mails.

1. Lancer les tâches planifiées depuis le serveur. Ajoutez dans le panneau de l’hébergement une tâche planifiée (cron) qui s’exécute toutes les 5 minutes :

  • Plesk : Websites & Domains → Scheduled Tasks → Add Task, type « Run a PHP script », script httpdocs/wp-cron.php.
  • cPanel : Cron Jobs, commande cd /home/USER/public_html && php wp-cron.php (avec votre propre nom de compte et dossier).
  • Un serveur avec WP-CLI : wp cron event run --due-now --path=/path/to/site.

Exécutez le fichier avec PHP sur le serveur, pas en ouvrant son adresse par Internet (wget ou curl) : l’étape 3 le bloque. Les hébergeurs WordPress infogérés ont souvent déjà une tâche serveur – demandez-leur.

2. Empêcher WordPress de le lancer à chaque affichage de page. Ajoutez cette ligne dans wp-config.php, au-dessus de la ligne /* That's all, stop editing! */ :

wp-config.php

define( 'DISABLE_WP_CRON', true );

3. Fermer le fichier à l’extérieur. Utilisez la règle de votre serveur web (votre hébergeur peut vous dire lequel c’est) :

Apache ou LiteSpeed : dans le fichier .htaccess du dossier principal du site, au-dessus de la ligne « # BEGIN WordPress »

<Files "wp-cron.php">
    Require all denied
</Files>

nginx : dans le bloc server du site

location = /wp-cron.php {
    deny all;
}

Avec Cloudflare, vous pouvez le bloquer là-bas à la place : Security → WAF → Custom rules, une règle « URI Path equals /wp-cron.php » avec l’action Block.

4. Vérifier. Ouvrez https://example.com/wp-cron.php : l’adresse doit maintenant répondre « Forbidden » (403). Programmez un article de test quelques minutes plus tard et vérifiez qu’il est publié à l’heure, puis relancez ce contrôle.

Close wp-cron.php on my WordPress site to requests from the internet, without breaking scheduled tasks. https://example.com/wp-cron.php currently answers anyone.
The web server type is not known; check which one the site runs on.

Steps, in this order:
1. Set up a server-side scheduled task that runs WordPress cron every 5 minutes with PHP on the server (php wp-cron.php from the site's folder, or wp cron event run --due-now). Not wget/curl over HTTP: step 3 would block it.
2. Add define( 'DISABLE_WP_CRON', true ); to wp-config.php above "That's all, stop editing!".
3. Deny HTTP access to /wp-cron.php: on Apache/LiteSpeed a <Files "wp-cron.php"> Require all denied </Files> block in .htaccess above # BEGIN WordPress; on nginx location = /wp-cron.php { deny all; } in the server block.
4. Verify: /wp-cron.php answers 403, wp cron event list shows no overdue events after 10 minutes, and a post scheduled a few minutes ahead is published on time.
Tell me exactly which files you changed and what to check in the hosting control panel.

Resources:
- Hooking WP-Cron into the system task scheduler (WordPress.org): https://developer.wordpress.org/plugins/cron/hooking-wp-cron-into-the-system-task-scheduler/

Analysez votre site pour savoir s’il a ce problème. Analyser un site