Installation
composer require salehye/laravel-security
php artisan vendor:publish --provider="Salehye\Security\SecurityServiceProvider"
php artisan migrate
config/security.php) and migrations (e.g., failed_attempts, sessions).Enable Core Features
Add to AppServiceProvider@boot():
\Salehye\Security\Facades\Security::enable([
'input_sanitization',
'xss_protection',
'brute_force',
]);
First Use Case: Secure a Controller
use Salehye\Security\Facades\Security;
public function update(Request $request, $id) {
Security::validateInput($request); // Auto-sanitizes + validates
Security::requireReauthentication(); // For sensitive actions
// Proceed with logic...
}
config/security.php under brute_force.max_attempts.php artisan security:2fa:enable and use middleware @2fa.// Manual validation (replaces Laravel's validate())
$validated = Security::validateInput($request, [
'email' => 'required|email|no_sql_injection',
'bio' => 'nullable|xss_safe',
]);
// Auto-apply to all requests via middleware
// Add to `app/Http/Kernel.php`:
protected $middleware = [
\Salehye\Security\Http\Middleware\SanitizeInput::class,
];
if (Security::isSuspiciousLogin()) {
event(new SuspiciousLoginDetected());
}
Security::setMaxSessions(3); // Configurable per user
// Require re-authentication for DELETE/PUT
public function destroy($id) {
Security::requireReauthentication();
// Proceed...
}
// Generate QR code for setup
$qrCode = Security::generate2FAQR('user@example.com');
// Verify code
if (Security::verify2FA($code)) {
auth()->user()->mark2FAVerified();
}
Extend validation rules:
use Salehye\Security\Rules\CustomRule;
class CustomRule extends CustomRule {
public function passes($attribute, $value) {
return str_contains($value, 'allowed');
}
}
// Usage:
Security::validateInput($request, ['field' => 'custom_rule']);
Performance Overhead
Security::disable('input_sanitization');
False Positives in XSS Protection
<script> tags in CMS content) may be stripped.Security::allowXSSForUser(auth()->id());
2FA Migration Pitfalls
if (app()->environment('production')) {
Security::enforce2FAForUsers(['admin']);
}
Session Fixation
session_regenerate_id() may not work if middleware order is wrong.SanitizeInput before StartSession in Kernel.php.Security::setFailedAttemptLogger(function ($data) {
Log::warning('Brute force attempt', $data);
});
Security::disableAll(); // Temporarily disable all checks
Custom Validation Rules
Extend Salehye\Security\Rules\BaseRule and register via:
Security::extendRule('custom_rule', CustomRule::class);
Override Default Policies
Publish and modify config/security.php policies (e.g., max_failed_attempts).
Event Listeners Listen for security events:
event(new \Salehye\Security\Events\BruteForceDetected($user));
Geographic Anomaly Detection
Requires geoip2/geoip2 and a MaxMind DB. Configure path in config/security.php:
'geoip_database' => database_path('GeoLite2-City.mmdb'),
Rate Limiting Uses Laravel’s rate limiter under the hood. Customize via:
'brute_force' => [
'limiter' => '5-minutes',
],
How can I help you explore Laravel packages today?