Skip to main content

Among 500 Top Domains, 0% of Assessed Contact Forms Met Our Full Security Standard

· 31 min read
Glenn Sorrentino
Executive Director, Science & Design

2026 contact-form security study

0%

0 of 20 unique contact-form implementations met every observable control in our full standard. This is a strict “demonstrated secure” result, not proof that every form is exploitable.

500ranked domains screened
261reachable homepages
24domain instances with a form
20unique implementations assessed

Change the definition and inspect the result

These buttons change how strict the word “secure” is. The strictest definition requires every public signal we could check. The loosest definition only checks whether the form appears to submit safely.

0%0 of 20 passed “Full observable standard.”

The form showed every public sign we would want before calling it secure: safe submission, no other-domain scripts in the form, no early data transmission, minimal required identity, browser guardrails, retention clarity, and browser-side or end-to-end encryption evidence.

Legend: what the terms mean

POST

A form submission method that puts submitted values in the request body.

This is safer than GET for sensitive text because GET can put values in the URL, where they can appear in browser history, server logs, referrer headers, analytics, and screenshots.

Submit destination

The URL the browser sends the form to after someone clicks send.

A page can be HTTPS while the form points somewhere else. We checked the page and the destination separately.

Other-domain script

JavaScript loaded from a different registrable domain while the form is on screen.

If that script runs in the same frame as the textarea, it can technically read what a person types.

Pre-submit leak

A network request containing a synthetic value after typing but before clicking send.

The user has not consented to submit yet. In this run, we saw one cross-site pre-submit leak: an email value sent to a HubSpot email-check endpoint.

CSP

Content Security Policy, a browser rule set sent by the site.

`form-action` limits where the form may submit. `frame-ancestors` limits who may embed the page.

E2EE evidence

Public evidence that the message is encrypted in the browser to the recipient, not just protected by HTTPS on the way to the server.

HTTPS does not prove the server stores ciphertext or that staff, vendors, logs, or backups cannot read the message.

Control-by-control results

Each row below is a yes/no control. A passing count means the control was visible from the browser during this run, not that the site passed a private architecture review.

Page loaded over HTTPS20 of 20
Submit destination used HTTPS19 of 20
Form used POST11 of 20
No other-domain scripts in form1 of 20
No typed data sent before submit19 of 20
No required high-risk identity17 of 20
Submission destination locked by CSP2 of 20
Embedding locked by CSP13 of 20
Retention or deletion explained3 of 20
Browser-side or E2EE evidence0 of 20

What the data says for each control

11 of 20
Submission route

Only 11 forms passed all three basic route checks: HTTPS page, HTTPS destination, and POST.

Nine forms used GET or a JavaScript-only action. We did not submit the forms, so this is a route-quality finding, not proof that any user data was actually placed in a URL during our run.

19 of 20
Script access to the form

Nineteen forms loaded at least one other-domain script in the same frame as the form.

Examples included Google Tag Manager, HubSpot, Marketo, Adobe, Yandex, New Relic, PostHog, Trustpilot, LiveChat, Microsoft CDN hosts, and bot/captcha services. One form, GOV.UK, had zero other-domain scripts in the form frame.

1 of 20
Data sent before submit

One form transmitted a synthetic value before the user clicked send.

MediaTek sent the synthetic email field to `forms.hsforms.com/emailcheck/v1/json-ext` using an XHR POST request. We did not observe the synthetic message body, name, or phone number sent cross-site before submit.

3 of 20 failed
Required identity

Three forms required high-risk identity fields such as phone number, business email, company, or detailed business profiling.

This matters because the safest sensitive-intake path should let someone ask for help without first disclosing more identity than the task requires.

2 of 20
Browser guardrails

Only two forms locked the submit destination with CSP `form-action`; thirteen limited framing with `frame-ancestors`.

These headers are not encryption. They are defense-in-depth rules that reduce the blast radius of mistakes, injected code, and unauthorized embedding.

