# Passive security review — Duddingston Dental Practice – Edinburgh Dentist
Run: fd5fcc5f-2a18-4465-9326-dd240833f8c8
Status: **partial**
Reviewed: `duddingstondentalpractice.co.uk`, `www.duddingstondentalpractice.co.uk`
Started: 2026-10-26T22:51:17.997Z
Requests: 16 of 40 budgeted, at most 1/s
Discovered pages: 3
Tier: 2 (limited writes) — +2 parameter surface, +2 structured API, +1 XML/template surface, +1 version disclosure, +1 no WAF observed
## Summary
**3** configuration issues: 0 high, 1 medium, 2 low.
### Pages fetched
- https://duddingstondentalpractice.co.uk/contact/ → HTTP 200
- https://duddingstondentalpractice.co.uk/about-us/ → The request rate was exceeded.
- https://duddingstondentalpractice.co.uk/privacy-policy/ → HTTP 200
## Checks
| Check | Host | Severity | Result |
| --- | --- | --- | --- |
| The site serves HTTPS | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Info | pass |
| HTTP Strict Transport Security | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Info | pass |
| Content Security Policy | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Info | pass |
| MIME type sniffing is disabled | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Low | fail |
| Framing is restricted | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Medium | fail |
| Referrer policy | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Info | pass |
| Cookie attributes | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Info | info |
| Server version disclosure | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Low | fail |
| Cross-origin resource sharing | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Info | pass |
| HTTP redirects to HTTPS | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Info | pass |
| Git metadata is not exposed | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Info | pass |
| Environment file is not exposed | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Info | pass |
| Server status page is not exposed | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Info | pass |
| security.txt | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Low | info |
| TLS certificate | duddingstondentalpractice.co.uk, www.duddingstondentalpractice.co.uk | Info | pass |
## Findings
### 1. Framing is restricted (Medium)
Neither X-Frame-Options nor a CSP frame-ancestors directive restricts framing.
**Suggested fix.** Send X-Frame-Options: SAMEORIGIN or a CSP frame-ancestors directive.
### 2. MIME type sniffing is disabled (Low)
X-Content-Type-Options is "nosniff, nosniff".
**Suggested fix.** Add X-Content-Type-Options: nosniff.
### 3. Server version disclosure (Low)
The response discloses component versions: Apache / PHP/8.4.27.
**Suggested fix.** Remove version numbers from Server and X-Powered-By responses.
## Patch
Configuration suggestions for staging review; see `patch/README.md` for placement and verification.
### _headers
```
# Review in staging. CSP is report-only and does not remediate the CSP finding.
/*
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
```
### nginx.conf
```
# Review in staging. CSP is report-only; tailor it before enforcement.
# Add inside the server { } block, then reload nginx.
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
# Add inside the server { } block.
server_tokens off;
```
### apache.conf
```
# Review in staging. CSP is report-only; tailor it before enforcement.
# Add inside the <VirtualHost> block or .htaccess, then reload Apache.
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
# Add inside the <VirtualHost> block or .htaccess.
ServerTokens Prod
```
## Application findings (deep pass)
The deep pass did not finish (failed); app coverage is incomplete.
## Basis and limits
The baseline is passive: GET and HEAD against public addresses only. DNS is resolved once and connections are pinned; the site stays inside its own registrable domain; redirects are reported, never followed; the rate and request budget are enforced.
Checks cover transport, response headers, cookie flags, version banners, CORS, the certificate, and a few well-known exposure paths.
## What this review did not do
No exploitation, login, form submission, credential use, file upload, or application-logic testing in the passive baseline. No finding is confirmed exploitable; exposures are recorded as directly observed. Nothing was changed on the server.
## Delivery
`owner-email.md` and `github-issue.md` are generated from these findings. Nothing is sent unless the `send` command runs.
partial · Tier 2 · 3 findings
duddingstondentalpractice.co.uk
Reviewed Mon, 26 Oct 2026 22:49:24 GMT. No delivery recorded.
Suggested patch
Review before applying.
# Review in staging. CSP is report-only and does not remediate the CSP finding. /* X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN