Skip to content

Instantly share code, notes, and snippets.

@matthiaswenz
Last active April 14, 2021 05:53
Show Gist options
  • Save matthiaswenz/033f40b1b3c50029d2ba260f3ee43204 to your computer and use it in GitHub Desktop.
Save matthiaswenz/033f40b1b3c50029d2ba260f3ee43204 to your computer and use it in GitHub Desktop.
iOS Safari Referrer-Policy verification
// Run with $ node server.js
var http = require('http');
var server = http.createServer(function (req, res) {
referrerPolicy = "strict-origin-when-cross-origin"; // Replace with corresponding test value
res.writeHead(200, { 'Content-Type': 'text/html', 'Referrer-Policy': referrerPolicy });
res.write('<html><body>');
res.write('<h1>Test page</h1>');
res.write('<ul>');
res.write('<li><a href="https://github.com">Cross-origin request</a></li>');
res.write('<li><a href="http://github.com">Cross-origin request (downgrade)</a></li>');
res.write('<li><a href="https://2b273f2cc10b.ngrok.io">Same-origin request</a></li>');
res.write('<li><a href="http://2b273f2cc10b.ngrok.io">Same-origin request (downgrade)</a></li>');
res.write('</ul>');
res.write('</body></html>');
res.end();
});

Test protocol

Findings

Default referrer policy (no header sent):

Interpretation: Seems to default to no-referrer-when-downgrade, not strict-origin-when-cross-origin

no-referrer

  • HTTPS -> HTTPS cross-origin request -> no referrer transmitted
  • HTTPS -> HTTP cross-origin request -> no referrer transmitted
  • HTTPS -> HTTPS same-origin request -> no referrer transmitted
  • HTTPS -> HTTP same-origin request -> no referrer transmitted

Interpretation: expectations met

no-referrer-when-downgrade

origin

origin-when-cross-origin

same-origin

  • HTTPS -> HTTPS cross-origin request -> no referrer transmitted
  • HTTPS -> HTTP cross-origin request -> no referrer transmitted
  • HTTPS -> HTTPS same-origin request -> Referer: https://2b273f2cc10b.ngrok.io/test.html?q=test
  • HTTPS -> HTTP same-origin request -> no referrer transmitted

Interpretation: expectations met

strict-origin

Interpretation: expectations met

strict-origin-when-cross-origin

Interpretation: expectations met

unsafe-url

Interpretation: expectations met

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment