N’importe qui peut lancer les tâches planifiées de votre site via wp-cron.php
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/
Objet : example.com – merci de lancer les tâches planifiées WordPress depuis le serveur et de fermer wp-cron.php Bonjour, Un contrôle du site (PageCheck) a constaté que https://example.com/wp-cron.php répond à tout le monde : n’importe qui peut lancer les tâches planifiées de notre site et charger le serveur. Pourriez-vous, dans cet ordre : 1. Ajouter une tâche cron sur le serveur qui exécute wp-cron.php avec PHP toutes les 5 minutes. 2. Ajouter define( 'DISABLE_WP_CRON', true ); dans wp-config.php. 3. Bloquer les requêtes web vers wp-cron.php (dans .htaccess, la configuration nginx ou le pare-feu). 4. Vérifier que les articles programmés et les e-mails partent toujours à l’heure. Ressources : - Hooking WP-Cron into the system task scheduler (WordPress.org): https://developer.wordpress.org/plugins/cron/hooking-wp-cron-into-the-system-task-scheduler/ Merci beaucoup !
Analysez votre site pour savoir s’il a ce problème. Analyser un site