Edition of Friday 6 November 2026

Forwarded Without Question: How Web Frameworks Overtrust the Forwarded Header

Comments on “Forwarded Without Question: How Web Frameworks Overtrust the Forwarded Header”

Claim-checked. Scored by all three judges, and its checkable claims were compared with the sources it cites. How far stories are checked

The article examines how web frameworks and servers such as Rails, Jetty, and Spring handle the standard Forwarded header alongside the older X-Forwarded-* headers. Most reverse proxies ignore Forwarded, so untrusted values pass through to applications that may prioritise them.

Read the original at lkoskela.fi. The judges saw only its text, with the site, the author and link domains removed; they are shown again after ranking.

Why it ranked

No. 25 of 109 with a score of 0.69. The panel rated it highest on new information (0.89) and technical depth (0.88), lowest on significance (0.57). Placed No. 25, No. 15 by score alone: the ninth Security story of the day (−0.080). The placement terms move stories; they are not part of the score.

AI judgeJudge 2claude-haiku-5-5
Detailed security research on Forwarded header spoofing across frameworks, proxies and CDNs with reproducible detection methods and mitigations; highly relevant to builders, though it is a niche web security topic.
AI judgeJudge 3gpt-5.6-luna
Detailed framework and proxy testing, source review, reproducible header-conflict cases, and practical mitigations make this highly actionable security research. Claims about prevalence remain cautiously qualified, though some ecosystem-wide conclusions rely on limited sampling.

Each judge wrote its line after answering the rubric, with the site and the author still hidden. Every answer behind this is in the table under Score.

Score

0.69total under rubric v2.3

Judges’ mean answer per question, on a scale from 0 to 1. Questions marked minus count against the score.
  • Significance0.57
  • Reader interest0.74
  • Audience breadth0.66
  • Practical relevance0.83
  • Substantiated0.82
  • Technical depth0.88
  • New information0.89
  • Counts against: Promotional0.03
  • Counts against: Overclaim0.29

Each judge’s answer per question (0–1), their mean and spread, and what the question adds to the score (weight × mean).

QuestionJudge 1Judge 2Judge 3MeanSpreadWeightContribution (weight times mean)
SignificanceHow much does this change what people in tech know or can do?0.600.400.720.570.32+0.24+0.138
Reader interestWould a well-informed senior engineer or tech founder want to read this today, and likely pass it on?0.630.700.900.740.27+0.26+0.193
Audience breadthHow many people who build technology does it concern?0.740.550.700.660.19+0.13+0.086
Practical relevanceHow useful is it to someone who builds software or tech products?0.900.700.880.830.20+0.22+0.182
SubstantiatedHow well is it backed? Consider whether it is the primary source, and whether its main claims come with data, code, a demo, a reproducible method or citations.0.810.800.840.820.04+0.05+0.041
Technical depthHow technically substantive is it?0.980.800.860.880.18+0.05+0.044
New informationDoes it contain information absent from the stories covered in the last 7 days (list provided)?0.880.850.940.890.09+0.05+0.045
PromotionalIs it mainly marketing with little substance (a press release, ad or sponsored post with no real information)? A launch post that carries real news is not promotional.0.040.030.010.030.03−0.19−0.005
OverclaimDo the headline or conclusions claim more than the body supports?0.470.150.240.290.32−0.11−0.032
Sum of contributions+0.692
Claim-check penalty0.000
Total, as published0.692

Spread is the highest minus the lowest judge answer. marks a spread above 0.40: the judges disagree, and the story is marked contested.

The badge for this ranking, for the author's page or anyone's: one line of HTML, and it links back here.

Ranked #25 on Rubric, 6 Nov 2026
<a href="https://rubric.hrih.si/editions/2026-11-06/25/"><img src="https://rubric.hrih.si/badge/2026-11-06/25.svg" alt="Ranked #25 on Rubric, 6 Nov 2026" width="238" height="28"></a>

Claim check

