Skip to content

Archive

Web Security

130 articles
Cybersecurity 14 Sep 2026 7 min read

HTTP Request Framing Must Agree Across Every Hop

A reverse proxy can accept a byte sequence as one HTTP request while the application server behind it interprets part of the same sequence as the start of another. Neither component needs to contain a memory-safety defect. The security failure sits in the disagreement between their parsers. This is the central condition behind HTTP request smuggling. Modern web traffic commonly crosses several HTTP-speaking components before reaching application code: CDNs, load balancers, API gateways, service meshes, reverse proxies, and origin servers. Each hop has to determine where one request ends and the next begins. If two adjacent components derive different boundaries from the same traffic, bytes assigned to one request at the front end can acquire a different meaning downstream.

Cybersecurity 14 Sep 2026 7 min read

HSTS Moves HTTPS Policy Into the User Agent

HSTS Moves HTTPS Policy Into the User Agent An HTTPS site can have a valid certificate, modern TLS settings, and a permanent redirect from HTTP, yet still expose a narrow transport-security gap before that redirect is received. If a browser begins with a plain HTTP request, the server has no opportunity to protect that request until it arrives. An attacker able to alter traffic on that path can interfere before TLS is established.

Cybersecurity 14 Sep 2026 7 min read

CORS Policy Is an Authorization Boundary Between Browser Origins

A cross-origin API request can reach its destination, execute application code, and produce a valid response even when the browser refuses to expose that response to JavaScript. That distinction is central to Cross-Origin Resource Sharing, yet it is often blurred by configurations that treat CORS as a connectivity switch. CORS is a browser-enforced extension to the same-origin model. It gives a server a way to state which external origins may access selected responses from browser script. The server still owns authentication and authorization for the underlying resource. CORS controls an additional boundary: whether code running under another web origin may receive the response through browser APIs.

Cybersecurity 14 Sep 2026 7 min read

Cache Keys Define the Security Boundary of Shared Responses

A reverse proxy can receive two requests that look different to an application and identical to its cache. That disagreement is enough to turn an ordinary performance feature into a cross-user security boundary. Shared HTTP caches are built around equivalence. A cache key decides which requests may reuse the same stored response. The origin application makes a separate decision about which request properties influence its output. Security problems appear when those two models diverge: the origin varies a response on data that the cache does not include in its identity for that response.

Cybersecurity 13 Sep 2026 9 min read

WebSocket Upgrades Need Their Own Origin Policy

WebSocket Upgrades Need Their Own Origin Policy A WebSocket endpoint can sit behind the same hostname, TLS certificate, session cookie, and reverse proxy as an ordinary web application while obeying a different browser security model. The connection begins as HTTP, but once the upgrade succeeds, the familiar request-response controls around application endpoints no longer describe the full security boundary. That gap matters most when a browser automatically attaches credentials to the handshake. A hostile site may be able to initiate a WebSocket connection toward another origin. If the target service accepts the upgrade based only on a valid session cookie, the attacker’s page can gain a bidirectional channel operating with the victim’s authority. The browser’s same-origin restrictions on reading ordinary cross-origin HTTP responses do not provide the same protection for WebSocket traffic.

Cybersecurity 13 Sep 2026 6 min read

Session Rotation Keeps Authentication From Inheriting an Attacker Chosen Identifier

A login can validate every credential correctly and still leave the resulting account exposed if the application keeps the same session identifier that existed before authentication. The defect is not in password checking or cryptography. It is in the transition from an anonymous browser state to an authenticated one. That transition matters because pre-authentication sessions are often easy to obtain. Applications create them for shopping carts, locale preferences, anti-abuse state, or ordinary framework bookkeeping. If an attacker can arrange for a victim to use an identifier already known to the attacker, and successful login preserves that identifier, the attacker can later present the same value and inherit the authenticated session.

Cybersecurity 13 Sep 2026 8 min read

Session Rotation Closes a Quiet Authentication Gap

A browser can arrive at a sign-in page with a session identifier that already existed before any credentials were presented. That is normal. Shopping carts, anti-abuse state, language preferences, and pre-authentication workflows often need server-side continuity. The security problem appears when successful authentication upgrades that same identifier instead of replacing it. At that moment, a token created for anonymous state becomes a bearer credential for an authenticated account. If another party already knows or controls the identifier, the login has upgraded their copy too. This is the essential shape of session fixation: the attacker does not need to steal a fresh authenticated session if the application can be persuaded to authenticate a session the attacker already possesses.

Cybersecurity 13 Sep 2026 6 min read

Server-Side Fetchers Expand the Network Trust Boundary

A feature that accepts a URL often looks less privileged than it is. An image importer, webhook validator, document previewer, link unfurler, or integration tester may perform only an outbound HTTP request, yet that request originates from infrastructure with a network position the remote caller does not possess. That difference is the core security issue in server-side request forgery, commonly shortened to SSRF. The application is not merely processing attacker-influenced text. It is acting as a network client on behalf of that input, potentially carrying access to private address space, local services, cloud control interfaces, or endpoints protected mainly by topology.

