Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when reviewing HTTP response headers for privacy hardening on any website that handles authentication, session state, or sensitive URL parameters.
.claude/skills/thedaviddias-referrer-policy/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 39 |
| gemini-3.1-pro-preview | 100% | 2 |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 11% | 0% |
| case-03 | ✓→✓ | = Same ✓ | -2% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 5% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 47% | 0% |
Without a Referrer-Policy, a password reset link like https://example.com/reset?token=abc123 is included in the Referer header when the user clicks an external link on that page — leaking the token to third parties.
Referrer-Policy: strict-origin-when-cross-origin — the recommended modern defaultstrict-origin-when-cross-origin sends the full URL for same-origin requests, only the origin for cross-origin HTTPS, and nothing for HTTPS→HTTPunsafe-url — it sends the full URL including path and query string to every external site<meta> tag, or the referrerpolicy attribute on individual <a> and <img> elementsCheck whether the server sends a Referrer-Policy header and verify the value is appropriate. The recommended value is strict-origin-when-cross-origin. Check for any pages with sensitive URL parameters that could be leaked via the Referer header.
Add Referrer-Policy: strict-origin-when-cross-origin to all HTTP responses. Configure it in your web server, CDN, or application framework. For pages with particularly sensitive URLs, consider no-referrer or same-origin.
Explain what the Referer header contains, how a permissive Referrer-Policy can leak sensitive URL parameters to third parties, and what the difference is between the various Referrer-Policy values.
Review server config, headers, forms, and integration points related to Set a Referrer-Policy header. Flag exact responses, cookies, or browser behaviors that violate the rule, and verify them against the effective production-like response.
For full implementation details, code examples, and framework-specific guidance, see references/rule.md.
Rule page: https://frontendchecklist.io/en/rules/security/referrer-policy
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | pass→pass | 11,643 | 10,804 | -7% | 1 | 1 | 0% | 2,195 | 2,431 | +11% | 0 | 0 | — |
case-03 | pass→pass | 10,637 | 8,083 | -24% | 1 | 1 | 0% | 2,083 | 2,043 | -2% | 0 | 0 | — |
case-01 | pass→pass | 6,871 | 5,066 | -26% | 1 | 1 | 0% | 1,357 | 1,422 | +5% | 0 | 0 | — |
case-04 | pass→pass | 6,453 | 6,082 | -6% | 1 | 1 | 0% | 1,182 | 1,738 | +47% | 0 | 0 | — |
case-05 | pass→pass | 7,533 | 8,209 | +9% | 1 | 1 | 0% | 1,389 | 1,886 | +36% | 0 | 0 | — |
case-06 | pass→pass | 3,209 | 1,833 | -43% | 1 | 1 | 0% | 607 | 754 | +24% | 0 | 0 | — |
case-07 | pass→pass | 8,102 | 6,856 | -15% | 1 | 1 | 0% | 1,483 | 1,844 | +24% | 0 | 0 | — |
case-12 | fail→pass | 6,898 | 7,036 | +2% | 1 | 1 | 0% | 1,291 | 1,855 | +44% | 0 | 0 | — |
case-08 | pass→pass | 6,225 | 4,237 | -32% | 1 | 1 | 0% | 1,211 | 1,274 | +5% | 0 | 0 | — |
case-09 | pass→pass | 6,711 | 4,121 | -39% | 1 | 1 | 0% | 1,249 | 1,261 | +1% | 0 | 0 | — |
case-10 | pass→pass | 4,712 | 3,634 | -23% | 1 | 1 | 0% | 913 | 1,215 | +33% | 0 | 0 | — |
case-11 | pass→pass | 4,559 | 4,060 | -11% | 1 | 1 | 0% | 909 | 1,270 | +40% | 0 | 0 | — |
case-13 | pass→pass | 12,004 | 8,512 | -29% | 1 | 1 | 0% | 2,155 | 2,100 | -3% | 0 | 0 | — |
case-14 | pass→pass | 10,864 | 7,707 | -29% | 1 | 1 | 0% | 2,032 | 1,991 | -2% | 0 | 0 | — |
case-15 | pass→pass | 7,639 | 4,082 | -47% | 1 | 1 | 0% | 1,490 | 1,189 | -20% | 0 | 0 | — |
case-16 | pass→pass | 9,050 | 5,760 | -36% | 1 | 1 | 0% | 1,848 | 1,623 | -12% | 0 | 0 | — |
case-17 | pass→pass | 7,606 | 5,569 | -27% | 1 | 1 | 0% | 1,629 | 1,706 | +5% | 0 | 0 | — |
case-18 | pass→pass | 11,566 | 9,251 | -20% | 1 | 1 | 0% | 2,107 | 2,258 | +7% | 0 | 0 | — |
case-19 | pass→pass | 8,760 | 7,428 | -15% | 1 | 1 | 0% | 1,658 | 1,844 | +11% | 0 | 0 | — |
case-20 | pass→pass | 5,898 | 5,783 | -2% | 1 | 1 | 0% | 1,104 | 1,581 | +43% | 0 | 0 | — |
case-21 | pass→pass | 6,044 | 5,019 | -17% | 1 | 1 | 0% | 1,177 | 1,375 | +17% | 0 | 0 | — |
case-22 | pass→pass | 8,671 | 9,507 | +10% | 1 | 1 | 0% | 1,469 | 2,112 | +44% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +5 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.