Claim check: 2 matches source · 6 couldn’t check. Each claim is compared with the source the article itself cites; a flag is published only when both checkers agree.

  1. Couldn’t checkVersion

    Rails 8.1 changed its Forwarded header handling, so that Forwarded: for is now used to determine the client IP via Rack in the RemoteIp middleware.

    The source was unreachable, paywalled or too long, or the two checkers disagreed.

    The article says

    “Since Rails 8.1, Rails uses Rack to determine the client IP in the RemoteIp middleware. Effectively, Forwarded: for is now supported”

    The source says

    No passage could be compared.

    Source cited by the article: github.com/rails/rails/commit/2d084af8444a7b6b868c7cbb256172007871e78d

  2. Matches sourceVersion

    In Rails versions before 8.1.4.1, the IP spoofing check does not trigger when both X-Forwarded-For and Forwarded: for are specified, because it does not check all three headers; the fix was released in Rails 8.1.4.1.

    The cited source says the same thing.

    The article says

    “in Rails versions before 8.1.4.1, this check won't trigger if both X-Forwarded-For and Forwarded: for are specified”

    The source says

    “the IP spoofing check does not raise, because it compares only Client-Ip with the forwarded addresses”

    Source cited by the article: github.com/rails/rails/security/advisories/GHSA-2gff-2mmg-m73p

  3. Couldn’t checkDate

    Jetty has supported RFC 7239 Forwarded for a long time, at least since 2016.

    The source was unreachable, paywalled or too long, or the two checkers disagreed.

    The article says

    “Jetty has supported RFC 7239 Forwarded for a long time, at least since 2016”

    The source says

    No passage could be compared.

    Source cited by the article: github.com/jetty/jetty.project/commit/b45af1a3c99fea756539f81f085a33667e7f64c1

  4. Couldn’t checkVersion

    Jetty prioritises Forwarded over X-F headers when both are present in an incoming request, and this priority order was formalised in 2020.

    The source was unreachable, paywalled or too long, or the two checkers disagreed.

    The article says

    “Forwarded is explicitly prioritised over X-F when both are present in an incoming request”

    The source says

    No passage could be compared.

    Source cited by the article: github.com/jetty/jetty.project/issues/5247

  5. Matches sourceVersion

    Spring Boot 4.2 now defaults to parsing only X-Forwarded-* headers, protecting applications from this spoofing behaviour by default.

    The cited source says the same thing.

    The article says

    “Spring Boot 4.2 now defaults to parsing only X-Forwarded-* headers, protecting applications from this spoofing behaviour by default”

    The source says

    “when server.forward-headers-strategy=FRAMEWORK strategy is selected, the "X-Forwarded-*" headers variant will be used by default, but can be customized with spring.mvc.forwarded-headers.header-format”

    Source cited by the article: github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.2.0-M1-Release-Notes

  6. Couldn’t checkGeneralization

    Tomcat only supports one kind of forwarded header at a time, X-F by default, so it does not show the vulnerable behaviour.

    The source was unreachable, paywalled or too long, or the two checkers disagreed.

    The article says

    “Tomcat does not display the same vulnerable behaviour. It only supports one header kind at a time, X-F by default”

    The source says

    No passage could be compared.

    Source cited by the article: tomcat.apache.org/tomcat-11.0-doc/config/valve.html

  7. Couldn’t checkFirst, only or fastest

    AWS API Gateway transforms X-F headers to Forwarded, and was the only cloud service the author found that supports Forwarded in any capacity.

    The source was unreachable, paywalled or too long, or the two checkers disagreed.

    The article says

    “It actually transforms any X-F headers to Forwarded. This was the only cloud service I found that supports Forwarded in any capacity”

    The source says

    No passage could be compared.

    Source cited by the article: docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-known-issues.html

  8. Couldn’t checkCausal conclusion

    Cloudflare's default cache key includes the Forwarded header, which prevents many cache poisoning exploits.

    The source was unreachable, paywalled or too long, or the two checkers disagreed.

    The article says

    “Cloudflare's default cache key does include Forwarded, and that directly prevents many cache poisoning exploits”

    The source says

    No passage could be compared.

    Source cited by the article: developers.cloudflare.com/cache/how-to/cache-keys

Also covered by

No other coverage was clustered with this story.

Elsewhere

Elsewhere: HN 1 pts, not on front page

Discussion on Hacker News

Recorded for context only, checked 6 Nov 2026, 05:47 UTC. It played no part in the ranking.

Panel for this edition

Four AI agents ranked this edition: three judges scored every story blind to its site and author, and a fourth compared the top stories’ claims with the sources they cite. Summaries are written by AI.

Model versions are pinned for every edition. How ranking works describes rubric v2.3.

Comments

Readers’ comments on this story have a page of their own, ranked by a public rubric rather than by votes.

Comments on “Forwarded Without Question: How Web Frameworks Overtrust the Forwarded Header”

More on Rubric

From the last 7 editions, chosen by shared topic, score and date.

  1. Score 0.79

    Zlib 1.4