<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Status_200_Master</title>
    <description>The latest articles on DEV Community by Status_200_Master (@status_200_master).</description>
    <link>https://dev.to/status_200_master</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4116601%2Facd5b9ba-6b05-4b20-abd9-5fc207441ba6.png</url>
      <title>DEV Community: Status_200_Master</title>
      <link>https://dev.to/status_200_master</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/status_200_master"/>
    <language>en</language>
    <item>
      <title>I Built an Open-Source WordPress Security Scanner — 109 Checks in 60 Seconds</title>
      <dc:creator>Status_200_Master</dc:creator>
      <pubDate>Thu, 10 Sep 2026 18:10:46 +0000</pubDate>
      <link>https://dev.to/status_200_master/i-built-an-open-source-wordpress-security-scanner-109-checks-in-60-seconds-50g0</link>
      <guid>https://dev.to/status_200_master/i-built-an-open-source-wordpress-security-scanner-109-checks-in-60-seconds-50g0</guid>
      <description>&lt;p&gt;Most WordPress security issues come from basics nobody checks. PHP execution in the uploads folder. Exposed &lt;code&gt;wp-config.php&lt;/code&gt; backups. Missing security headers. Weak file permissions.&lt;/p&gt;

&lt;p&gt;The fixes are simple. The problem is nobody audits for them.&lt;/p&gt;

&lt;p&gt;That's why I built &lt;strong&gt;wpsec109&lt;/strong&gt; — a free, open-source scanner that checks 109 WordPress security hardening points across 22 categories in about 60 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Checks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Directory Listing (7 checks)
&lt;/h3&gt;

&lt;p&gt;Checks whether &lt;code&gt;/wp-content/&lt;/code&gt;, &lt;code&gt;/wp-content/plugins/&lt;/code&gt;, &lt;code&gt;/wp-content/uploads/&lt;/code&gt;, and other directories allow directory listing. Exposed directories reveal file structures to attackers.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. PHP Execution Blocking (18 checks)
&lt;/h3&gt;

