drupal-security-review
This skill should be used when the user asks to "run a Drupal security review", "audit custom modules for security issues", "check for Drupal security…
Skill by miteshmap
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/miteshmap-drupal-security-review
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: data, security
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/drupal-security-review
What's inside
- Skill name
drupal-security-review- Description
- This skill should be used when the user asks to "run a Drupal security review", "audit custom modules for security issues", "check for Drupal security vulnerabilities", requests a security review of web/modules/custom or web/themes/custom, or before merging PRs that touch access control, forms, or data handling in this repository.
- License
- MIT
- Instructions
- 140 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- project-modules.md · references/
SKILL.md (first lines)
To perform a Drupal security review, audit this repository's custom code
against the checklist below, which is derived from
https://www.drupal.org/docs/administering-a-drupal-site/security-in-drupal.
Only report issues in project code (custom modules/themes, settings.php,
config), not Drupal core or third-party contrib modules unless they have been
patched locally. See `references/project-modules.md` for this repository's
custom module/theme scope paths and which modules to pay particular
attention to for specific checklist items.
## Review process
1. Load `references/project-modules.md` to get the custom module/theme scope
paths and the per-checklist-item module hints for this repository.
2. Default to a diff-based review: identify the changed files (e.g. from the
current PR/branch diff or currently staged/unstaged changes) that fall
under the custom module/theme scope paths. Only run a full audit of the
entire custom module/theme tree when explicitly asked for a full audit.
3. Walk the checklist below section by section. For each item, search the
relevant code paths (PHP controllers/forms/services, `.twig` templates,
`.js`, `.yml` permissions/routing, `settings.php`) for violations, using
the module hints from `references/project-modules.md` to prioritize where
to look first.
4. Skip sections that are not applicable (e.g. CAPTCHA/PCI sections only
apply if that functionality exists in the code).
5. Report only real findings with file:line evidence — do not speculate.
## Checklist (from drupal.org "Security in Drupal")
### Writing secure code for Drupal
- **XSS / output sanitization**: Twig templates rely on autoescaping — flag
any use of the `|raw` filter, `{{ content|raw }}`, or `#markup`/`#allowed_tags`
render arrays built from unsanitized user input. Flag `class={{ class }}`
style unquoted Twig attributes (must be quoted).
- Flag use of `check_markup()` outside a text-format context.
- In JS, flag direct DOM insertion of user-controlled strings without
`Drupal.checkPlain()` / equivalent escaping.
- **SQL injection**: flag any `\Database::getConnection()->query()` or
`db_query()` call with string-concatenated variables instead of named
placeholders (`:name`) or the query builder (`->condition()`, `->select()`).
Flag `LIKE` conditions missing `$connection->escapeLike()`. Flag user input
used as a query *operator* instead of a value.
- **CSRF**: flag routes that perform state-changing actions (not just forms)
without `_csrf_token: 'true'` access checks in `*.routing.yml`.
- Flag use of `t()`/placeholders where `@variable`, `%variable`, `:variable`
are misapplied (e.g. `%variable` for a URL, `:variable` for arbitrary HTML).
### Security of generated PHP files
- Flag code that writes/generates `.php` files (e.g. via `file_put_contents`)
into web-accessible directories, or disables Drupal's protections for the
`php/twig` compiled-template/cache directories.
### Secure configuration for site builders
- Review `*.permissions.yml` and route/entity access callbacks for overly
broad permissions (e.g. custom permissions granted to `authenticated user`
that should be restricted), and missing access checks on new routes/forms.
- Flag debug/development settings left enabled for production (e.g.
`error_level` set to display errors, Twig `debug`/`auto_reload` on) in
`settings.php` / `sites/*/settings*.php`.
### Preventing execution of untrusted PHP
- Flag any use of the `php_eval`/PHP filter format, `eval()`, `create_function()`,
or unserializing untrusted input (`unserialize()` on request data — prefer
JSON).
### Securing authentication credentials
- Flag API keys, tokens, or passwords hardcoded in custom module PHP, JS, or
committed config (`.yml`) instead of `settings.php`/environment variables/
Key module. See `references/project-modules.md` for which integrations to
check in particular for hardcoded secrets.
- Scan the exported config in `./config` (all `*.yml` files) for committed
secrets: API keys, client secrets/ids, tokens, passwords, private keys, or
SMTP/webhook credentials sitting directly in config values instead of being
referenced via the Key module or environment/`settings.php` overrides. See
`references/project-modules.md` for which config prefixes to pay
particular attention to.
### Auditing config export for security-relevant permissions
- Cross-check `./config/user.role.*.yml` and `./config/*.permissions` entries
against the "Secure configuration for site builders" guidance: flag broad
permissions (e.g. "administer site configuration", "access administration
pages", "bypass node access") granted to non-admin roles.
- Flag exported text-format config (`./config/filter.format.*.yml`) that
grants a filtered/untrusted role access to the PHP filter or full HTML
without appropriate restriction (see "Configuring text formats for
security").
### Securing file permissions and ownership
- Flag custom code that changes file permissions to world-writable, or
writes uploaded files without validating extension/mime type via Drupal's
File API validators.
### Session management
- Flag custom code that alters session/cookie lifetime, `session.cookie_secure`,
or bypasses Drupal's session handling insecurely.
### Password management
- Flag custom login/registration/password-reset code that stores passwords in
plain text, logs passwords, or implements custom hashing instead of using
Drupal's `PasswordInterface` service. See `references/project-modules.md`
for which modules to check in particular.
### Privacy management / access bypass
- Flag custom access logic that doesn't account for the "deleting users who
authored content can lead to access bypass" issue — e.g. custom node/entity
access callbacks keyed only on `uid` without checking current permissions.
- Flag PII (emails, phone numbers, addresses) logged via `\Drupal::logger()`
or exposed in custom REST/JSON endpoints without access control. See
`references/project-modules.md` for which endpoints to check in
particular.
### Securing your site / admin super user
- Flag code that grants `uid: 1`-equivalent bypass-access shortcuts, or
custom permission checks using `->hasPermission('administer site
configuration')` where a narrower permission would do.
- Flag hidden debug/admin routes without permission or access requirements
in `*.routing.yml`.
### Hiding Drupal version / information disclosure
- Flag custom code that exposes stack traces, `phpinfo()`, or verbose errorFrom miteshmap/ai, MIT.
More from miteshmap/ai
- 0.565score
drupal-frontend-dev
miteshmap
Drupal 10/11 frontend and theming: Twig templates, Single Directory Components (SDC), libraries.yml asset loading, preprocess hooks, theme suggestions…
SkillAFreshness: AClaude Code +9 - 0.565score
drupal-backend-dev
miteshmap
Drupal 10/11 server-side development: custom modules, services, plugins, event subscribers, OOP hooks, routing/permissions, config schema, entity queries…
SkillAFreshness: AClaude Code +9 - 0.565score
drupal-code-reviewer
miteshmap
Independent, read-only review of Drupal code with a weighted 0-100 score and a merge verdict (PASS, PASS WITH FIXES, CHANGES REQUESTED, FAIL).
SkillAFreshness: AClaude Code +9 - 0.559score
drupal-security-advisories
miteshmap
Check drupal.org security announcements (core SA-CORE, contrib SA-CONTRIB, PSA) for a date or window against the project's composer.json/composer.lock and…
SkillAFreshness: AClaude Code - 0.559score
drupaltools-site-audit
miteshmap
Generate comprehensive Drupal site audit reports before RFPs or project proposals.
SkillAFreshness: AClaude Code +9 - 0.559score
flowchart
miteshmap
Build a multi-lane SVG flowchart (e.g.
SkillAFreshness: AClaude Code +9 - 0.559score
jira-brief
miteshmap
Generates a concise Jira ticket summary for the changes in the current branch, ready to paste as a PR review comment.
SkillAFreshness: AClaude Code +9 - 0.556score
spec-driven
miteshmap
Initialize the project "constitution" for spec-driven development — mission.md, tech-stack.md, and roadmap.md in a specs/ directory.
SkillAFreshness: AClaude Code +9 - 0.556score
changelog
miteshmap
Maintain CHANGELOG.md at the project root, grouped by date.
SkillAFreshness: AClaude Code +9 - 0.556score
drupal-coding-standards
ronaldtebrake
Review code according to Drupal's official coding standards.
SkillAFreshness: AClaude Code +9 - 0.556score
feature-work
miteshmap
Articulate and define a single feature within spec-driven development — plan.md, requirements.md, and validation.md in a dated feature directory under specs/.
SkillAFreshness: AClaude Code +9 - 0.534score
figma-to-code
miteshmap
This skill should be used when a task includes a Figma URL or node ID, or asks to "implement this Figma design", "convert this Figma section into a…
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 12, 2026 (16 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/miteshmap/ai
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from miteshmap
- 0.565score
drupal-frontend-dev
miteshmap
Drupal 10/11 frontend and theming: Twig templates, Single Directory Components (SDC), libraries.yml asset loading, preprocess hooks, theme suggestions…
SkillAFreshness: AClaude Code +9 - 0.565score
drupal-backend-dev
miteshmap
Drupal 10/11 server-side development: custom modules, services, plugins, event subscribers, OOP hooks, routing/permissions, config schema, entity queries…
SkillAFreshness: AClaude Code +9 - 0.565score
drupal-code-reviewer
miteshmap
Independent, read-only review of Drupal code with a weighted 0-100 score and a merge verdict (PASS, PASS WITH FIXES, CHANGES REQUESTED, FAIL).
SkillAFreshness: AClaude Code +9 - 0.559score
jira-brief
miteshmap
Generates a concise Jira ticket summary for the changes in the current branch, ready to paste as a PR review comment.
SkillAFreshness: AClaude Code +9 - 0.559score
drupaltools-site-audit
miteshmap
Generate comprehensive Drupal site audit reports before RFPs or project proposals.
SkillAFreshness: AClaude Code +9 - 0.559score
flowchart
miteshmap
Build a multi-lane SVG flowchart (e.g.
SkillAFreshness: AClaude Code +9
Cite this page
drupal-security-review skill. Agent Mart. https://agentmart.dev/skills/miteshmap-drupal-security-review (last updated 2026-10-24)