pheromone/phpcs-security-audit
squizlabs/php_codesniffer or dealerdirect/phpcodesniffer-composer-installer). It extends PHPCS’s rule engine without requiring architectural changes to Laravel’s core or CI/CD pipelines.CmsFramework parameter allows framework-specific tuning.# GitHub Actions example
- name: Run PHPCS Security Audit
run: vendor/bin/phpcs --standard=vendor/pheromone/phpcs-security-audit/example_base_ruleset.xml --runtime-set=ParanoiaMode 1 app/
pheromone/phpcs-security-audit and squizlabs/php_codesniffer (already common in PHP projects). No Laravel-specific dependencies.ERROR level).phpcs-to-github).| Risk Area | Assessment | Mitigation Strategy |
|---|---|---|
| False Positives | High ParanoiaMode (default: 1) may flag legitimate patterns (e.g., preg_replace with /e in edge cases). |
Start with ParanoiaMode 0 in CI, tune rules via XML, or suppress known false positives in phpcs.xml. |
| Performance | Slow on large codebases (e.g., monolithic Laravel apps with many modules). Reported 1–5 min runtime for Drupal; Laravel may vary. | Parallel execution (--parallel=4), exclude vendor/non-critical paths (--ignore), or cache results (e.g., store PHPCS output in artifact storage). |
| Outdated Rules | Last release: 2019. PHP 8.x features (e.g., attributes, union types) may not be covered. | Supplement with modern tools (e.g., PHPStan’s security rules, Psalm’s @noRce). Monitor for forks (e.g., phpcs-security-audit-fork). |
| Drupal-Specific Rules | Laravel-specific rules (e.g., Blade XSS, Eloquent injection) may require customization. | Extend Utils.php to define Laravel-specific user input sources (e.g., Request::input(), Route::input()). |
| License Conflict | GPL-3.0 license may conflict with proprietary Laravel apps. | Use as a dev-only tool (not in production). Alternatively, audit rules manually and reimplement critical ones under MIT. |
Prioritization:
laravel-shift/blueprint, roave/security-advisories)?Customization:
Utils.php to handle Laravel’s input methods (e.g., request()->input())?htmlspecialchars() in Blade).CI/CD Integration:
ERROR level only).Maintenance:
Scalability:
dealerdirect/phpcodesniffer-composer-installer).composer require --dev pheromone/phpcs-security-audit (note: current Composer install may fail; use Git clone as fallback).{!! $input !!}).$_GET/$_POST without validation).@noRce).Assessment Phase:
vendor/bin/phpcs --standard=vendor/pheromone/phpcs-security-audit/example_base_ruleset.xml \
--runtime-set=ParanoiaMode 0 \
--report=json > phpcs-audit.json
Customization:
Utils.php for Laravel-specific input detection:
// app/Sniffs/Laravel/Utils.php
namespace App\Sniffs\Laravel;
use Pheromone\SecurityAudit\Utils;
class Utils extends \Pheromone\SecurityAudit\Utils {
public static function is_direct_user_input($var) {
if (parent::is_direct_user_input($var)) {
return true;
}
// Laravel-specific checks
return in_array($var, ['request()->input', 'Route::input', 'app(\'request\')->input']);
}
}
<config name="CmsFramework" value="Laravel" />
CI/CD Integration:
name: Security Audit
on: [push, pull_request]
jobs:
phpcs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
- run: composer install
- run: |
vendor/bin/phpcs --standard=vendor/pheromone/phpcs-security-audit/example_base_ruleset.xml \
--runtime-set=ParanoiaMode 1 \
--report=checkstyle > phpcs-results.xml
- uses: actions/upload-artifact@v3
with:
name: phpcs-results
path: phpcs-results.xml
vendor/bin/phpcs --standard=Security --severity=5 app/ || exit 1
(Severity 5 = ERROR level only.)Local Development:
composer.json scripts:
"scripts": {
"audit": "phpcs --standard=vendor/pheromone/phpcs-security-audit/example_base_ruleset.xml --runtime-set=ParanoiaMode 0 app/"
}
composer audit
| Component | Compatibility Notes |
|---|
How can I help you explore Laravel packages today?