laravel-security
Laravel security patterns including Sanctum, Policies, Gates, and common vulnerability prevention.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Laravel security patterns including Sanctum, Policies, Gates, and common vulnerability prevention.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
PHP Artisan CLI patterns including make commands, flags, custom commands, and AI-friendly usage.
Advanced Eloquent ORM patterns including relationships, eager loading, factories, and query optimization.
Laravel development best practices covering service providers, dependency injection, facades, and the Laravel Way.
Laravel Tinker best practices for debugging, testing ideas, and data exploration. When and how to use safely.
Laravel-native error handling patterns. Renderable exceptions, Livewire traits strategies, and user-facing notifications.
Integrate Anthropic Claude API with Laravel. HTTP client, message format, error handling. Use when calling Claude models from Laravel applications.
| name | laravel-security |
| description | Laravel security patterns including Sanctum, Policies, Gates, and common vulnerability prevention. |
Laravel protects automatically against:
| Attack | Protection | Your Responsibility |
|---|---|---|
| SQL Injection | Eloquent uses parameterized queries | Don't use raw queries with user input |
| XSS | Blade {{ }} escapes output | Don't use {!! !!} with user input |
| CSRF | @csrf directive | Include in all forms |
| Mass Assignment | $fillable/$guarded | Define on all models |
// Create token
$token = $user->createToken('api-token')->plainTextToken;
// Protect routes
Route::middleware('auth:sanctum')->group(function () {
Route::get('/user', fn () => auth()->user());
});
// config/cors.php
'supports_credentials' => true,
// config/sanctum.php
'stateful' => ['localhost', 'your-spa.test'],
php artisan make:policy PostPolicy --model=Post
class PostPolicy
{
public function view(User $user, Post $post): bool
{
return true; // Anyone can view
}
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
public function delete(User $user, Post $post): bool
{
return $user->id === $post->user_id
|| $user->is_admin;
}
}
// In Controller
public function update(Post $post)
{
$this->authorize('update', $post);
// ...
}
// In Form Request
public function authorize(): bool
{
return $this->user()->can('update', $this->post);
}
// In Blade
@can('update', $post)
<a href="{{ route('posts.edit', $post) }}">Edit</a>
@endcan
For non-model authorization:
// Define in AuthServiceProvider
Gate::define('access-admin', function (User $user) {
return $user->is_admin;
});
// Use
if (Gate::allows('access-admin')) {
// ...
}
// In Blade
@can('access-admin')
<a href="/admin">Admin Panel</a>
@endcan
class StorePostRequest extends FormRequest
{
public function authorize(): bool
{
return true; // Or policy check
}
public function rules(): array
{
return [
'title' => ['required', 'string', 'max:255'],
'body' => ['required', 'string'],
'image' => ['nullable', 'image', 'max:2048'],
];
}
public function messages(): array
{
return [
'title.required' => 'A title is required.',
];
}
}
// Define in RouteServiceProvider
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
RateLimiter::for('login', function (Request $request) {
return Limit::perMinute(5)->by($request->ip());
});
// Apply to routes
Route::middleware('throttle:login')->post('/login', LoginController::class);
FilamentUser for Admin accessauthorize() in controllers@can in Blade views{{ }} for output (escapes HTML)APP_DEBUG=false in productionenv() only in config files// ❌ SQL Injection risk
DB::select("SELECT * FROM users WHERE id = $id");
// ✅ Safe
User::find($id);
// ❌ XSS risk
{!! $userInput !!}
// ✅ Safe
{{ $userInput }}
// ❌ Mass assignment risk
User::create($request->all());
// ✅ Safe
User::create($request->validated());