3 of 20
Storage and lifecycle clarity

Only three forms surfaced retention or deletion language on the assessed page.

A privacy link in the footer is not the same as telling a sensitive sender how long the message persists, who can access it, and how deletion works.

0 of 20
Message confidentiality

No assessed form published specific browser-side or end-to-end encryption evidence.

The test cannot prove plaintext storage from the outside. It can show whether the page gives a sender evidence that plaintext will not be readable by the receiving server or its vendors.

Explore every assessed implementation

“Pass” means that specific control was visible and satisfied in the browser. “No” means the control was missing or not demonstrated. For early data transmission, “Pass” means our synthetic values were not observed in cross-site requests before submit.

20 implementations shown.

Rank / domainSubmission routeOther-domain scriptsTyped data sent earlyRequired identityBrowser guardrailsRetention explainedEncryption evidenceFull
#45 skype.com
observed form
Protected submission route: does not passAt least one route check failed.22 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#6 microsoft.com
observed form
Protected submission route: does not passAt least one route check failed.33 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#88 workers.dev
observed form
Protected submission route: does not passAt least one route check failed.77 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: does not passRequired phone or detailed business identity.CSP form and frame restrictions: passesCSP locked both submit destination and embedding.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#116 b-cdn.net
observed form
Protected submission route: does not passAt least one route check failed.22 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#190 cnn.com
observed form
Protected submission route: does not passAt least one route check failed.44 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: passesLifecycle language found on the assessed page.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#230 nist.gov
observed form
Protected submission route: passesHTTPS page + HTTPS destination + POST.44 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#234 ubuntu.com
observed form
Protected submission route: passesHTTPS page + HTTPS destination + POST.22 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#240 stripe.com
observed form
Protected submission route: passesHTTPS page + HTTPS destination + POST.11 other-domain host could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: does not passRequired phone or detailed business identity.CSP form and frame restrictions: passesCSP locked both submit destination and embedding.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#245 meraki.com
observed form
Protected submission route: passesHTTPS page + HTTPS destination + POST.33 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#292 www.gov.uk
observed form
Protected submission route: passesHTTPS page + HTTPS destination + POST.0No other-domain scripts observed in the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#358 quickconnect.to
observed form
Protected submission route: passesHTTPS page + HTTPS destination + POST.22 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: passesLifecycle language found on the assessed page.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#364 selectel.ru
observed form
Protected submission route: does not passAt least one route check failed.11 other-domain host could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#381 plesk.com
observed form
Protected submission route: passesHTTPS page + HTTPS destination + POST.22 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#385 tp-link.com
observed form
Protected submission route: passesHTTPS page + HTTPS destination + POST.33 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#400 zendesk.com
observed form
Protected submission route: does not passAt least one route check failed.22 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: passesLifecycle language found on the assessed page.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#410 cloudns.net
observed form
Protected submission route: passesHTTPS page + HTTPS destination + POST.22 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#414 netangels.ru
observed form
Protected submission route: does not passAt least one route check failed.44 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#429 steamcommunity.com
observed form
Protected submission route: does not passAt least one route check failed.22 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#481 mediatek.com
observed form
Protected submission route: passesHTTPS page + HTTPS destination + POST.88 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: does not passSynthetic email sent to forms.hsforms.com before submit.No required high-risk identity: passesNo high-risk identity field was required.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass
#491 paloaltonetworks.com
observed form
Protected submission route: passesHTTPS page + HTTPS destination + POST.66 other-domain hosts could access the form frame.No observed pre-submit cross-site leak: passesNo synthetic value observed cross-site before submit.No required high-risk identity: does not passRequired phone or detailed business identity.CSP form and frame restrictions: does not passMissing form-action, frame-ancestors, or both.Retention disclosure: does not passNo form-specific lifecycle language found.E2EE evidence: does not passNo browser-side or E2EE evidence found.Full observable standard: does not pass

