۱️⃣ محافظ نامرئی جلوی SQL Injection
اشتباه مرسوم: استفاده مستقیم از کوئری خام.
راهحل: همیشه از بایندینگ استفاده کن. اینطوری هم امنتره، هم سریعتر.
۲️⃣ لیست سیاه برای توکنهای Sanctum
توکنهای دزدیدهشده تا زمان انقضا معتبر میمونن.
با یه میانافزار ساده میتونی سریعاً توکنهای مشکوک رو باطل کنی.
اگه Redis هم بذاری وسط، سرعت چک کردن میشه لحظهای.
۳️⃣ دانلود استریمشده با cursor()
هیچوقت کل دیتابیس رو یهجا نیار بالا!
با cursor() و streamDownload میتونی میلیونها ردیف رو با مصرف رم خیلی کم استریم کنی.
۴️⃣ لیمیت هوشمند با اثرانگشت کاربر
محدود کردن فقط بر اساس آیپی سادهست و قابل دور زدن.
ترکیب آیپی + یوزر ایجنت رو هش کن، اون بشه کلید محدودیت. اینطوری حملات brute-force عملاً میریزه.
۵️⃣ گرم کردن روتها با Octane
لاراول به صورت پیشفرض روتها رو در لحظه بوت میکنه.
با route:cache و Octane میتونی استارت سرور رو تا چند برابر سریعتر کنی.
۶️⃣ محافظت از بلید جلوی XSS
وقتی HTML کاربر ذخیره میشه، {!! !!} خیلی خطرناکه.
راهحل: Purifier برای تمیز کردن کد + CSP nonce برای اسکریپتها.
۷️⃣ شاردینگ دیتابیس برای مقیاس بینهایت
وقتی ترافیک سنگین میشه، دیتابیس نفسش میگیره.
لاراول اجازه میده برای هر یوزر یا تننت یه کانکشن جدا تعریف کنی، بدون بازنویسی کل اپ.
۸️⃣ چرخش کلید رمزنگاری بدون داونتایم
عوض کردن APP_KEY قدیما یعنی همه لاگاوت بشن.
با نگه داشتن کلید قبلی و تعریف کلید جدید، میتونی بدون مشکل کلید رو بچرخونی.
📎منبع
@panicdev
#laravel #tips
اشتباه مرسوم: استفاده مستقیم از کوئری خام.
راهحل: همیشه از بایندینگ استفاده کن. اینطوری هم امنتره، هم سریعتر.
// ❌ Bad
DB::select("SELECT * FROM users WHERE email = '$email'");
// ✅ Secure
User::whereRaw("MATCH (bio) AGAINST (? IN BOOLEAN MODE)", [$searchTerm])
->where('is_public', true)
->get();php
۲️⃣ لیست سیاه برای توکنهای Sanctum
توکنهای دزدیدهشده تا زمان انقضا معتبر میمونن.
با یه میانافزار ساده میتونی سریعاً توکنهای مشکوک رو باطل کنی.
اگه Redis هم بذاری وسط، سرعت چک کردن میشه لحظهای.
public function handle($request, $next) {
if ($this->isCompromised($request)) {
$request->user()->currentAccessToken()->delete();
}
return $next($request);
}
۳️⃣ دانلود استریمشده با cursor()
هیچوقت کل دیتابیس رو یهجا نیار بالا!
با cursor() و streamDownload میتونی میلیونها ردیف رو با مصرف رم خیلی کم استریم کنی.
return response()->streamDownload(function () {
foreach (User::where('active', true)->cursor() as $user) {
echo json_encode($user) . "\n";
}
}, 'users.jsonl');
۴️⃣ لیمیت هوشمند با اثرانگشت کاربر
محدود کردن فقط بر اساس آیپی سادهست و قابل دور زدن.
ترکیب آیپی + یوزر ایجنت رو هش کن، اون بشه کلید محدودیت. اینطوری حملات brute-force عملاً میریزه.
RateLimiter::for('api', function (Request $request) {
$fingerprint = sha1($request->userAgent() . $request->ip());
return Limit::perMinute(100)->by($fingerprint);
});۵️⃣ گرم کردن روتها با Octane
لاراول به صورت پیشفرض روتها رو در لحظه بوت میکنه.
با route:cache و Octane میتونی استارت سرور رو تا چند برابر سریعتر کنی.
php artisan route:cache
php artisan octane:start --workers=8
۶️⃣ محافظت از بلید جلوی XSS
وقتی HTML کاربر ذخیره میشه، {!! !!} خیلی خطرناکه.
راهحل: Purifier برای تمیز کردن کد + CSP nonce برای اسکریپتها.
{!! Purifier::clean($html, ['HTML.Allowed' => 'a[href]']) !!}
<script nonce="{{ csp_nonce() }}">
var data = @json($safeData);
</script>۷️⃣ شاردینگ دیتابیس برای مقیاس بینهایت
وقتی ترافیک سنگین میشه، دیتابیس نفسش میگیره.
لاراول اجازه میده برای هر یوزر یا تننت یه کانکشن جدا تعریف کنی، بدون بازنویسی کل اپ.
User::on('user_shard')->find(15000);۸️⃣ چرخش کلید رمزنگاری بدون داونتایم
عوض کردن APP_KEY قدیما یعنی همه لاگاوت بشن.
با نگه داشتن کلید قبلی و تعریف کلید جدید، میتونی بدون مشکل کلید رو بچرخونی.
# .env
APP_KEY=new_key
PREVIOUS_APP_KEY=old_key
public function boot() {
Encrypter::rotate($this->app['config']['app.key'], 'new_key');
}
📎منبع
@panicdev
#laravel #tips
Medium
8 Laravel Secrets for a Secure, High-Performance API
Today, I’m sharing the 8 most powerful Laravel “secrets” I now consider non-negotiable in every backend I build. These tips are not just…
🔥10