The security scan of wokkinginternationalbuffet-canal-crossing.orestaurant.site found 73 issues including 4 high-risk and 10 medium-risk findings. The most critical issue is 'Missing SPF Record โ Email Spoofing Possible' which requires immediate attention. Full remediation steps are provided for each finding below.
No SPF record โ there's no DNS-level list of which mail servers are authorized to send using this domain's envelope sender, so any server can pass an SPF check for your domain
Without SPF, nothing tells receiving mail servers which senders are legitimate for this domain's SMTP envelope, making it easier for forged mail to get through โ and easier for your own legitimate mail to be misjudged as spam. Note that SPF on its own, even correctly configured, doesn't stop the visible 'From:' address a recipient sees from being spoofed โ that requires DMARC (see below) to enforce alignment between SPF/DKIM and the From header.
Example: A customer receives an email that looks exactly like it's from the business โ same display name, same domain โ asking them to 'confirm' a payment or click a link, with nothing in DNS to stop the forgery or warn the recipient.
Add an SPF TXT record to your DNS listing every service that actually sends mail for this domain โ leaving one out will cause its mail to fail SPF and possibly get rejected. Log into your domain registrar, go to DNS, add a TXT record for '@' with a value matching your provider: Google Workspace: 'v=spf1 include:_spf.google.com -all' | Microsoft 365: 'v=spf1 include:spf.protection.outlook.com -all'. If you use additional senders (helpdesk, marketing platform, invoicing tool, etc.), add each as its own 'include:' entry in the same record โ a domain can only have one SPF TXT record, so don't create a second one. Use https://mxtoolbox.com/spf.aspx to verify, then add a DMARC record too so the visible From address is covered as well.
CWE-290 โ Authentication Bypass by Spoofing
The login or identity check can be tricked by faking trusted information, letting an attacker in without real credentials.
No DMARC record โ your domain has zero email authentication enforcement, making it trivial to impersonate your business
This makes it significantly easier for scammers to send convincing fake emails 'from' your business โ a common tactic in invoice fraud and phishing โ which can directly cost your customers money and damage trust in your brand.
Example: A scammer sends an invoice-fraud email that appears to come straight from the business's own domain; with no DMARC record in place, nothing tells the recipient's mail provider the message is forged, so it lands in the inbox looking completely legitimate.
Add a DMARC TXT record to your DNS. Go to your domain registrar's DNS settings, add a TXT record for '_dmarc' (not '@') with value: 'v=DMARC1; p=none; rua=mailto:youremail@yourdomain.com' Start at p=none โ this only turns on reporting, nothing is blocked yet. Review the aggregate reports for a few weeks to confirm every legitimate mail source for this domain (email provider, helpdesk, marketing tools, etc.) is passing DMARC alignment, then move to p=quarantine, and finally p=reject once you're confident nothing legitimate will be caught. Verify at https://mxtoolbox.com/dmarc.aspx
CWE-290 โ Authentication Bypass by Spoofing
The login or identity check can be tricked by faking trusted information, letting an attacker in without real credentials.
a backup of web.config is publicly downloadable, which can contain connection strings and other secrets
Connection strings and other secrets in this file can give direct access to your database or internal services.
Example: An attacker downloads this backup, finds the database connection string inside it, and uses those credentials to connect to internal systems directly.
Delete this backup file from the server immediately, and rotate any credentials it contained.
CWE-552 โ Files or Directories Accessible to External Parties
Files that should be private can be reached by people who shouldn't have access to them.
Missing Strict-Transport-Security (HSTS) โ browsers aren't forced to always use HTTPS, leaving visitors open to downgrade attacks
An attacker on the same network as a visitor (public wifi, a compromised router, etc.) can trick their browser into using the insecure version of your site and intercept what they type โ raising the odds of stolen logins or payment details.
Example: An attacker on a shared network intercepts a visitor's first request (which defaults to HTTP) before the redirect happens, and silently serves them a fake version of the page instead of the real site.
Add the HSTS header to your web server. Nginx: add 'add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;' in your server block. Apache: add 'Header always set Strict-Transport-Security "max-age=31536000"' in your config. Cloudflare: SSL/TLS > Edge Certificates > enable HTTP Strict Transport Security.
CWE-319 โ Cleartext Transmission of Sensitive Information
Sensitive data is sent over the network unencrypted, so anyone monitoring the connection can read it.
Missing X-Frame-Options โ your website can be embedded in an attacker's invisible iframe to trick users into unwanted actions
An attacker could trick your customers into clicking hidden buttons โ like 'change password' or 'confirm purchase' โ without realizing it, potentially leading to account takeovers or unauthorized actions carried out under your brand's name.
Example: An attacker embeds the site's 'delete account' or 'confirm payment' button inside an invisible iframe on their own page, disguised under something like a fake 'play video' button โ a visitor's real click triggers the hidden action on your site.
Add the X-Frame-Options header. Nginx: 'add_header X-Frame-Options "SAMEORIGIN" always;' Apache: 'Header always set X-Frame-Options SAMEORIGIN' This tells browsers to only allow your site to be framed by pages on the same domain.
CWE-1021 โ Improper Restriction of Rendered UI Layers (Clickjacking)
The site doesn't prevent itself from being embedded inside another page, which attackers can exploit to trick users into clicking something they didn't intend to.
Missing Content-Security-Policy (CSP) โ this site has no CSP defense-in-depth layer, so if any cross-site scripting weakness exists elsewhere it's easier to exploit; this finding on its own doesn't mean an XSS vulnerability exists on this site
CSP is a defense-in-depth browser control, not evidence of an active vulnerability by itself โ but if an attacker ever manages to slip malicious script onto your site through some other weakness (e.g. a vulnerable plugin or a comment field), a good CSP is often what stops that script from running and stealing customer data such as login sessions or payment details. Without it, that second layer of protection isn't there.
Example: A vulnerable comment form or compromised ad widget lets an attacker inject a script tag; with a properly scoped CSP in place, the browser would refuse to run it โ without CSP, that same injected script runs freely and can forward a visitor's session cookie to the attacker.
Add a Content-Security-Policy header, but roll it out carefully โ a misconfigured CSP can break legitimate scripts/styles on the site. Start by deploying it in Report-Only mode first, which reports violations without blocking anything: 'add_header Content-Security-Policy-Report-Only "default-src \'self\'; script-src \'self\'; object-src \'none\'; report-uri /csp-report";' Review the reports for a while to catch anything the policy would break, adjust the policy, then switch the header name to 'Content-Security-Policy' (without '-Report-Only') to start enforcing it. For WordPress or complex sites, use https://csp-evaluator.withgoogle.com to help build the policy.
CWE-693 โ Protection Mechanism Failure
A security safeguard that should be protecting the system is missing, disabled, or not strong enough.
The path /.env returns a restricted-access response (401/403) that is genuinely distinct from how this site handles random nonexistent paths โ this confirms *something* is being specially handled at this path, but the response contains no content confirming what it actually is โ this exposes credentials or sensitive configuration that should never be public
Exposed credentials in /.env (API keys, database passwords, AWS access keys) give an attacker direct access to your critical systems โ databases, cloud infrastructure, third-party APIs, and internal tools. A single exposed credential can lead to total infrastructure compromise.
Example: An AWS credentials file exposed at /.env contained a key with full EC2/RDS access. An attacker used it to launch crypto miners on the account, incurring $50k in charges within 72 hours before discovery. The attacker also captured all database dumps and sold them on underground forums.
1. IMMEDIATELY rotate all exposed credentials (API keys, database passwords, SSH keys). Treat them as fully compromised. 2. Block public access to /.env via web server rules (Nginx: 'location ~ /\.env { deny all; }'). 3. Never commit secrets to version control โ use .gitignore and environment variable loaders (python-dotenv, Node's dotenv). 4. Use a secrets manager (AWS Secrets Manager, HashiCorp Vault, Doppler) for production credentials.
CWE-798 โ Use of Hard-coded Credentials
A username, password, or key is built directly into the code or configuration, where it can be found and reused by an attacker.
The path /.git/HEAD returns a restricted-access response (401/403) that is genuinely distinct from how this site handles random nonexistent paths โ this confirms *something* is being specially handled at this path, but the response contains no content confirming what it actually is โ this exposes the site's Git repository metadata, not an admin login
This is not a login page to brute-force โ a publicly accessible /.git/HEAD can let an attacker reconstruct this site's Git repository: full source code, configuration files, commit history, internal file paths, and any secrets that were ever committed, even ones later removed from the latest version but never rotated.
Example: A free, widely available tool rebuilds this site's entire source code and commit history from the exposed .git folder within minutes โ sometimes turning up a hardcoded API key or password that was deleted from the current code but never actually rotated.
Block public access to /.git/HEAD entirely โ it should never be servable. Nginx: 'location ~ /\.git { deny all; }'. Apache: '<DirectoryMatch "\.git"> Require all denied </DirectoryMatch>'. Better yet, don't deploy the .git folder to the live server at all. If any credentials were ever committed to this repo, rotate them โ treat them as compromised.
No DKIM record found under common selector names โ this does not confirm DKIM is unconfigured, only that it wasn't found under any of the selector names checked; many providers use a custom or provider-specific selector this check can't guess
If DKIM genuinely isn't configured, email providers increasingly use it as a trust signal, and its absence can make legitimate emails more likely to be flagged as suspicious or land in spam. But this check only queries a fixed list of common selector names (default, google, mail, etc.) โ many providers assign a random or account-specific selector, so this finding should be treated as 'couldn't confirm DKIM,' not 'DKIM is definitely missing.'
Example: A legitimate invoice email from the business gets flagged as suspicious or dropped into spam by the recipient's mail provider, simply because there's no DKIM signature to prove the message wasn't altered or forged in transit โ this only actually happens if DKIM is truly unconfigured, which this check alone can't confirm.
First confirm whether DKIM is actually configured: check your email provider's admin console (Google Workspace: Admin console > Apps > Gmail > Authenticate email; Microsoft 365: Defender > Email authentication > DKIM) for the exact selector name in use, since it's often not one of the common defaults this scan checks. If it turns out DKIM genuinely isn't enabled, turn it on there and add the resulting TXT record to DNS. If you're not sure how to check, share the selector name your provider gives you and this can be verified directly.
CWE-290 โ Authentication Bypass by Spoofing
The login or identity check can be tricked by faking trusted information, letting an attacker in without real credentials.
a phpinfo() debug page is publicly accessible, revealing detailed server configuration
This page reveals your exact PHP version, installed modules, internal file paths, and sometimes other environment secrets โ all useful information for planning a targeted attack.
Example: An attacker pulls up this page to see the exact PHP version and installed modules, then looks up known vulnerabilities for that specific configuration instead of guessing blind.
Delete this file from the server. It should never be left on a production site.
CWE-552 โ Files or Directories Accessible to External Parties
Files that should be private can be reached by people who shouldn't have access to them.
Public IP 172.67.209.186 (hosted by Cloudflare, Inc.) has an abuse confidence score of 0/100 from 1 report(s) in the last 90 days on AbuseIPDB.
A flagged IP usually means one of two things: this server has already been compromised and is being used to send spam or attack other systems, or this is a shared-hosting IP where a different customer on the same server is doing something malicious โ either way, some mail providers and firewalls will treat traffic from this IP with extra suspicion, which can affect email deliverability and how visitors' security software treats your site.
If this is a dedicated server, check for signs of compromise (unexpected processes, outbound traffic, unfamiliar scheduled tasks) and consider a malware scan. If this is shared hosting, contact your hosting provider โ ask whether the IP is shared and whether they can move you to a clean one. You can see the specific reports at https://www.abuseipdb.com/check/172.67.209.186.
Missing X-Content-Type-Options โ browsers may guess file types incorrectly, which can enable content injection
This is a minor gap on its own, but it slightly raises the odds that a malicious file could be misread as something else by a visitor's browser, helping a separate attack succeed.
Example: A user-uploaded file intended to be harmless (like an image) is reinterpreted by the browser as executable script because the server never told it what the file actually was, letting an unrelated vulnerability turn into a working attack.
Add: 'add_header X-Content-Type-Options "nosniff" always;' (Nginx) or 'Header always set X-Content-Type-Options nosniff' (Apache). This is a one-line fix that takes 2 minutes.
CWE-693 โ Protection Mechanism Failure
A security safeguard that should be protecting the system is missing, disabled, or not strong enough.
Missing Referrer-Policy โ page URLs (which may include sensitive data) are shared with third-party sites your pages link to
If any of your page addresses contain sensitive details (like a password-reset token or account ID), that information could leak to outside sites your pages link to โ a small but easily avoidable privacy gap.
Example: A customer clicks an outbound link from a page whose URL happens to include an account ID or a password-reset token, and that full address โ token included โ is handed to the destination site in the Referer header.
Add: 'add_header Referrer-Policy "strict-origin-when-cross-origin" always;' (Nginx) or 'Header always set Referrer-Policy strict-origin-when-cross-origin' (Apache).
CWE-16 โ Configuration
The weakness comes from how the software was configured, not from a flaw in its code.
Missing Permissions-Policy โ browser features like camera, microphone, and location aren't restricted for embedded third-party scripts
If you ever embed third-party ads, widgets, or analytics scripts, they could request a visitor's camera, microphone, or location without you intending to allow it โ an avoidable privacy risk for your customers.
Example: An embedded ad network's script requests the visitor's location or microphone access through a permission prompt the site owner never intended to allow, simply because nothing in the page's headers restricted it.
Add: 'add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;' Adjust based on what your site actually uses. This limits what ad/analytics scripts can access.
CWE-693 โ Protection Mechanism Failure
A security safeguard that should be protecting the system is missing, disabled, or not strong enough.
a macOS .DS_Store file is publicly accessible, which can reveal the names of other files in the same folder
This file can list the names of other files on the server in the same folder, sometimes giving an attacker hints about other things to probe for.
Example: An attacker parses this file to see the names of other files in the same folder โ sometimes turning up a backup file or admin script that was never meant to be discoverable.
Delete the file and add a server rule to block it. Nginx: 'location ~ /\.DS_Store$ { deny all; }'.
CWE-552 โ Files or Directories Accessible to External Parties
Files that should be private can be reached by people who shouldn't have access to them.
Public IP 172.67.209.186 is registered to Cloudflare, Inc. โ network: CLOUDFLARENET โ block: 172.64.0.0 โ 172.71.255.255.
This is informational โ it tells you (and anyone else who looks it up) which hosting provider or network actually operates this IP. Useful for confirming you're hosted where you expect, or for context if the IP reputation check above flags anything.
No action required โ this is identifying information, not a vulnerability.
/id_rsa returned HTTP 200 โ a real, distinct response, not the site's soft-404 page. No specific secret pattern was matched in this response, but this path is normally never meant to be public.
/id_rsa returned HTTP 200 โ a real, distinct response, not the site's soft-404 page. No specific secret pattern was matched in this response, but this path is normally never meant to be public.
Remove or block public access to /id_rsa immediately, and rotate any credentials it may have contained.
CWE-552 โ Files or Directories Accessible to External Parties
Files that should be private can be reached by people who shouldn't have access to them.
/server-status returned HTTP 200, a real distinct page rather than a soft-404 โ this kind of path (backup/debug/admin-tooling) shouldn't normally be reachable by the public.
/server-status returned HTTP 200, a real distinct page rather than a soft-404 โ this kind of path (backup/debug/admin-tooling) shouldn't normally be reachable by the public.
Remove /server-status from the public web root, or restrict access to it by IP allowlist.
CWE-552 โ Files or Directories Accessible to External Parties
Files that should be private can be reached by people who shouldn't have access to them.
/phpinfo.php returned HTTP 200, a real distinct page rather than a soft-404 โ this kind of path (backup/debug/admin-tooling) shouldn't normally be reachable by the public.
/phpinfo.php returned HTTP 200, a real distinct page rather than a soft-404 โ this kind of path (backup/debug/admin-tooling) shouldn't normally be reachable by the public.
Remove /phpinfo.php from the public web root, or restrict access to it by IP allowlist.
CWE-552 โ Files or Directories Accessible to External Parties
Files that should be private can be reached by people who shouldn't have access to them.
/backup.bak returned HTTP 200, a real distinct page rather than a soft-404 โ this kind of path (backup/debug/admin-tooling) shouldn't normally be reachable by the public.
/backup.bak returned HTTP 200, a real distinct page rather than a soft-404 โ this kind of path (backup/debug/admin-tooling) shouldn't normally be reachable by the public.
Remove /backup.bak from the public web root, or restrict access to it by IP allowlist.
CWE-552 โ Files or Directories Accessible to External Parties
Files that should be private can be reached by people who shouldn't have access to them.
/wp-config.php.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/wp-config.php.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/admin/ returned HTTP 200 with no authentication challenge. This confirms a login or admin entry point exists at this path.
/admin/ returned HTTP 200 with no authentication challenge. This confirms a login or admin entry point exists at this path.
Confirm this login is protected by a strong password and, ideally, multi-factor authentication. Consider IP-restricting it if it's only used by internal staff.
/login/ returned HTTP 200 with no authentication challenge. This confirms a login or admin entry point exists at this path.
/login/ returned HTTP 200 with no authentication challenge. This confirms a login or admin entry point exists at this path.
Confirm this login is protected by a strong password and, ideally, multi-factor authentication. Consider IP-restricting it if it's only used by internal staff.
/dashboard/ returned HTTP 200 with no authentication challenge. This confirms a login or admin entry point exists at this path.
/dashboard/ returned HTTP 200 with no authentication challenge. This confirms a login or admin entry point exists at this path.
Confirm this login is protected by a strong password and, ideally, multi-factor authentication. Consider IP-restricting it if it's only used by internal staff.
/administrator/ returned HTTP 200 with no authentication challenge. This confirms a login or admin entry point exists at this path.
/administrator/ returned HTTP 200 with no authentication challenge. This confirms a login or admin entry point exists at this path.
Confirm this login is protected by a strong password and, ideally, multi-factor authentication. Consider IP-restricting it if it's only used by internal staff.
/site.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/site.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/site.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/site.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/site.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/site.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/backup.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/backup.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/www.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/www.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/backup.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/backup.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/backup.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/backup.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/backup.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/backup.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/site.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/site.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/site.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/site.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/database.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/database.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/db.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/db.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/database.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/database.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/www.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/www.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/database.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/database.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/www.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/www.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/database.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/database.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/www.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/www.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/www.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/www.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/database.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/database.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/config.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/config.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/app.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/app.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/db.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/db.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/config.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/config.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/config.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/config.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/db.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/db.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/db.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/db.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/config.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/config.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/db.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/db.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/config.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/config.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/old.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/old.bak returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/old.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/old.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/app.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/app.old returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/app.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/app.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/old.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/old.backup returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/old.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/old.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/app.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/app.tar.gz returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/old.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/old.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/app.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
/app.zip returned HTTP 403. This confirms the path exists, but access control prevented access โ it was not accessed.
No action needed if this is intentionally restricted. Confirm the credentials protecting it are strong and not left at a default.
/backups/ returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
/backups/ returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
Open the path yourself and confirm it's meant to be public. If it's leftover debug/test/admin tooling that should have been removed, take it down or restrict it by IP allowlist. If it's intentional, no action needed.
/config/ returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
/config/ returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
Open the path yourself and confirm it's meant to be public. If it's leftover debug/test/admin tooling that should have been removed, take it down or restrict it by IP allowlist. If it's intentional, no action needed.
/backup/ returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
/backup/ returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
Open the path yourself and confirm it's meant to be public. If it's leftover debug/test/admin tooling that should have been removed, take it down or restrict it by IP allowlist. If it's intentional, no action needed.
/.DS_Store returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
/.DS_Store returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
Open the path yourself and confirm it's meant to be public. If it's leftover debug/test/admin tooling that should have been removed, take it down or restrict it by IP allowlist. If it's intentional, no action needed.
/status returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
/status returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
Open the path yourself and confirm it's meant to be public. If it's leftover debug/test/admin tooling that should have been removed, take it down or restrict it by IP allowlist. If it's intentional, no action needed.
/error_log returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
/error_log returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
Open the path yourself and confirm it's meant to be public. If it's leftover debug/test/admin tooling that should have been removed, take it down or restrict it by IP allowlist. If it's intentional, no action needed.
/metrics returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
/metrics returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
Open the path yourself and confirm it's meant to be public. If it's leftover debug/test/admin tooling that should have been removed, take it down or restrict it by IP allowlist. If it's intentional, no action needed.
/debug.log returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
/debug.log returned HTTP 200, a real distinct response rather than the site's soft-404 page. This path isn't one a typical visitor would stumble onto by browsing the site normally, which is why it's worth a quick manual look โ but its existence alone isn't a vulnerability.
Open the path yourself and confirm it's meant to be public. If it's leftover debug/test/admin tooling that should have been removed, take it down or restrict it by IP allowlist. If it's intentional, no action needed.
/robots.txt is present and was used to seed additional path checks.
/robots.txt is present and was used to seed additional path checks.
No action needed โ robots.txt is meant to be public.
Your server is reachable, which means the web checks and SSL analysis were able to run successfully.