Security
How we handle security
We treat every file as if it were our own. Here's exactly what we do (and what we don't do) with your data.
Files are transient
Every file you submit is processed in a per-request temporary directory and deleted in a finally block. A background sweeper cleans any orphans older than 1 hour.
HTTPS everywhere
All traffic to and from WOW PDF is encrypted with TLS. We redirect HTTP to HTTPS. Mixed content is rejected.
Short retention
Server logs are kept for up to 7 days for abuse monitoring, then deleted. Contact form messages are kept for up to 90 days, then deleted.
Rate limiting
Per-IP sliding-window rate limits protect the Service from abuse. Tool use is capped at 20 requests per 10 minutes; AI tools at 5 per 10 minutes.
Server-side validation
We validate file size against the tool's limit, file type via extension and magic bytes, and reject executable files outright — regardless of claimed MIME type.
No persistence of contents
We never copy uploaded files to cloud storage, never index them, and never use them to train machine-learning models. Files don't outlive the request that produced them.
Detailed file-handling walk-through
When you submit a file to a tool, your browser sends it as a multipart form upload over HTTPS to our API route at /api/tools/[slug]/process (or /api/ai/[feature] for AI tools). The route does the following:
- Resolves your IP via
x-forwarded-forand checks the in-memory rate-limit bucket. If exceeded, the request is rejected with a 429 and a human-readable message. - Reads the uploaded file(s) into memory and checks size, file extension, and magic bytes against the tool's declared accepted inputs. Files failing any check are rejected with a 422 and an actionable error message — never a stack trace.
- Creates a unique temporary directory under
os.tmpdir()with the prefixwowpdf-<uuid>, writes the input file(s) into it, and invokes the processor function for that tool's slug. - Returns the output as a streaming response with an appropriate
Content-Dispositionheader so your browser downloads it. For text-only outputs (text-only conversion results, AI responses), the API may return JSON with the content inline. - In the
finallyblock, unconditionally deletes the temporary directory, regardless of whether the request succeeded or threw an exception.
A separate background sweeper wakes up every 30 minutes and deletes any wowpdf-* directories older than 1 hour — protecting us against the rare case where a request was interrupted before the finally block ran.
Reporting vulnerabilities
If you believe you've found a security issue in WOW PDF, please don't file a public issue. Use our contact form and pick "Security" as the subject, or email security@wowpdf.app. We acknowledge reports within 1 working day and aim to fix confirmed vulnerabilities within 30 days.