Cybersecurity 13 Sep 2026 8 min read

HTTP Request Smuggling Begins With Parser Disagreement

HTTP Request Smuggling Begins With Parser Disagreement A reverse proxy can reject malicious paths, normalize headers, enforce authentication, and still pass an ambiguous HTTP message to a backend that interprets the same bytes differently. At that point, the security boundary is no longer defined by either component in isolation. It is defined by the gap between their parsers. HTTP request smuggling exploits that gap. The attacker is not primarily defeating TLS or guessing a credential. The useful primitive is message-boundary disagreement: one system decides that a request ends at one byte, while the next system decides that it ends somewhere else. Bytes treated as a body by the front end can become the start of another request at the origin, or the reverse can occur.

Cybersecurity 13 Sep 2026 7 min read

HTTP Request Boundaries Fail When Intermediaries Disagree

A front-end proxy can accept a byte stream as one HTTP request while the server behind it interprets part of the same stream as the beginning of another. At that point, the disagreement is no longer a parsing curiosity. Bytes supplied by one connection can change how a later request is framed, creating a route around controls that assumed every component agreed on request boundaries. HTTP request smuggling sits in this gap between parsers. The vulnerable condition is not simply the presence of a Content-Length or Transfer-Encoding header. It is a chain in which two adjacent HTTP implementations assign different structure to the same traffic, then reuse a connection or otherwise preserve enough state for the disagreement to affect subsequent processing.

Cybersecurity 13 Sep 2026 7 min read

Host Header Trust Can Turn Application URLs Into Attacker Input

A web application can serve the correct page, validate the correct account, and still emit a security-sensitive link pointing at a domain controlled by somebody else. The failure often begins with a value that looks operational rather than privileged: the HTTP host presented with the request. Modern deployments make host handling deceptively complex. A browser sends authority information, an edge proxy may rewrite it, another proxy may add a forwarding header, and the application framework eventually exposes a convenient property representing the apparent host. That property is useful for routing and URL generation. It is dangerous when the application treats it as an authenticated statement about its own public identity.

Cybersecurity 13 Sep 2026 8 min read

DNS Rebinding Turns Browser Reachability Into a Security Boundary

A service bound to a private address often feels insulated from the public web. An administrative panel on a home router, a development daemon on a laptop, or an internal HTTP endpoint may have no public route at all. Yet a browser on the same network can often reach it, and that browser also processes content from arbitrary public sites. DNS rebinding exploits the seam between those facts. A hostile site can use a domain it controls, arrange for that name to resolve to different addresses over time, and attempt to make browser requests under one web origin reach a service that was never intended to receive traffic from public content.

Cybersecurity 13 Sep 2026 6 min read

DNS Rebinding Crosses the Browser Network Boundary

A browser tab can begin its life talking to a public server and, moments later, send requests under the same hostname to a device on a private network. No browser exploit is required for that transition. DNS can supply the change. That property sits at the center of DNS rebinding. The attack is easy to reduce to a slogan about DNS answers changing, but the security consequence comes from a deeper mismatch. Browsers identify web origins primarily through scheme, host, and port. Network services often make trust decisions from the destination address, interface, or apparent local reachability. Rebinding creates a point where those two models no longer describe the same security boundary.

Cybersecurity 13 Sep 2026 7 min read

Content Security Policy Turns Script Trust Into an Explicit Boundary

A web application can escape database queries correctly, authenticate every API request, and still hand an attacker code execution in the browser through one unsafe rendering path. The browser is unusually permissive by design: HTML can load scripts from remote origins, inline blocks can execute code, and dynamic DOM operations can turn strings into active content. Content Security Policy, or CSP, gives an application a second control plane for that execution environment.

Cybersecurity 13 Sep 2026 8 min read

Cache Keys Define a Security Boundary at Shared Proxies

A reverse proxy can receive two HTTP requests that look equivalent to its cache while the application behind it treats them as different. That disagreement is more than a performance bug. If an attacker can place a response generated from one request variant into a shared cache entry used by other clients, a request that originally affected one connection can acquire a much larger audience. This is the core security tension in web cache poisoning. The cache key defines which requests are considered interchangeable. The origin application defines which request properties can alter a response. Security depends on those two models staying aligned across proxies, frameworks, routing rules, and application code.

Cybersecurity 13 Sep 2026 7 min read

Cache Keys Are Security Boundaries at the HTTP Edge

Cache Keys Are Security Boundaries at the HTTP Edge A reverse proxy can receive two requests that an application considers different and still treat them as the same cache entry. That gap is enough to turn a response intended for one request context into a response served to many others. The issue is not caching in isolation. It is disagreement about identity. Applications make decisions from headers, query parameters, cookies, paths, host information, and sometimes values added by upstream infrastructure. A shared cache uses a smaller set of inputs to decide whether a stored response matches a later request. If an input changes application behavior but does not participate in the cache key, that input crosses a security boundary without being represented in cache identity.

