Publishing a disclosure channel before you need one
Researchers who cannot find a contact either post publicly or move on. A valid security.txt is the cheapest incident-preparedness step available.
Validates web security.txt policy files against the IETF RFC 9116 specification.
—Validates web security.txt policy files against the IETF RFC 9116 specification.
Contact: mailto:security@example.com\nExpires: 2027-01-01T00:00:00.000Z
Status: VALID RFC 9116 · Contact Directives: 1 · Expiration: in 137 days
Requires RFC 3339 timestamp format for Expires.
Verification that your organization's vulnerability disclosure policy meets international standards.
Your input is sent to YAS infrastructure because the tool requires server-side processing or public network queries. Input is not stored.
curl -X POST "https://yas.sh/api/v1/tools/security-txt-validator" \
-H "Content-Type: application/json" \
-d '{"input":"Contact: mailto:security@example.com\nExpires: 2027-01-01T00:00:00Z"}'const res = await fetch("https://yas.sh/api/v1/tools/security-txt-validator", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"input": "Contact: mailto:security@example.com\nExpires: 2027-01-01T00:00:00Z"
}),
});
const data = await res.json();import requests
r = requests.post("https://yas.sh/api/v1/tools/security-txt-validator", json={"input":"Contact: mailto:security@example.com\nExpires: 2027-01-01T00:00:00Z"})
data = r.json()| Field | Type | Required | Description |
|---|---|---|---|
| input | string | Yes | security.txt content |
{ "slug": "security-txt-validator", "valid": true, "totalDirectives": 2 }Validate RFC 9116 security.txt files for contact and expiration.
400 VALIDATION_ERROR — invalid input or unsupported option.413 PAYLOAD_TOO_LARGE — input exceeds the 64 KB limit.429 RATE_LIMIT_EXCEEDED — rate limit exceeded (60 req/min).RFC 9116 defines a plain-text file at /.well-known/security.txt listing how to report a vulnerability. The parser checks the required fields — at least one Contact and exactly one Expires — plus optional Encryption, Acknowledgments, Preferred-Languages, Canonical, Policy and Hiring fields. Expires must be an ISO 8601 timestamp in the future; a past date means the file is formally stale and should not be trusted.
The specification is strict in ways that trip people up. Field names are case-insensitive but values are not, Contact values must be URIs (mailto:, tel: or https:), the file must be served over HTTPS with a text/plain content type, and if the file is signed the Canonical field must match the URL it is served from.
Researchers who cannot find a contact either post publicly or move on. A valid security.txt is the cheapest incident-preparedness step available.
Confirming the contact and preferred languages before writing a report avoids sending sensitive details to an unmonitored address.
Organisations with many properties routinely have a valid file on the flagship domain and nothing anywhere else.
The Expires field exists so stale files are detectable. Validating on a schedule is how you notice before a researcher does.
What this tool deliberately does not do, and where it will disagree with other implementations.