۱️⃣ محافظ نامرئی جلوی 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]']) !!}
<noscript nonce="{{ csp_nonce() }}">
var data = @json($safeData);
</noscript>۷️⃣ شاردینگ دیتابیس برای مقیاس بینهایت
وقتی ترافیک سنگین میشه، دیتابیس نفسش میگیره.
لاراول اجازه میده برای هر یوزر یا تننت یه کانکشن جدا تعریف کنی، بدون بازنویسی کل اپ.
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
Forwarded from Armin's Notes 🪴
پس از مدتها؛ برای همیشه از پکیج nwidart/laravel-modules دست کشیدم :))
توی این یادداشت دلایلش رو توضیح دادم - امیدوارم براتون جالب و مفید باشد 👀
https://www.arminnotes.com/notes/goodbye-nwidart-hello-panicdevs-modules
توی این یادداشت دلایلش رو توضیح دادم - امیدوارم براتون جالب و مفید باشد 👀
https://www.arminnotes.com/notes/goodbye-nwidart-hello-panicdevs-modules
یادداشتهای آرمین
خداحافظی با nwidart/laravel-modules؛ سلام به panicdevs/modules - یادداشتهای آرمین
بعد از سه سال توسعه بیش از ۱۵۰ ماژول با nwidart/laravel-modules، تصمیم گرفتم سراغ راهحل اختصاصی خودم برم: panicdevs/modules. تمرکز اصلی؟ پرفورمنس.
10❤🔥11👍3👌2
ابزار NATS یک سیستم پیامرسان (messaging system) ساده، سبک و فوقالعاده سریع است که برای ارتباط سرویسها در معماریهای مدرن مثل Microservices و Cloud-Native طراحی شده.
فلسفهی NATS اینه که حداقل پیچیدگی رو بیاره، در عین حال مقیاسپذیر و قابل اعتماد باشه.
🔹 مزیتهای NATS نسبت به Kafka
⚡️ سرعت و سبک بودن
این NATS خیلی سبکتر از Kafka هست و برای سناریوهایی که نیاز به latency پایین و سرعت بالا دارن، انتخاب بهتری محسوب میشه.
🛠 سادگی در راهاندازی
کافکا معماری پیچیدهتری داره (Zookeeper، Brokerها و ...)، درحالیکه NATS خیلی راحتتر بالا میاد و نیاز به سرویسهای جانبی نداره.
☁️ طراحی Cloud-Native
همچنین NATS از اول برای محیطهای cloud-native و containerized مثل Kubernetes ساخته شده و خیلی خوب باهاشون جور درمیاد.
📦 انعطاف در الگوهای ارتباطی
و NATS هم از Pub/Sub پشتیبانی میکنه، هم Request/Reply، هم Queue Groups. این یعنی میتونه بسته به نیاز شما مثل یک MQ ساده یا حتی یک سیستم event-driven پیچیده عمل کنه.
🔄 استفاده در سناریوهای کوتاهعمر
کافکا بیشتر برای پردازش دادههای سنگین و ذخیره طولانیمدت مناسب هست، اما NATS عالیه برای ارتباطات لحظهای (real-time communication) بین سرویسها.
https://nats.io
فلسفهی NATS اینه که حداقل پیچیدگی رو بیاره، در عین حال مقیاسپذیر و قابل اعتماد باشه.
🔹 مزیتهای NATS نسبت به Kafka
⚡️ سرعت و سبک بودن
این NATS خیلی سبکتر از Kafka هست و برای سناریوهایی که نیاز به latency پایین و سرعت بالا دارن، انتخاب بهتری محسوب میشه.
🛠 سادگی در راهاندازی
کافکا معماری پیچیدهتری داره (Zookeeper، Brokerها و ...)، درحالیکه NATS خیلی راحتتر بالا میاد و نیاز به سرویسهای جانبی نداره.
☁️ طراحی Cloud-Native
همچنین NATS از اول برای محیطهای cloud-native و containerized مثل Kubernetes ساخته شده و خیلی خوب باهاشون جور درمیاد.
📦 انعطاف در الگوهای ارتباطی
و NATS هم از Pub/Sub پشتیبانی میکنه، هم Request/Reply، هم Queue Groups. این یعنی میتونه بسته به نیاز شما مثل یک MQ ساده یا حتی یک سیستم event-driven پیچیده عمل کنه.
🔄 استفاده در سناریوهای کوتاهعمر
کافکا بیشتر برای پردازش دادههای سنگین و ذخیره طولانیمدت مناسب هست، اما NATS عالیه برای ارتباطات لحظهای (real-time communication) بین سرویسها.
https://nats.io
NATS.io
NATS is a connective technology powering modern distributed systems, unifying Cloud, On-Premise, Edge, and IoT.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36❤🔥2
Forwarded from Armin's Notes 🪴
امروز یکم وقتم آزاد بود؛ گفتم این نوت رو بنویسم بماند به یادگار 😅
https://www.arminnotes.com/notes/topological-sort-in-data-migration
https://www.arminnotes.com/notes/topological-sort-in-data-migration
یادداشتهای آرمین
مرتبسازی توپولوژیکی؛ کاهش بیشاز 90 ساعت زمان و 3 میلیون کوئری - یادداشتهای آرمین
بهبود 99.7٪ در زمان مهاجرت دادهها با Topological Sorting — از 48 ساعت به 10 دقیقه، با صرفهجویی بیش از 3 میلیون کوئری.
❤🔥6🔥3👍2
سوال مصاحبه :
If you need to delete millions of records from a table in production database, what would you do ?
جوابش بنظرتون چیست ؟
If you need to delete millions of records from a table in production database, what would you do ?
جوابش بنظرتون چیست ؟
در سیستم های توزیع شده
چطور میتونیم ایدی یکتا یا یونیک جنریت کنیم ؟
How we can generate unique ID in distributed systems ?
چطور میتونیم ایدی یکتا یا یونیک جنریت کنیم ؟
How we can generate unique ID in distributed systems ?
👌3