docs: clarify filter matching behavior and point injection blocking to Shield - #850
Conversation
Document that filter expressions match request fields literally and case-sensitively with no normalization, note that query args are percent-decoded while paths are not, and steer injection-style blocking (SQLi/XSS) toward Shield rather than hand-written filters. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Arcjet Review — 🟢 Low Risk
Decision: Approved
Rationale: This is a documentation-only change clarifying filter matching semantics and directing users toward Shield for injection-style attack detection. No escalation triggers fired, no secrets or executable logic were introduced, and the security guidance generally reduces risk by discouraging brittle hand-written injection filters.
Summary of Changes
Adds a new 'Matching behavior' section to the filters reference explaining literal, case-sensitive matching, decoded versus raw fields, and why Arcjet Shield should be used for SQLi/XSS-style attack detection instead of custom filters.
Review: c1c14817 | Model: openai/gpt-5.5 | Powered by Arcjet Review
Address review feedback: avoid implying Shield catches every obfuscation variant. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Summary
Adds a Matching behavior section to the Filters reference documenting how filter expressions match request fields, addressing arcjet/arcjet#8614.
eq,ne,contains) are literal, case-sensitive byte matches with no normalization, and how to match case-insensitively vialower()/upper()ormatcheswith a(?i)regex flag.http.request.uri.argsvalues are percent-decoded before matching, whilehttp.request.uri.pathis matched raw/still-encoded.Also updates the page
ajTocand the regenerated reference screenshots.Closes arcjet/arcjet#8614
🤖 Generated with Claude Code