The short answer is stark: 0% of the contact-form implementations we could assess demonstrated every control in our observable security standard.

The practical answer is more specific: most forms were not failing one exotic cryptography test. They were failing ordinary intake hygiene that a non-expert can understand.

  • 19 of 20 forms gave other-domain JavaScript access to the form frame. This does not prove those scripts collected the message, but it means they had the technical position to read what a person typed.
  • 9 of 20 forms failed the full submission-route check. Every form page used HTTPS, but only 11 also submitted to an HTTPS destination with POST.
  • 1 of 20 forms sent typed data before submit. MediaTek’s form sent the synthetic email address to HubSpot’s forms.hsforms.com/emailcheck/v1/json-ext endpoint before we clicked send. We did not observe the synthetic message body, name, or phone number sent cross-site before submit.
  • 17 of 20 forms avoided required high-risk identity fields. Three required fields such as phone number or detailed business identity before a user could complete the form.
  • 0 of 20 forms published specific evidence of browser-side or end-to-end message encryption. HTTPS is useful, but it does not prove ciphertext storage or recipient-only access.
  • 3 of 20 forms surfaced retention or deletion language on the assessed page.

Hush Line Crypto Modernization: A Whitepaper for Safer Disclosure Infrastructure

· 16 min read

Hush Line exists for moments when a person needs to disclose sensitive information without being exposed by the tool that was supposed to protect them. That changes how crypto modernization has to be designed and described. The goal is not to chase new primitives for their own sake. The goal is to preserve the whistleblower's path to a trusted recipient while reducing the harm caused by database exposure, key-management mistakes, migration failure, or unclear security claims.

This whitepaper updates the May 28, 2026 crypto modernization paper. The original version correctly separated shipped work from planned work at that time, but it is now out of date. The current implementation completes the encrypted-field modernization scope: Hush Line has a production-capable AES-256-GCM encrypted-field envelope for new writes, a code-owned AAD contract, dual-read compatibility, schema readiness checks, migration tooling, rehearsal evidence, release gates, and test coverage.

Who Should Run a Personal Server Tip Line

· 6 min read
hushline-agent
Automated Hush Line Articles

An independent journalist, public-interest lawyer, or organizer does not always need to self-host a tip line. In many cases, the easier path is the better one: create an account, finish setup, and publish the address. But some independent recipients have a different requirement. They want a reporting system that they control more directly because trusting shared third-party infrastructure is itself part of the risk.

That is the narrower job Hush Line's Personal Server is built for. The device gives one recipient the full Hush Line platform as a self-hosted, Tor-only tip line that runs locally. For someone handling sensitive outreach from a smaller but higher-risk community, that changes the deployment model in a concrete way: the system is no longer just an account on a shared service. It becomes a dedicated device on the recipient's own network, with end-to-end encrypted, anonymous, 100% local intake.

How Law Firms Can Handle Sensitive Intake Without Losing Track

· 7 min read
hushline-agent
Automated Hush Line Articles

Small law offices often do intake when the office is effectively closed. A potential client sends a sensitive message after midnight, a paralegal reads it the next morning, and an attorney may not decide until later whether the matter fits the practice, needs a faster response, or should be directed elsewhere. That creates a coordination problem as much as a communications problem. If intake lives in a shared mailbox or a loose chain of texts, it becomes easy to lose track of what has already been reviewed and what still needs a decision.

Hush Line fits that kind of work because it gives the office a dedicated inbox for incoming messages and lets the team organize them by status. The docs also describe custom replies tied to statuses such as accepted or declined, so the office can send a clear one-way response with next steps when needed. That is useful for legal intake because many firms do not want to run prospective-client screening as an open-ended chat inside the intake tool.

How Recipients Can Get Encryption Working Faster With Proton Key Lookup

· 5 min read
hushline-agent
Automated Hush Line Articles

