What Is a Website Security Audit?
A website security audit is a systematic review of your site's security posture — identifying vulnerabilities, misconfigurations, and weaknesses before attackers find them. It's not the same as a full penetration test (which involves active exploitation), but a thorough audit covers the most common attack surface.
This guide walks through how to perform a practical security audit on your own website.
Step 1: Reconnaissance — Know Your Attack Surface
Before you can audit security, you need to understand exactly what you're securing.
**Map all subdomains:** Use tools or services to enumerate your subdomains. Every forgotten subdomain (old staging environments, legacy apps, dev servers) is a potential entry point. Read our guide on [subdomain enumeration](/blog/what-is-subdomain-enumeration) for a full breakdown.
**Identify all technologies:** - What CMS are you running? (WordPress, Drupal, custom) - What frameworks? (React, Laravel, Django) - What third-party scripts are loaded? (analytics, chat widgets, payment processors) - What server software? (Apache, Nginx, IIS)
Browser developer tools, Wappalyzer, or automated scanners like [Yrzo AI](https://yrzoai.dev) can identify your tech stack quickly.
**List all input points:** Every place your application accepts user input is a potential vulnerability: - Contact forms - Search boxes - Login forms - File upload fields - URL parameters - API endpoints - Comment fields
Step 2: SSL/TLS Configuration
A valid SSL certificate is the bare minimum — but configuration matters too.
**Check:** - Certificate is valid and not expiring soon - HTTPS enforced site-wide (HTTP redirects to HTTPS) - No mixed content (HTTPS page loading HTTP resources) - Strong cipher suites — no SSLv3, TLS 1.0, or TLS 1.1 - HTTP Strict Transport Security (HSTS) header present
Test your SSL configuration at ssllabs.com/ssltest — aim for an A or A+ grade.
Step 3: HTTP Security Headers
Security headers are instructions your server sends to browsers that enable important protections. Many sites have none of these configured.
**Check for these headers in every response:**
`Content-Security-Policy` — Prevents cross-site scripting by defining which sources can load scripts, styles, and other resources.
`X-Frame-Options` — Prevents your site being embedded in iframes on other domains, blocking clickjacking attacks. Read more about [clickjacking](/blog/what-is-clickjacking-prevention).
`X-Content-Type-Options: nosniff` — Prevents browsers from MIME-type sniffing responses.
`Referrer-Policy` — Controls what referrer information is sent with requests.
`Permissions-Policy` — Restricts access to browser features (camera, microphone, geolocation).
Test your headers at securityheaders.com.
Step 4: Authentication Security
**Login page audit:** - Is there rate limiting? Try submitting the login form rapidly — you should be blocked after several failed attempts - Is MFA available and enforced for admin accounts? - Does the error message distinguish between "wrong username" and "wrong password"? It shouldn't — that leaks valid usernames - Is the password field autocomplete set appropriately? - Is there a CAPTCHA after failed attempts?
See our [full guide to securing login pages](/blog/how-to-secure-website-login-page).
**Session management:** - Session cookies should have `HttpOnly` and `Secure` flags - `SameSite=Strict` or `SameSite=Lax` to prevent CSRF - Sessions should expire after inactivity - Logout should fully invalidate the server-side session
Step 5: Input Validation Testing
Every input field needs testing for injection vulnerabilities.
**SQL Injection** — Try entering a single quote `'` in form fields, search boxes, and URL parameters. Error messages containing SQL syntax indicate vulnerability. Read [how to fix SQL injection properly](/blog/how-to-fix-sql-injection-properly).
**Cross-Site Scripting (XSS)** — Try entering `<script>alert(1)</script>` in input fields. If an alert pops, or the tag appears unescaped in the page source, you have an XSS vulnerability.
**Path Traversal** — In file download or include parameters, try `../../../etc/passwd` to test for directory traversal.
Don't stop at the UI — test your API endpoints directly using a tool like Burp Suite or Postman.
Step 6: Access Control Review
[Broken access control](/blog/what-is-broken-access-control) is the #1 OWASP vulnerability. Test it by:
- Creating two test accounts at the same privilege level - Performing actions as Account A that generate URLs or API requests referencing specific IDs - Replaying those requests while authenticated as Account B - Checking whether Account B can access Account A's data
Also test: - Whether admin paths (`/admin`, `/dashboard`, `/manage`) are accessible without authentication - Whether API endpoints enforce the same access controls as the UI
Step 7: Third-Party Dependencies
Your website's security is only as strong as its weakest dependency.
**Check:** - When was your CMS last updated? - Are all plugins and themes up to date? - What JavaScript libraries are loaded from CDNs? Are they pinned to specific versions? - Check loaded packages against known vulnerability databases (Snyk, npm audit, OWASP Dependency Check)
Supply chain attacks via compromised third-party scripts are a growing threat. Read our [supply chain attack guide](/blog/what-is-supply-chain-attack-website).
Step 8: Information Disclosure
Sites often leak more information than they should.
**Check for:** - Verbose error messages that reveal server software, database type, or file paths - Directory listing enabled — navigating to a folder URL shows its contents - Backup files accessible — `.bak`, `.old`, `backup.zip`, `database.sql` in web-accessible locations - `robots.txt` revealing sensitive paths (it's public — don't use it to hide things) - Source code comments containing credentials or internal URLs - Git repository exposed — try navigating to `/.git/config`
Step 9: Automated Scanning
Manual testing catches logic flaws and business-specific issues, but automated scanners efficiently cover common vulnerability patterns at scale.
[Yrzo AI](https://yrzoai.dev) runs automated security scans covering SQL injection, XSS, security headers, SSL configuration, subdomain enumeration, access control issues, and more — giving you a structured report of findings with remediation guidance.
Automated scanning complements manual testing — use both.
Step 10: Document and Remediate
Your audit is only useful if findings get fixed.
**For each finding, document:** - Vulnerability type and location - Severity (Critical / High / Medium / Low) - Evidence (screenshot, request/response) - Recommended remediation - Assigned owner and deadline
Prioritise by severity. Critical and High findings should be remediated within days, not weeks. Retest after fixes are applied to confirm they're resolved.
Key Takeaways
A website security audit doesn't require specialist knowledge to start — reconnaissance, SSL checks, header review, and input testing are all accessible with free tools and this guide. The most important thing is doing it regularly, not just once.
Start with an [automated security scan](https://yrzoai.dev) to baseline your current posture, then layer in manual testing for your specific application logic.
Find out if your website has these vulnerabilities
Yrzo AI runs 44 automated security checks and delivers a full report in under 20 minutes. Starting from £149.
Scan your website →