FixVibe

// 프로브 / 스포트라이트

CSRF 보호

상태를 바꾸는 엔드포인트가 CSRF 토큰을 요구하지 않으면, 외부 사이트가 사용자처럼 행동할 수 있어요.

What it is

Cross-Site Request Forgery rode high in the OWASP Top 10 for years and then quietly fell off as `SameSite=Lax` became the browser default. The bug isn't dead — it lives on in apps that use `SameSite=None` for cross-domain reasons (embedded widgets, third-party SSO contexts), in legacy session frameworks, in JSON APIs that mistakenly rely on Content-Type to gatekeep, and anywhere a developer thought 'we have auth, that's enough.' The blast radius is full impersonation: every action your app can perform through a logged-in user becomes performable from any other website that user happens to visit while logged in.

How it happens

CSRF appears when state-changing actions rely only on ambient browser credentials. A malicious site can then attempt to make the victim's browser submit actions they did not intend.

What an attacker gets

Forced state changes performed as the victim — money transfer, password change, email-on-file change (precondition for account takeover), account deletion, content posting under their name. In OAuth / SSO contexts, login CSRF lets the attacker bind your account to an identity they control. For SaaS apps, CSRF can trigger billing changes, plan upgrades, or data exports without the user's knowledge.

// what fixvibe reports

What FixVibe reports

Runs in active scans of a domain you have verified you own, on Hobby and above. Each finding shows the affected URL or host, its severity and fix steps you can paste into your AI coding tool.

How to fix it

Set `SameSite=Lax` (or `Strict` for high-value cookies) on every session cookie. Lax defeats the classic form-based CSRF for most cases without breaking normal navigation. For JSON APIs, require a custom header like `X-Requested-With: XMLHttpRequest` or a `X-CSRF-Token` — browsers won't send custom headers on cross-origin form submissions, so this is a strong gate. Use the synchronizer-token pattern for traditional server-rendered forms: include a per-session, per-form random token in the form HTML and verify it on submit. Modern frameworks (Django, Rails, Laravel, ASP.NET, Express with csurf) ship CSRF middleware; turn it on. Never mutate state on GET — turn account-delete-via-link patterns into POST with CSRF protection. Use `__Host-` cookie name prefix (`__Host-session`) to bind the cookie to your origin and forbid attribute downgrades. Audit your endpoints: if a request to a state-changing route succeeds without any of these defenses present, you have a finding.

// 내 앱에서 직접 실행해보세요

FixVibe가 지켜보는 동안 계속 배포하세요.

Verify you own the domain, then run active checks alongside the passive ones.

능동 프로브
138
이 카테고리에서 실행되는 테스트
모듈
58
전용 능동 프로브 검사
verified domains
130+
active checks after verification
Verify your domain →

// 최신 체크 · 실용적인 수정 · 자신 있게 배포

CSRF 보호: what it is and how to fix it · FixVibe