scanrub
Client-Side Enforcement of Server-Side Securitylow prioritynot yet scanned

Client-Side Enforcement of Server-Side Security

2 min read 14 reports analyzed ScanRub Research
Share

Summary

A security-relevant restriction - a disabled button, a hidden form field, JavaScript validation, a client-side role check - exists only in the browser, with no matching check on the server. The client-side control is trivially bypassed by calling the underlying API directly (with a proxy, curl, or the browser devtools console), at which point the "restriction" simply never existed from the server's point of view.

◈ flow diagram
Security Dec…Client Bypas…Server Trust…Control Bypa…

Why This Requires More Than a Black-Box Scan

Confirming this specific pattern requires comparing what the client-side code appears to restrict against what the server actually enforces when called directly - a judgment call about intent that needs the client-side JavaScript or UI logic to be read and understood first, not just the server's raw HTTP behavior observed in isolation.

Where This Is Actually Caught

Manual testing that reads the client-side code for apparent restrictions, then replays the underlying requests directly with those restrictions removed, is the reliable way to confirm this. A related, narrower slice of the same idea, bypassing access control by manipulating a request's headers, method, or path regardless of what the client-side code intended, is testable in an automated way and often turns up the same underlying gap.

Tip: This is found by intercepting requests with a proxy and directly modifying any value the client is relied on to protect — the finding is confirmed the moment the server accepts a value it should have independently rejected.

Real-World Impact

Real-World Impact

Client-side enforcement of server-side security, tampering with data the client assumes is immutable, and UI elements that misrepresent what's actually happening all share the same root mistake: trusting the client to enforce something only the server can actually guarantee. A price, permission flag, or workflow state that's only checked or displayed client-side can be altered by anyone with browser developer tools or an intercepting proxy, regardless of how the UI presents it.

Content spoofing and UI misrepresentation compound this from the other direction — instead of an attacker bypassing a client-side check, a victim is shown misleading UI (a fake status, an altered display value, spoofed content) that leads them to trust something they shouldn't, which is a phishing-adjacent risk when it's exploited against other users rather than by them.

The underlying lesson across this whole family is the same one security engineering has repeated for decades: the client is not a trusted execution environment, and any security decision enforced only there should be assumed bypassed by a motivated attacker.

Prevention & Remediation

Prevention and Secure Design

Preventing Client-Side Enforcement of Server-Side Security takes a defense-in-depth approach — no single control below is sufficient alone, but together they close off both the primary path and the most common bypasses.

Re-enforce every client-side check server-side. Anything the client validates, restricts, or displays for security purposes needs an equivalent, independent check on the server — the client-side version is a UX convenience, not a control.

Never trust client-supplied state for anything security-relevant. A price, permission flag, or workflow status the client sends back should be re-derived or re-validated server-side, not accepted as sent.

Sign or server-store anything that must stay immutable. Where a value genuinely needs to travel through the client unmodified, sign it (and verify the signature server-side) rather than hoping it isn't tampered with.

Design UI to reflect actual server state, not assumed state. A UI element showing a status or value should be sourced from a live, authoritative check, not a value the client is trusted to maintain correctly on its own.

Test with a proxy that can modify requests freely. Intercept and directly tamper with every client-side-enforced value to confirm the server independently rejects the invalid version.

Frequently Asked Questions

What is Client-Side Enforcement of Server-Side Security?
A security-relevant restriction - a disabled button, a hidden form field, JavaScript validation, a client-side role check - exists only in the browser, with no matching check on the server.
How common is Client-Side Enforcement of Server-Side Security in bug bounty reports?
Scanrub's research corpus for this playbook is built from 14 disclosed HackerOne reports in this category, synthesized for detection and prevention guidance rather than reproduced verbatim.
Can Client-Side Enforcement of Server-Side Security be found with an automated scanner?
Not reliably on its own — this class typically requires the kind of review described in "Where This Is Actually Caught" above (code-level review, fuzzing, red-teaming, or design review, depending on the specific mechanism), rather than an HTTP-level black-box scan.
What is the single most effective fix for Client-Side Enforcement of Server-Side Security?
Re-enforce every client-side check server-side — any security-relevant value the client validates, restricts, or reports back needs an independent server-side check, never trust as sent.
Weekly security research

New vulnerability playbooks, tool updates, and bug bounty insights - delivered to your inbox. No spam.

Unsubscribe anytime. We respect your inbox.
Press ⌘K to search×