Panic Dev
1.1K subscribers
123 photos
29 videos
2 files
132 links
Panic Dev; your Panic's solution 🔥

🍿 Telegram
🔰 t.iss.one/PanicDev

🍿 Laravel Community
🔰 t.iss.one/LaravelGroups

😇 Contact Me
🔰 t.iss.one/MentionHex

Thanks for sharing us 💛
Download Telegram
۱️⃣ محافظ نامرئی جلوی SQL Injection
اشتباه مرسوم: استفاده مستقیم از کوئری خام.
راه‌حل: همیشه از بایندینگ استفاده کن. اینطوری هم امن‌تره، هم سریع‌تر.

//  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
🔥10
#tips

هر موقع که فیچیر لازم و یا آماده بود مایگریشن ران میشه
🔥19👎2