Cybersecurity 12 Sep 2026 8 min read

Use CSP Nonces to Restrict Executable Scripts

Cross-site scripting becomes dangerous when attacker-controlled text reaches a browser in a form that the browser can execute. Context-aware output encoding and safe DOM APIs remain primary defenses because they stop data from becoming executable markup. A Content Security Policy can add another boundary: even if an injection flaw creates a script element, the browser can refuse to execute it unless the page explicitly grants that script permission. A nonce-based policy is a practical way to express that permission for server-rendered pages. The server creates an unpredictable value for one HTTP response, places it in the Content-Security-Policy header, and attaches the same value to script elements that the application intends to execute. A script inserted through an injection flaw does not possess the value and is blocked.

Cybersecurity 12 Sep 2026 8 min read

Reject Ambiguous HTTP Message Framing

Modern web requests often cross several HTTP-speaking components before reaching application code. A request may pass through a CDN, load balancer, reverse proxy, API gateway, service mesh, and application server. Each component must agree on exactly where one request ends and the next begins. If two components interpret message boundaries differently, bytes that one component treats as part of a request can become a second request for another component. This parser disagreement is the foundation of HTTP request smuggling.

Cybersecurity 12 Sep 2026 6 min read

Pin JWT Verification Algorithms

A JSON Web Token can carry an alg header that names a signing algorithm. That field describes the token, but it must not control the verifier’s security policy. An attacker can edit untrusted token bytes before verification, including header fields. The safe model is: the application chooses acceptable algorithms and keys from trusted configuration, then checks whether the token fits that policy. Put policy outside the token Suppose an API expects tokens signed with RS256. Its verifier should be configured for RS256 and the issuer’s trusted public key. It should not inspect alg and dynamically choose any cryptographic routine the token requests.

Cybersecurity 12 Sep 2026 7 min read

OAuth Redirect Security Depends on Transaction Binding

OAuth Redirect Security Depends on Transaction Binding An OAuth callback can arrive over HTTPS, carry a valid authorization code, and still belong to the wrong transaction. That is the uncomfortable property of redirect-based authorization: transport protection can establish who served each endpoint, but it does not by itself prove that a response belongs to the browser session, client instance, authorization server, and callback context that initiated the exchange. The modern authorization code flow addresses this with several bindings rather than a single defensive parameter. Exact redirect URI matching constrains the destination. PKCE binds an authorization code to a verifier held by the client. CSRF protections bind the browser-facing response to the initiating transaction. Issuer identification matters when one client talks to more than one authorization server.

Cybersecurity 12 Sep 2026 8 min read

HTTP Request Boundaries Must Survive Every Parser

A reverse proxy can reject a request as malformed and still leave a dangerous assumption intact: that every other HTTP parser in the path would have found the same message boundary. Modern web stacks routinely place a CDN, load balancer, gateway, service proxy, framework server, and application logic between a client and the code that handles a request. A single connection can therefore pass through several independent implementations of HTTP framing.

Cybersecurity 12 Sep 2026 7 min read

Enforce HTTPS with HSTS

TLS protects an HTTP connection after the browser starts HTTPS. A plain HTTP request sent before a redirect is different: it has no TLS protection, so a network attacker can alter the response and prevent the redirect from reaching the browser. HTTP Strict Transport Security (HSTS) gives a site a browser-enforced transport rule. After receiving a valid HSTS policy over HTTPS, a supporting browser remembers that the host must use HTTPS for a defined period. Future HTTP navigation attempts are upgraded locally before an insecure request is sent.

Cybersecurity 12 Sep 2026 6 min read

DNS Rebinding Turns Name Resolution Into a Browser Pivot

DNS Rebinding Turns Name Resolution Into a Browser Pivot A browser tab does not need direct knowledge of a private network to become a useful bridge into it. If an attacker controls a hostname and its DNS answers, the same hostname can first resolve to an attacker-controlled public server and later resolve to an address reachable only from the browser’s network. The page keeps using a familiar origin label while the destination behind that label changes.

Cybersecurity 12 Sep 2026 8 min read

CORS Is a Browser Read Boundary, Not an API Firewall

CORS Is a Browser Read Boundary, Not an API Firewall An API can reject every cross-origin browser response and still receive the underlying requests. That distinction is easy to lose when Cross-Origin Resource Sharing is described as an access-control feature without naming the actor it constrains: browser script. CORS extends the browser’s same-origin model by letting a server state which origins may access selected responses. It does not turn the server into a network firewall, authenticate a caller, or guarantee that a request never reaches application code. A command-line client, backend service, malware process, or custom HTTP stack does not have to enforce browser CORS rules at all.