T Techclick ← All lessons
Cloudflare · WAF troubleshooting command center · Interactive lesson

Cloudflare WAF war-room — Action + Rule before you skip

01:40. Slack: “Checkout is 403 — Cloudflare is blocking us.” Managed rules went from log to block an hour ago. L1 already drafted a custom rule that skips all remaining managed rules for /api/*. That is not a war-room. This page is five official surfaces — Security Events Action + Rule, Trace, Ray ID, skip / exception, Log Explorer — each mapped to one ticket, one first click, and one field you paste before you change a ruleset.

~22 min read · L2 primary · Quiz at end · Evidence desk

⚡ Quick Answer

Cloudflare WAF war-room: Security Events Action+Rule, Trace, Ray ID, skip vs exception, Log Explorer. Five tickets with first tool and one proof field before you skip.

After this page you can

Quick answer (say this out loud)

Security Events answers “did a security product act — and which rule?” Quote Action + Service + Rule + Ray ID. Trace answers “what would this simulated request match, in evaluation order?” Ray ID is the ticket number on the error page and in cf-ray. A WAF exception skips one managed rule or ruleset for a path. A custom Skip can skip remaining custom rules, rate limiting, Super Bot Fight Mode, all managed rules, or products such as Browser Integrity Check. Log Explorer answers “what exactly happened for this Ray ID?” when Sampled logs are empty. A Managed Challenge is not a block. Empty Sampled logs is not “skip everything.” Trace is not production traffic.

1. Why a 403 is five questions

Concept: Operators collapse five WAF failures into one sentence. A managed rule blocked /api/checkout. Sampled logs hid the Ray ID. The custom rule you shipped never evaluated. Someone already skipped the whole managed phase. The origin never saw the request because an IP Access Allow never reached custom rules — or a rewrite changed the path first. Those are five first clicks, not one “open WAF and disable.”

The evidence desk taught you which dashboard proves Cloudflare is working. This command center is the war-room when the edge already answered and the answer is 403 / challenge / “checkout is dead.” You isolate one transaction, name the rule, then ship the smallest skip that restores that path — not the tenant.

Hero · one Ray ID on the wall
Night-shift WAF war-room with Security Events Action and Rule highlighted on a wall monitor
Notice: the wall is Action + Rule + Ray ID, not a red “WAF disabled” banner. You quote the field, then you skip one rule.
Interview line

If they say “checkout is blocked by Cloudflare,” do not say “I skipped Managed Rules.” Say: “I prove the verdict in Security Events with Action + Rule + Ray ID. If Sampled logs are empty I query Log Explorer WHERE RayID. If the question is ‘would this match?’ I use Trace. The fix is a zone-level exception for that managed rule and path — not Skip all remaining.”

2. Mental model — five war-room surfaces

Path: Memorise five named objects before you click. Each surface is allowed to prove one thing. Over-claiming a field is how you skip http_request_firewall_managed at 02:00 and open a false-negative ticket at 09:00.

1 · Security Events

Zone Analytics → Events tab (deeplink /security/analytics). Proves one mitigated or flagged request: Action + Service + Rule + Ray ID. Does not prove un-actioned traffic or a simulated match.

2 · Trace

Account Trace (/trace). Simulates an HTTP/S request. Proves which active rules would evaluate and execute, in order. Administrator or Super Administrator. Does not prove what production just did.

3 · Ray ID

Every request through Cloudflare gets a Ray ID (cf-ray). The error page prints it. Sampled logs can hide it. Next official door is Log Explorer. Official caveat: Ray IDs are not guaranteed unique.

4 · Skip / exception

Exception = skip one managed rule or ruleset for an expression. Path: Security rules → Create → Managed rules. Custom Skip = skip remaining custom rules, phases, or products. Custom rules have no Allow.

5 · Log Explorer

Account Log Explorer → Log Search (/log-explorer/log-search). Proves the forensic row: RayID + Action + RuleID + Source. Actual traffic. Not a Trace replay.

Hard words, once

Terminating action = block / challenge / managed_challenge stop later rules. Skip is not terminating. Exception lives in http_request_firewall_managed and only skips execute rules listed after it. firewall_events is the Logpush dataset. IP Access Allow bypasses custom rules and does not appear in Events.

Flow 1 · five surfaces, one question each
Write hostname + path + Ray ID + UTC first · then pick the surface Checkout is 403 — which WAF? five questions, not one skip Security Events This request acted? Action + Rule Analytics → Events Sampled logs not all HTTP Trace Would this match? Executed configs Account → Trace simulated HTTP/S not a live Ray ID Ray ID Which request? cf-ray / error page filter Events or Log Explorer not guaranteed unique Skip / exception Smallest restore? one rule + path Security rules Create → Managed not skip all remaining Log Explorer This Ray ID? Action + RuleID Source · RayID Log Search SQL not a Trace replay Empty Security Events is data. Sampling hid the row, or nothing was actioned. Do not invent Skip all remaining from an empty Events tab. Narrow the window, then Log Explorer.

Read left → right. Each box is allowed one claim. If you cannot name the field, you are not proving — you are guessing.

Say this out loud

I prove the verdict, then the what-if, then the Ray ID row, then the smallest skip. I do not skip all managed rules, pause the zone, or Allow an IP until I can quote the field that made me do it.

3. Decision flow — ticket → first tool

Flowchart first. Do not open Security rules → Create rule until a diamond says so.

Path · pick the branch before the skip
Decision path splitting a blocked checkout request into isolate, trace, and scoped skip
Notice: the diamond is the ticket. You isolate Action + Rule before you draw a skip. The proof field comes last.
Flow 2 · first-tool diamond
Symptom first · tool second · field third · skip last What must we prove? Have a Ray ID? or only a 403 / “should fire” 403 / challenge Security Events Action + Rule Have Ray ID Filter Events then Log Explorer Should have fired Trace Executed configs Named RuleID FP Exception one rule + path Attack still lands Events · skip? narrow the skip Events empty + no Ray ID → do not skip. Prove the request hit the edge first. Evidence desk: HTTP Traffic Requests. Then come back here with a Ray ID. Diamond = decision. Do not Skip all remaining from the bottom box. Official Events path: Analytics page → Events tab. Deeplink /security/analytics. Check URL rewrites and IP Access Allow before you rewrite the custom-rule expression.

Read the diamond first. “Should have fired” never starts in Log Explorer. A named RuleID false positive never starts as Skip all remaining. Empty Events with no Ray ID is an evidence-desk ticket, not a skip ticket.

4. How to choose — first tool + proof field

Do: Print this next to the dashboard. If you cannot recite the proof field, you are not ready to create an exception.

If the ticket says…First tool (official path)Proof fieldDo not open first
403 / challenge / “Cloudflare blocked checkout” Zone Analytics → Events · Sampled logs. Deeplink /security/analytics Action (block / managedchallenge / challenge / log / skip) + Service + Rule + Ray ID Skip all remaining / skip all managed rules
Ray ID on the error page, Sampled logs empty Narrow the Events window, then account Log Explorer → Log Search WHERE RayID = '…' then Action + RuleID + Source A global WAF disable
“This rule should have fired” after you shipped it Account Trace · /trace (Administrator / Super Administrator) Evaluated and executed configurations, in evaluation order Log Explorer (that is what did happen)
Named managed-rule false positive on one path Security rules → Create → Managed rules (zone exception) Exception type = skip specific rule(s) + expression on host + path Custom Skip → All managed rules
Attacks still land after a broad skip; Events show skip Events filter Action = skip, then edit the exception / skip expression Action = skip + the exception name / Rule · tighten starts_with(path) Another Skip all remaining on top
Sampling caveat (official)

Security Events may use sampled data. Official Ray ID docs: if sampled data is applied, you might not see all events and filters might not return the expected results. Narrow the time window, then escalate the same Ray ID to Log Explorer or a Logpush firewall_events job. Do not declare “no hit” — and do not skip a ruleset — from one empty Sampled-logs page.

Skip vs exception vs IP Access Allow

WAF exception skips WAF managed rulesets (or some of their rules) under an expression. It does not skip Browser Integrity Check or Zone Lockdown — those need a custom Skip and the product checkbox. Custom Skip can skip remaining custom rules, phases (http_ratelimit, http_request_sbfm, http_request_firewall_managed), or products. You cannot skip Bot Fight Mode (Free), only Super Bot Fight Mode. IP Access Allow bypasses custom rules, rate limiting, and most Managed Rules; matches do not appear in Security Events. Custom rules have no Allow action.

5. Runbook Side A → B → C

Side A isolates the live verdict (Events + Ray ID). Side B proves the what-if and chooses skip vs exception (Trace + Security rules). Side C confirms the forensic row and closes the ticket (Log Explorer). On a messy Sev-2, do them in this order until a field lights up.

Side A — Security Events + Ray ID (the live verdict)

  1. Lock one transaction before you open WAF

    Write hostname, path, method, UTC minute, client IP (lab: 203.0.113.88), and the Ray ID from the error page or cf-ray. Official: every request through Cloudflare gets a Ray ID; it is also added toward origin as cf-ray. If you have no Ray ID and no 403 body, this is still an evidence-desk ticket first.

  2. Open Security Events, not the rule editor

    Official path: in the Cloudflare dashboard go to the Analytics page for the zone, then select the Events tab. Deeplink: dash.cloudflare.com/?to=/:account/:zone/security/analytics. Enterprise also has account-level Security events. Source: Security Events — Location in the dashboard.

  3. Filter, then read the columns that close a WAF ticket

    Select Add filter. Field / operator / value — no quotes, no AS prefix on ASN, no wildcards. Filter Ray ID if you have it; otherwise Host + Path + Action. Expand the Sampled log. Quote Action and the applied security feature (Managed rules, Rate limiting rules, Custom rules, Bot Fight Mode). A single HTTP request can generate more than one security event. Source: Security Events — Sampled logs; Event actions.

  4. If Events is empty, do not invent a skip

    Empty Sampled logs means either nothing was actioned/flagged, sampling hid the row, or an IP Access Allow never reached WAF (those matches do not appear in Events). Narrow the duration (official sampling advice). Then jump to Side C. Source: Security Events — Sampling; Rule phase interactions.

dash.cloudflare.com · checkout.example.test · Analytics → Events
Training mock · not live

Analytics / Events / Sampled logs

Security Events

checkout.example.test
Last 24 hours
/api/checkout
Block
Time (UTC)ActionServiceRuleRay ID
01:28:11logManaged rules100015a1b2c3d4e5f67890
01:41:07blockManaged rules949110 · OWASPa1b2c3d4e5f67891

Source: Cloudflare Docs — Security Events (Analytics → Events tab; Sampled logs Action + applied security feature). Official OWASP trip: rule description 949110: Inbound Anomaly Score Exceeded. Lab zone checkout.example.test only. Training mock · not live.

Side B — Trace + skip vs exception (the what-if and the smallest restore)

  1. If the question is “would this match?”, open Trace

    Path: account Trace · dash.cloudflare.com/?to=/:account/trace. Enter a hostname that belongs to the account, HTTP method, optional User-Agent / cookies / geolocation / Bot Score / request body. For POST/PUT/PATCH enter a Request Body. Select Send Trace. Inactive rules are not evaluated. Administrator or Super Administrator only. Source: Use Cloudflare Trace.

  2. Read executed configurations in evaluation order

    Trace results show evaluated and executed configurations from Ruleset Engine products, Page Rules, and Workers. Switch Results shown to All configurations if you need the misses. Check for a URL rewrite before custom rules — official phase-interactions note: custom rules see the rewritten path. Source: Trace a request; Rule phase interactions.

  3. Choose exception, not Skip all remaining

    Official false-positive path: add an exception to skip the execution of WAF managed rulesets or some of their rules. Zone path: Security rules → Create → Managed rules. Exception name + When incoming requests match + Then: Skip specific rules from a Managed Ruleset (or Skip all remaining rules — last resort). Search by description, rule ID, or tag. Deploy. Place the exception before the execute rule it is meant to skip. Source: Add an exception in the dashboard; Troubleshoot managed rules.

  4. Use custom Skip only when the product is not a managed ruleset

    Path: Security rules → Create rule → Custom rules · Choose action Skip. Official options: All remaining custom rules; All rate limiting rules; All Super Bot Fight Mode rules; All managed rules; products (Zone Lockdown, User Agent Blocking, Browser Integrity Check, Hotlink Protection, Security Level, legacy rate-limit / managed). Keep Log matching requests on so the skip still appears in Events. Source: Configure a custom rule with the Skip action; Available skip options.

dash.cloudflare.com · Trace · account
Training mock · not live

Trace / Send Trace / Trace results

Trace a request

https://checkout.example.test/api/checkout
POST
CheckoutApp/3.4 (lab)
off (default)
TRACE RESULTS (evaluation order) · Results shown: matching only
http_request_transform · no rewrite
http_request_firewall_custom · no custom skip
http_request_firewall_managed · Cloudflare OWASP Core Ruleset · 949110 · block
http_ratelimit · no match
Inactive rules were not evaluated.

Source: Cloudflare Docs — Trace a request; Use Cloudflare Trace (account /trace; evaluated and executed configurations). Training mock · not live.

dash.cloudflare.com · checkout.example.test · Security rules → Create → Managed rules
Training mock · not live

Security rules / Create / Managed rules / Add exception

Add exception

checkout-owasp-949110-lab
Skip specific rules from a Managed Ruleset
http.host eq "checkout.example.test" and starts_with(http.request.uri.path, "/api/checkout")
Cloudflare OWASP Core Ruleset
949110: Inbound Anomaly Score Exceeded
On (default — keep on so Events still shows skip)

Source: Cloudflare Docs — Add an exception in the dashboard (Security rules → Create → Managed rules; exception types; Log matching requests; Deploy / Save as Draft). Official admin-path example uses starts_with(http.request.uri.path, "/admin"). Lab only. Training mock · not live.

Flow 3 · exception vs custom Skip vs IP Access Allow
You already have Action + RuleID · pick the smallest restore What product fired? Managed rules / OWASP Exception · specific rule host + path expression Create → Managed rules BIC / Lockdown / SBFM Custom rule · Skip tick that product / phase cannot skip Bot Fight Mode “Just Allow the NAT” IP Access Allow bypasses custom + RL no Events row · last resort Skip all remaining managed rules is a blast-radius control, not a checkout fix. Official troubleshooting: disable that specific rule, not the entire ruleset.

Left is the default restore. Middle is for products exceptions cannot skip. Right is how you lose Events visibility. Official docs: if one specific rule causes false positives, disable that specific rule and not the entire ruleset.

Side C — Log Explorer (the forensic row) + close

  1. When Sampled logs are not enough, leave Events

    Official Ray ID page: all customers can look up a Ray ID in Security Events Sampled logs; sampling can hide it. Next official door is Log Explorer. Path: Log Explorer → Log Search. Deeplink: dash.cloudflare.com/?to=/:account/log-explorer/log-search. Needs the dataset enabled (Manage datasets) and Logs Read. Source: Cloudflare Ray ID; Log Search.

  2. Query the Ray ID, then read Action + RuleID

    Select Dataset (http_requests or the firewall-events dataset you enabled). Add filter Field = RayID, or Custom SQL. Official example uses WHERE RayID = '…'. For the security verdict, Logpush field names on firewall_events are Action, RuleID, Source, RayID, Description, EdgeResponseStatus. Prefer date = 'YYYY-MM-DD' so the scan stays narrow. Source: Log Search; Firewall events dataset.

  3. Retest the original transaction and quote the new field

    Replay the same host + path + method. Events should show Action = skip for the exception (if logging is on), or no block on that RuleID. Trace should list the exception as executed before the managed ruleset. A changed setting is not a close until that field flips.

dash.cloudflare.com · Log Explorer → Log Search
Training mock · not live

Log Explorer / Log Search / Custom SQL

Log Search

firewall_events · checkout.example.test
Previous 12 hours
Custom SQL — lab only
SELECT Datetime, ClientRequestHost, ClientRequestPath,
       EdgeResponseStatus, Action, RuleID, Source, RayID, Description
FROM   firewall_events
WHERE  date = '2026-08-16'
  AND  RayID = 'a1b2c3d4e5f67891'
LIMIT  1
RayIDActionRuleIDSourceEdgeResponseStatus
a1b2c3d4e5f67891block…843b323cfirewallmanaged403

Source: Cloudflare Docs — Log Search (dashboard path + WHERE RayID); Firewall events fields (Action, RuleID, Source, RayID). Official OWASP score-exceeded rule ID suffix 843b323c. Training mock · not live.

Fields you write in the ticket
Zone:            checkout.example.test     (lab)
UTC window:      01:30–01:50
Events path:     Analytics → Events → Sampled logs
Quote:           Action + Service + Rule + Ray ID
If empty:        narrower window, then Log Explorer WHERE RayID
Trace path:      Account → Trace → Send Trace
Restore path:    Security rules → Create → Managed rules
                 (exception · specific rule · host+path)
Close:           same POST /api/checkout · Action != block
                 or Action = skip on that RuleID
Green success on each side

6. Five tickets as full stories

These five land every quarter. Memorise first tool + proof field. Times and identities below are lab-only. Zone checkout.example.test, client 203.0.113.88.

TicketSymptomFirst toolProof field
CFWAF-01Checkout POST 403 after managed rules log → blockSecurity Events Sampled logsAction = block · Service = Managed rules · Rule + Ray ID
CFWAF-02Ray ID on the error page; Sampled logs emptyNarrow Events, then Log ExplorerWHERE RayID · Action + RuleID + Source
CFWAF-03“This custom rule should have fired”TraceExecuted configurations (or a rewrite / IP Access Allow before it)
CFWAF-04OWASP 949110 false positive on /api/checkoutException · specific ruleExpression host + path · rule 949110 skipped · logging on
CFWAF-05Attacks still land; Events show skip on /api/*Events Action = skipSkip expression too wide · tighten path · do not add a second Skip all

CFWAF-01 — Prove the verdict (Security Events)

01:42 · P1. Mobile app v3.4 checkout POSTs return 403. An hour ago someone moved Cloudflare Managed Rules / OWASP from log to block. L1 already drafted a custom rule: Skip all remaining custom rules + All managed rules for starts_with(http.request.uri.path, "/api/").

First tool: zone Analytics → Events. Filter Host = checkout.example.test, Path contains /api/checkout, last two hours. Expand the 01:41 row.

Proof field: Action = block, Service = Managed rules, Rule = 949110: Inbound Anomaly Score Exceeded, Ray ID = a1b2c3d4e5f67891. Official troubleshooting: that description is the Cloudflare OWASP Core Ruleset score-exceeded rule. The ticket is that rule + that path — not “WAF is broken.”

Trap

Do not ship Skip all managed rules for /api/*. Official guidance: if one specific rule causes false positives, disable that specific rule and not the entire ruleset. For admin-style paths they show http.host eq "example.com" and starts_with(http.request.uri.path, "/admin").

CFWAF-02 — Prove the Ray ID when Events is empty

01:55 · P1. Same 403. The shopper pasted a Ray ID from the block page. Events → Add filter → Ray ID returns nothing. L1 says “Cloudflare never saw it — skip the zone.”

First tool: shrink duration (Last 30 minutes, then a custom 01:35–01:50). Official sampling: a smaller timeframe displays more events. If still empty, Log Explorer → Log Search, dataset firewall_events or http_requests, Custom SQL WHERE RayID = '…'.

Proof field: one row: Action, RuleID, Source = firewallmanaged, EdgeResponseStatus = 403. That is the live request. Trace cannot substitute — Trace is a simulated what-if.

Close

I would not skip from an empty Sampled-logs page. I would paste the Log Explorer row. Official Ray ID docs also say Ray IDs are not guaranteed unique — pair Ray ID with timestamp + path.

CFWAF-03 — Prove the what-if (Trace)

02:10 · P2. Yesterday you shipped a custom rule that should challenge empty-UA POSTs to /api/checkout. Events is quiet. Someone wants the expression rewritten to true.

First tool: account Trace. URL https://checkout.example.test/api/checkout, method POST, User-Agent empty, Send Trace. Official: inactive rules are not evaluated; you need Administrator / Super Administrator.

Proof field: executed configurations in order. Common misses: a URL rewrite already changed /api/checkout (custom rules see the rewritten path), or an IP Access Allow for the office NAT bypassed custom rules entirely — and Allow matches do not appear in Security Events. Official phase-interactions workflow: check rewrites, then IP Access, then whether the request was expected to stop or skip later phases, then Trace.

Trap

Log Explorer answers what production did. It cannot tell you why a rule you just enabled “should have” matched a request that never happened. That is Trace.

CFWAF-04 — Smallest restore (exception, not skip-all)

02:25 · P1. CFWAF-01’s RuleID is confirmed. Product wants checkout green in fifteen minutes. Someone still has the Skip-all-managed draft open.

First tool: Security rules → Create → Managed rules. Exception name checkout-owasp-949110-lab. When incoming requests match: http.host eq "checkout.example.test" and starts_with(http.request.uri.path, "/api/checkout"). Then: Skip specific rules from a Managed Ruleset → Cloudflare OWASP Core Ruleset → search 949110 → select that rule. Keep Log matching requests on. Deploy. Confirm the exception sits above the OWASP execute rule.

Proof field: exception listed with Action = Skip on Security rules (filter Managed Rules). Retest: Events shows skip (or no 949110 block) for a new Ray ID on the same path. Official: you can instead configure the OWASP ruleset (paranoia / score threshold) if 949110 is the score trip — still not a phase skip.

Close

I would not skip All managed rules, All remaining custom rules, or IP-Allow the app NAT. I would quote the exception name, the rule 949110, and the new Events action.

CFWAF-05 — The skip was the incident

09:10 · P1. Overnight someone shipped Skip all remaining managed rules for starts_with(http.request.uri.path, "/api/") to “keep checkout up.” SQLi probes to /api/search now reach origin. Origin logs show the payloads. Events for those probes is empty or shows skip.

First tool: Events → filter Action = skip + Path prefix /api/. Name the skip rule. Official false-negative checklist: are Managed Rules being skipped via an exception? Is attack traffic matching a custom rule skipping all Managed Rules? Adjust the exception / skip expression so it does not apply to the attack traffic.

Proof field: the skip rule’s expression and the Events skip rows. Tighten to /api/checkout (or convert to a specific-rule exception). Retest: a lab SQLi on /api/search is blocked again; checkout still skips 949110 only.

Trap

Adding a second Skip all remaining on top of the first is not an incident response. Official: exceptions apply to WAF managed rulesets only; a custom Skip of the managed phase is how you hide the next attack from the engine.

7. Traps + close-the-ticket proof

Proof · named field, then Closed
Operations desk with a verified WAF exception on one monitor and a highlighted Security Events skip row on the other
Notice: the close is Action + RuleID on a timestamp, not a screenshot of a green checkout button.
You seeWeak closeStrong close
403 on checkoutSkip all managed rules for /api/*Events Action + Rule + Ray ID, then a specific-rule exception
Empty Sampled logs“Cloudflare never saw it” / pause the zoneNarrow the window; Log Explorer WHERE RayID
Managed Challenge“We blocked a customer”Quote managedchallenge. Challenge is not block. Confirm the product (custom / RL / Bot).
Custom rule “didn’t fire”Rewrite expression to trueTrace executed configs; check rewrite + IP Access Allow
OWASP 949110Disable the OWASP rulesetException for that rule + path, or configure OWASP score / paranoia
IP Access Allow for the NAT“Fixed — no more 403s”Allow bypasses custom rules and does not log in Events. Last resort.
Events Action = skip, origin still pwnedAnother Skip all remainingTighten the skip/exception expression; retest a lab attack on a sibling path
Trace looks clean“WAF is fine”Trace is what-if. Prove the live Ray ID in Events or Log Explorer.
Bot Fight Mode still challenges“Skip is broken”Official: you cannot skip Bot Fight Mode (Free), only Super Bot Fight Mode.
Proof checklist before you leave the bridge
Interview close

I name the question, then the first tool, then one official field. Security Events proves the verdict. Trace proves the what-if. Ray ID is the join key. A WAF exception skips one managed rule for one expression. Log Explorer proves the forensic row when sampling hides Events. I do not skip a managed phase until that field is on the ticket. Desk for “is Cloudflare even working?”: Cloudflare evidence desk.

Support package if you escalate

Official managed-rules troubleshooting: if you contact Cloudflare Support to verify whether a WAF managed rule triggers as expected, provide a HAR file captured while sending the specific request of concern. Add the Ray ID, UTC, zone, Events screenshot (Action + Rule), and the exception you already tried. A Slack “checkout is down” is not a HAR.

Knowledge check

Six war-room judgments. Each maps to a first tool, a proof field, or a skip-vs-exception choice. Check answers, then Reset if you picked the wrong surface.

Q1

Checkout POST returns 403 after managed rules moved from log to block. You have not opened Security rules yet. First proof?

Correct: b. Official first door for a mitigated request is Security Events. Skip-all, pause, and IP Access Allow are blast-radius moves. Re-read Side A and CFWAF-01.
Q2

The shopper pasted a Ray ID. Events → filter Ray ID is empty. What do you do first?

Correct: a. Official Ray ID + Security Events sampling: smaller timeframe, then Log Explorer. Trace is simulated. Re-read Side A step 4, Side C, and CFWAF-02.
Q3

You shipped a custom rule that should have challenged this POST. Events is quiet. First tool + field?

Correct: c. Official: Trace for “why a rule did not trigger as expected.” Custom rules see rewritten paths; IP Access Allow bypasses custom rules and does not appear in Events. Re-read Side B steps 1–2 and CFWAF-03.
Q4

Events shows Managed rules / 949110 Inbound Anomaly Score Exceeded on POST /api/checkout. Correct restore?

Correct: b. Official false-positive path is an exception (or OWASP configuration), not skipping the whole phase. Re-read Side B steps 3–4, Flow 3, and CFWAF-04.
Q5

You need checkout to bypass Browser Integrity Check, not a managed rule. What is true?

Correct: d. Official: exceptions apply to WAF managed rulesets only; skip products lists BIC; no Allow on custom rules; cannot skip Bot Fight Mode. Re-read the skip-vs-exception callout and Flow 3.
Q6

You deployed the 949110 exception. What closes CFWAF-04?

Correct: a. A setting is not a fix until the original transaction flips and residual control still holds. Re-read Side C step 3, the proof checklist, and CFWAF-04 / CFWAF-05.

Sources

Related: Cloudflare evidence desk · Cloudflare session factory · WAF skip tuning · WAF deep dive · Cloudflare WAF hub