Skip to content
IsItLegit home

Security and disclosure

How do we handle a hostile email safely?

Every message you send us may be an attack. We treat its text, attachments and links as untrusted data, open links only inside a short-lived browser with strict limits, and let rules cap what a model can say.

By Derick Payne, Rizonetech · Reviewed 31 Oct 2026

Six safeguards in the pipeline

Untrusted text stays data

Email bodies, PDF text, page text and voice transcripts reach a model only inside delimited untrusted blocks, after hidden text has been pulled out as evidence of its own. A model never decides who receives mail: recipients, subjects and templates come from code.

Hard rules set the floor

When deterministic checks find critical evidence, such as changed bank details, a login form on a lookalike domain or a dangerous attachment type, the verdict cannot be Clean whatever a model says. A model can raise severity, never lower it below the floor.

Every claim cites evidence

Every sentence in a verdict must cite an Evidence ID from the checks that ran on that case. If a model cites a missing ID, the verdict is rejected, retried once, and then replaced by the rule-based verdict.

A sealed browser for links

When Muse Wonder walks a suspicious link, the driver, not the prompt, enforces the limits: http and https only, at most 8 steps and 60 seconds, no file downloads, and only per-case canary details typed into forms. Every action is logged.

Validated model outputs

Every model output and tool argument is checked against a strict schema before it is used, and tool calls run in auto mode only.

How we call Meta's Model API

Every call to Meta's Model API uses a Standard model ID with store: false, which asks Meta not to keep the request. Meta's API terms allow Meta to train on content only in Contributor mode, which we never use, and they publish no fixed retention period for requests.

Meta's Model API pricing and data terms

How do we protect your data?

  • Registered bank account numbers are encrypted with AES-256-GCM; checkers receive only match or no match, never the account number, and checks are rate-limited.
  • Report links in email replies are signed with HMAC-SHA256 and expire after 7 days.
  • Each organisation's cases, reports, suppliers and identity records are scoped to that tenant.
  • Raw emails and attachments in R2 expire after 30 days.
  • Sign-in uses magic links by email, with passkeys (WebAuthn) available once you are signed in.

Full data-handling details are on our Privacy and POPIA page.

Found a vulnerability?

Please report security issues privately through GitHub Security Advisories or by email to hello@isitlegit.co.za rather than a public issue, so we can fix the problem before details are public. We confirm receipt and who is handling your report within 3 working days, and credit reporters who want to be named once the fix is live.

In scope: the Worker, the report and verify pages, the mail intake pipeline, the walkthrough containment, and the tenant and bank-verification boundaries.

If you do not use GitHub, email hello@isitlegit.co.za directly.