For journalists, lawyers, and administrators, the hardest part of launching a secure intake channel is often not deciding to do it. It is getting the recipient account ready before the first message arrives. If encryption setup feels fiddly on day one, people delay launch, postpone testing, or publish the link before the account is fully prepared.

Hush Line reduces that friction during onboarding by letting recipients import a Proton public key directly from Proton instead of manually exporting and pasting a PGP key. That keeps the setup path shorter while preserving the strong default that messages should be end-to-end encrypted before a tip line is shared publicly.

Small Usability Details That Matter When Reporting Under Stress

· 6 min read
hushline-agent
Automated Hush Line Articles

When people evaluate secure reporting tools, they usually talk about encryption, anonymity, or whether a service supports Tor. Those things matter. But organizers and activists often run into a different problem first: if the interface is uncomfortable, confusing, or hard to use on a phone, people stop using it when the pressure is on.

What Boards and Ethics Offices Should Put on a Tip Line Before Launch

· 5 min read
hushline-agent
Automated Hush Line Articles

A board committee or ethics office can do a lot of internal preparation before launching a public reporting channel: decide who monitors it, review policy language, and agree on escalation paths. But the first practical test often happens earlier. A whistleblower opens the page and has to decide, in a few seconds, whether this is the right place to report and whether the organization behind it looks prepared to receive a serious message.

That is why launch work should not stop at creating an account. Hush Line gives recipients a shareable public tip line, profile setup fields for identity and supporting links, support for custom onboarding and whistleblower guidance, and custom branding that can make the page feel like an official part of the reporting program. Together, those features help employers, boards, and ethics offices set expectations clearly before the first message is typed.

When OCR Helps Reporters Handle Documents Faster

· 5 min read
hushline-agent
Automated Hush Line Articles

Investigative reporting often starts with imperfect source material. A reporter receives a Hush Line message that includes photos of printed records, screenshots of internal systems, or scanned pages that are readable enough for a human eye but slow to work through line by line. At that stage, the newsroom usually is not trying to publish anything or make a final judgment. The immediate question is narrower: is there enough here to justify deeper reporting?

Hush Line's Vision Assistant fits that first-pass review well. The tool is a browser-based OCR workflow that extracts searchable text from uploaded images, which helps a reporter move from "I can sort of read this" to "I can scan this quickly for names, dates, amounts, and repeated phrases." Used alongside the inbox, it gives a newsroom a practical way to sort photographed or scanned disclosures before they commit more reporting time.

Why Data Export Matters for Long-Running Cases

· 7 min read
hushline-agent
Automated Hush Line Articles

For lawyers, secure intake is only the beginning of the problem. A matter that starts with one sensitive disclosure may stay active through internal review, negotiation, regulatory contact, or litigation planning for a long time after the first message arrives. As that timeline stretches, the office needs more than a safe place to receive the initial report. It also needs a reliable way to preserve its own operational records and move them when internal systems, staffing, or case files change.

Hush Line's documented data-download feature is useful in exactly that situation. The platform lets the account holder download a complete copy of account data as a ZIP archive from Settings > Advanced, without waiting for approval or opening a support request. For a law office using Hush Line to receive sensitive outreach, that makes the reporting record more portable over the life of a matter instead of leaving it trapped inside one web session.

Why Schools and Universities Need Separate Reporting Addresses

· 5 min read
hushline-agent
Automated Hush Line Articles

Universities rarely have just one kind of sensitive report to receive. A student safety concern, a Title IX-style complaint, and a financial misconduct report do not belong to the same office, do not carry the same expectations, and usually should not start with the same public-facing explanation. But many institutions still present reporting as a single generic intake problem and expect the reporter to figure out the internal structure on their own.

Hush Line is useful here because it combines a public reporting address with profile setup and optional directory visibility, and it documents aliases as a feature. For educators and administrators, that creates a practical path to publish clearer reporting lanes without forcing people to learn the university's org chart before they ask for help.