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:

  1. Resolves your IP via x-forwarded-for and checks the in-memory rate-limit bucket. If exceeded, the request is rejected with a 429 and a human-readable message.
  2. 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.
  3. Creates a unique temporary directory under os.tmpdir() with the prefix wowpdf-<uuid>, writes the input file(s) into it, and invokes the processor function for that tool's slug.
  4. Returns the output as a streaming response with an appropriate Content-Disposition header so your browser downloads it. For text-only outputs (text-only conversion results, AI responses), the API may return JSON with the content inline.
  5. In the finally block, 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.