&lt;p&gt;The critical one: tests whether PHP can execute in &lt;code&gt;/wp-content/uploads/&lt;/code&gt;. Tests 5 extension variants:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.phar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.phtml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.php0&lt;/code&gt; through &lt;code&gt;.php9&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Double-extension bypasses: &lt;code&gt;.php.jpg&lt;/code&gt;, &lt;code&gt;.php;.jpg&lt;/code&gt;, &lt;code&gt;.php%00.jpg&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Sensitive Files (14 checks)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Exposed &lt;code&gt;wp-config.php&lt;/code&gt; and backups (&lt;code&gt;.bak&lt;/code&gt;, &lt;code&gt;.old&lt;/code&gt;, &lt;code&gt;.save&lt;/code&gt;, &lt;code&gt;.txt&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Exposed &lt;code&gt;.git&lt;/code&gt; directory and &lt;code&gt;.env&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;Exposed &lt;code&gt;readme.html&lt;/code&gt; and &lt;code&gt;license.html&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Security Headers (6 checks)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;X-Frame-Options&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X-Content-Type-Options&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Content-Security-Policy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Strict-Transport-Security&lt;/code&gt; (HSTS)&lt;/li&gt;
&lt;li&gt;Referrer-Policy&lt;/li&gt;
&lt;li&gt;Permissions-Policy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. User Enumeration (3 checks)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/wp-json/wp/v2/users/&lt;/code&gt; accessibility&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/?author=1&lt;/code&gt; enumeration&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/wp-admin/admin-ajax.php&lt;/code&gt; user enumeration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. File Permissions (9 checks)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;wp-config.php&lt;/code&gt; permissions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.htaccess&lt;/code&gt; permissions&lt;/li&gt;
&lt;li&gt;Directory permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. wp-config.php Hardening (7 checks)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DISALLOW_FILE_EDIT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DISALLOW_FILE_MODS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FORCE_SSL_ADMIN&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Security salts presence&lt;/li&gt;
&lt;li&gt;Database prefix&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. Core File Integrity (1 check)
&lt;/h3&gt;

&lt;p&gt;MD5 checksums against official WordPress API.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. WPScan Integration (4 checks)
&lt;/h3&gt;

&lt;p&gt;Plugin and theme CVE cross-reference (requires API key).&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the repo&lt;/span&gt;
git clone https://github.com/damianhunziker/Wordpress-security-check.git
&lt;span class="nb"&gt;cd &lt;/span&gt;wordpress-security-check

&lt;span class="c"&gt;# Run a basic scan&lt;/span&gt;
python wordpress_security_check.py &lt;span class="nt"&gt;--target&lt;/span&gt; https://example.com

&lt;span class="c"&gt;# Run with WPScan integration&lt;/span&gt;
python wordpress_security_check.py &lt;span class="nt"&gt;--target&lt;/span&gt; https://example.com &lt;span class="nt"&gt;--wpscan-api-key&lt;/span&gt; YOUR_KEY

&lt;span class="c"&gt;# Generate JSON report&lt;/span&gt;
python wordpress_security_check.py &lt;span class="nt"&gt;--target&lt;/span&gt; https://example.com &lt;span class="nt"&gt;--save&lt;/span&gt; report.json

&lt;span class="c"&gt;# Interactive mode&lt;/span&gt;
python wordpress_security_check.py &lt;span class="nt"&gt;--target&lt;/span&gt; https://example.com &lt;span class="nt"&gt;--interactive&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Sample Output
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;==================================================
WordPress Security Check - Scan Report
Target: https://example.com
Scan Duration: 47 seconds
==================================================

[CRITICAL] PHP Execution in /wp-content/uploads/
  Impact: An attacker can upload a webshell and gain code execution.
  Fix: Add the following to /wp-content/uploads/.htaccess:

  &amp;lt;FilesMatch "\.(php|phar|phtml)$"&amp;gt;
    Require all denied
  &amp;lt;/FilesMatch&amp;gt;

[HIGH] wp-config.php.bak exposed
  Impact: Attacker can read database credentials.
  Fix: Remove the backup file or move it outside the web root.

[MEDIUM] X-Frame-Options header missing
  Impact: Site is vulnerable to clickjacking attacks.
  Fix: Add 'X-Frame-Options: DENY' to .htaccess or server config.

[LOW] readme.html exposes WordPress version
  Impact: Attackers can target version-specific vulnerabilities.
  Fix: Delete readme.html from the web root.

==================================================
Summary: 109 checks run | 4 failed | 105 passed
Critical: 1 | High: 1 | Medium: 1 | Low: 1
==================================================
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why Open Source?
&lt;/h2&gt;

&lt;p&gt;I needed a scanner for client work that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Didn't require API keys&lt;/li&gt;
&lt;li&gt;Ran locally without sending data to third parties&lt;/li&gt;
&lt;li&gt;Provided actionable remediation guidance&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nothing did all three, so I built it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/damianhunziker/Wordpress-security-check?utm_source=devto&amp;amp;utm_medium=developer&amp;amp;utm_campaign=wpsec109&amp;amp;utm_content=article" rel="noopener noreferrer"&gt;https://github.com/damianhunziker/Wordpress-security-check?utm_source=devto&amp;amp;utm_medium=developer&amp;amp;utm_campaign=wpsec109&amp;amp;utm_content=article&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full Guide:&lt;/strong&gt; &lt;a href="https://vyftec.com/your-wordpress-is-probably-leaking-heres-how-to-find-109-security-holes-in-60-seconds/?utm_source=devto&amp;amp;utm_medium=developer&amp;amp;utm_campaign=wpsec109&amp;amp;utm_content=article" rel="noopener noreferrer"&gt;https://vyftec.com/your-wordpress-is-probably-leaking-heres-how-to-find-109-security-holes-in-60-seconds/?utm_source=devto&amp;amp;utm_medium=developer&amp;amp;utm_campaign=wpsec109&amp;amp;utm_content=article&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MIT licensed. No API keys required. Runs on Python 3.8+.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>security</category>
      <category>python</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
