All skills
grasmash avatar

/ivangrynenko-cursorrules-drupal

@76e6435

Drupal development and security patterns from Ivan Grynenko's cursor rules. Covers OWASP Top 10, authentication, access control, injection prevention, cryptography, configuration, database standards, file permissions, and more.

Use this Skill: https://skilld.dev/gh/grasmash/drupal-claude-skills/ivangrynenko-cursorrules-drupal

This session only. Nothing lands on disk.

referencesauthentication-security.md

≈1.7k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Drupal Identification and Authentication Failures Standards (OWASP A07:2021)

Source: Ivan Grynenko - drupal-authentication-failures.mdc Author: Ivan Grynenko License: MIT OWASP Reference: OWASP A07:2021


Full Documentation

View online: https://github.com/ivangrynenko/cursorrules/blob/main/.cursor/rules/drupal-authentication-failures.mdc

This security pattern covers:

  • OWASP Top 10 classification
  • Common vulnerabilities and anti-patterns
  • Enforcement checks for code review
  • Secure coding examples
  • Best practices and remediation

Raw Content

---
description: Detect and prevent identification and authentication failures in Drupal as defined in OWASP Top 10:2021-A07
globs: *.php, *.inc, *.module, *.install, *.info.yml, *.theme
alwaysApply: false
---
# Drupal Identification and Authentication Failures Standards (OWASP A07:2021)

This rule enforces security best practices to prevent identification and authentication failures in Drupal applications, as defined in OWASP Top 10:2021-A07.

## Rule Details

- **Name:** drupal_authentication_failures

- **Description:** Detect and prevent identification and authentication failures in Drupal as defined in OWASP Top 10:2021-A07

## Filters
- file extension pattern: `\\.(php|inc|module|install|theme|yml)$`
- file path pattern: `.*`

## Enforcement Checks
- Conditions:
  - pattern `UserPasswordConstraint|PasswordPolicy|user\\.settings\\.yml` – Ensure strong password policies are configured to require complexity, length, and prevent common passwords.
    - Pattern 1: Weak or missing password policies
  - pattern `(authenticate|login|auth).*function[^}]*return\\s+(TRUE|true|1)\\s*;` – Custom authentication functions should implement proper validation and not return TRUE without checks.
    - Pattern 2: Custom authentication without proper validation
  - pattern `==\\s*\\$password|===\\s*\\$password|strcmp\\(|password_verify\\([^,]+,[^,]+\\$plainTextPassword` – Avoid direct password comparison. Use Drupal's built-in password verification services.
    - Pattern 3: Improper password comparison
  - pattern `(username|user|pass|password|pwd)\\s*=\\s*['\"][^'\"]+['\"]` – Hardcoded credentials detected. Store credentials securely outside of code.
    - Pattern 4: Credentials in code
  - pattern `drupal_get_token\\(|form_token|\\$form\\[['\"]#token['\"]\\]\\s*=|drupal_valid_token\\(` – Ensure proper CSRF protection is implemented for all authenticated actions.
    - Pattern 5: Missing or weak CSRF protection
  - pattern `setcookie\\(|session_regenerate_id\\(false\\)|session_regenerate_id\\([^\\)]*` – Use Drupal's session management. If custom code is required, ensure secure session handling practices.
    - Pattern 6: Insecure session management
  - pattern `user\\.flood\\.yml|flood_control|UserFloodControl|user_failed_login_` – Ensure proper account lockout and flood control mechanisms are configured to prevent brute force attacks.
    - Pattern 7: Missing account lockout protection
  - pattern `user_pass_reset|password_reset|reset.*token` – Verify password reset functionality uses secure tokens with proper expiration and validation.
    - Pattern 8: Insecure password reset implementation
  - pattern `tfa|two_factor|multi_factor|2fa` – Consider implementing multi-factor authentication for sensitive operations or user roles.
    - Pattern 9: Lack of multi-factor authentication
  - pattern `\\$user->name\\s*=\\s*['\"]admin['\"]|\\$name\\s*=\\s*['\"]admin['\"]|->values\\(['\"](mdc:name|mail)['\"]\\)\\s*->\\s*set\\(['\"][^\\'\"]+['\"]\\)` – Avoid creating default administrator accounts or test users in production code.
    - Pattern 10: Default or test accounts

## Suggestions
- Guidance:
**Drupal Authentication Security Best Practices:**

1. **Password Policies:**
   - Use Drupal's Password Policy module for enforcing strong passwords
   - Configure minimum password length (12+ characters recommended)
   - Require complexity (uppercase, lowercase, numbers, special characters)
   - Implement password rotation for sensitive roles
   - Check passwords against known breached password databases

2. **Authentication Infrastructure:**
   - Use Drupal's core authentication mechanisms rather than custom solutions
   - Implement proper account lockout after failed login attempts
   - Consider multi-factor authentication (TFA module) for privileged accounts
   - Implement session timeout for inactivity
   - Use HTTPS for all authentication traffic

3. **Session Management:**
   - Use Drupal's session management system rather than PHP's session functions
   - Configure secure session cookie settings in settings.php
   - Implement proper session regeneration on privilege changes
   - Consider using the Session Limit module to restrict concurrent sessions
   - Properly destroy sessions on logout

4. **Account Management:**
   - Implement proper account provisioning and deprovisioning processes
   - Use email verification for new account registration
   - Implement secure password reset mechanisms with limited-time tokens
   - Apply the principle of least privilege for user roles
   - Regularly audit user accounts and permissions

5. **Authentication Hardening:**
   - Monitor for authentication failures and suspicious patterns
   - Implement IP-based and username-based flood control
   - Log authentication events for security monitoring
   - Consider CAPTCHA or reCAPTCHA for login forms
   - Use OAuth or SAML for single sign-on where appropriate

## Validation Checks
- Conditions:
  - pattern `password_verify\\(|UserPassword|\\\\Drupal::service\\(['\"]password['\"]\\)` – Using Drupal's password services correctly.
    - Check 1: Proper password handling
  - pattern `\\$form\\[['\"]#token['\"]\\]\\s*=\\s*['\"][^'\"]+['\"]` – Form includes CSRF protection token.
    - Check 2: CSRF token implementation
  - pattern `\\$request->getSession\\(\\)|\\\\Drupal::service\\(['\"]session['\"]\\)` – Using Drupal's session management services.
    - Check 3: Proper session management
  - pattern `user\\.flood\\.yml|flood|user_login_final_validate` – Implementing user flood protection.
    - Check 4: User flood control

## Metadata
- Priority: high
- Version: 1.1
- Tags: security, drupal, authentication, identification, owasp, language:php, framework:drupal, category:security, subcategory:authentication, standard:owasp-top10, risk:a07-authentication-failures
## References
- https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/
- https://www.drupal.org/docs/security-in-drupal/drupal-security-best-practices
- https://www.drupal.org/project/tfa
- https://www.drupal.org/project/password_policy

 


Last verified: 2025-10-31

Source: SKILL.md on GitHub

No alerts16d4 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The skill provides a comprehensive suite of security auditing rules for Drupal development, modeled after OWASP Top 10 guidelines. It serves as a defensive tool to help AI agents identify and remediate common vulnerabilities such as SQL injection, broken access control, and insecure configurations. No malicious patterns or safety risks were identified within the skill instructions or scripts.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 76e6435. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 months ago.

Steadyupdated 4 months ago

README badge

README badge for grasmash/drupal-claude-skills/ivangrynenko-cursorrules-drupal