⏱️ حملهی زمانی (Timing Attack) تو Node.js چیه و چطوری جلوش رو بگیریم؟
Timing Attack یعنی هکر فقط با اندازهگیری زمان پاسخ سرور، میتونه حدس بزنه چه بخشهایی از یه رمز یا توکن درسته!
مثلاً وقتی مقایسهی رمز از چپ به راست انجام میشه، سرور همونجا که mismatch پیدا کنه، متوقف میشه. این باعث میشه زمان پاسخ متغیر باشه و از همین زمان، اطلاعات لو بره.
مثال:
مقایسهی بالا variable-time هست و میتونه اطلاعات رمز رو لو بده.
راهحلها 🔐
✅ ۱. استفاده از timingSafeEqual
مقایسهی ثابت زمان، فرق نمیکنه رشته چقدر شباهت داشته باشه.
🧂 ۲. استفاده از هشهای کند مثل bcrypt یا scrypt
با این کار، brute-force کردن رمز زمانبر میشه.
🔄 ۳. اجتناب از شرطهای مبتنی بر اطلاعات حساس
این مدل شرطها هم لو میدن که رمز از کجا شروع شده.
🕒 ۴. تاخیر ثابت بذار برای همهی پاسخها
Timing Attack یعنی هکر فقط با اندازهگیری زمان پاسخ سرور، میتونه حدس بزنه چه بخشهایی از یه رمز یا توکن درسته!
مثلاً وقتی مقایسهی رمز از چپ به راست انجام میشه، سرور همونجا که mismatch پیدا کنه، متوقف میشه. این باعث میشه زمان پاسخ متغیر باشه و از همین زمان، اطلاعات لو بره.
مثال:
if (input === secretToken) {
// ...
}مقایسهی بالا variable-time هست و میتونه اطلاعات رمز رو لو بده.
راهحلها 🔐
✅ ۱. استفاده از timingSafeEqual
import { timingSafeEqual } from 'node:crypto';
const a = Buffer.from(userInput, 'utf8');
const b = Buffer.from(secret, 'utf8');
if (a.length === b.length && timingSafeEqual(a, b)) {
// امنه
}مقایسهی ثابت زمان، فرق نمیکنه رشته چقدر شباهت داشته باشه.
🧂 ۲. استفاده از هشهای کند مثل bcrypt یا scrypt
با این کار، brute-force کردن رمز زمانبر میشه.
🔄 ۳. اجتناب از شرطهای مبتنی بر اطلاعات حساس
if (password.startsWith('admin')) {
// خطرناک!
}این مدل شرطها هم لو میدن که رمز از کجا شروع شده.
🕒 ۴. تاخیر ثابت بذار برای همهی پاسخها
const delay = 200; // ms
const elapsed = Date.now() - start;
await new Promise(r => setTimeout(r, Math.max(0, delay - elapsed)));
Code & Life
https://www.youtube.com/watch?v=_K-eupuDVEc
این ویدیو یه ماک اینترویو عه که توش یکی از Software Engineer گوگل شروع میکنه دیزاین کردن پروداکت Spotify . نکات جالبی داره ببینین
❤1
پریروز توی مسابقه ict یه چالشی داشتم که نیاز بود insert و update روی دیتابیس رو capture کنم.
یکی از بچه ها ابزار debezium رو معرفی کرد که دقیقا مناسب همین کار هست. میاد change های روی دیتابیس رو با توجه به کانفیگی که بهش میدین produce میکنه روی یه تاپیک کافکا
یکی از بچه ها ابزار debezium رو معرفی کرد که دقیقا مناسب همین کار هست. میاد change های روی دیتابیس رو با توجه به کانفیگی که بهش میدین produce میکنه روی یه تاپیک کافکا
Code & Life
پریروز توی مسابقه ict یه چالشی داشتم که نیاز بود insert و update روی دیتابیس رو capture کنم. یکی از بچه ها ابزار debezium رو معرفی کرد که دقیقا مناسب همین کار هست. میاد change های روی دیتابیس رو با توجه به کانفیگی که بهش میدین produce میکنه روی یه تاپیک کافکا
GitHub
GitHub - erfuuan/logixon
Contribute to erfuuan/logixon development by creating an account on GitHub.
Code & Life
https://github.com/erfuuan/logixon
اینم کدی که برای اون پروژه نوشتم
Code & Life
https://github.com/ashishps1/awesome-system-design-resources
داشتم درباره سیستم دیزاین مطالعه میکردم که به این ریپوزیتوری توی گیتهاب برخوردم
داخلش توضیح داده که اگر تازه شروع کردین به خوندن این لینک کمک میکنه این ۳۰ کانپست های اولیه رو سریع یه مرور کنین که مطالب رو بهتر متوجه بشین :
Code & Life
داخلش توضیح داده که اگر تازه شروع کردین به خوندن این لینک کمک میکنه این ۳۰ کانپست های اولیه رو سریع یه مرور کنین که مطالب رو بهتر متوجه بشین :
blog.algomaster.io
System Design was HARD until I Learned these 30 Concepts
System Design can feel overwhelming especially when you're just starting out and don’t know where to begin.
🔥1
خاکستری، خاکستری، خاکستری
صبح، مِه، باران
اَبر، نگاه، خاطره
در من ترانهای نبود، تو خواندی
در من آینهای نبود، تو دیدی
ریشهای بودم در خوابِ خاکهای مُتُبَرک
بیباران، در نگاه تو سبز شدم
برق از چشمانم برخواست، نگاهم بارانی شد
گونههایت خیسِ باران، چشمهایت آفتابی
گرگها میزایند، برهها را دریابیم
تو، با چشمانت مرا بنواز
چوبدست چوپانیم سلاحی کارگر خواهد شد
بعد از جنگ، با چوبدستم
انجیرهای تازه را برای تو خواهم چید
با تو خواهم ماند، با تو خواهم خواند
و تورا در بُهتِ آفتابیات خواهم بوسید
اگر اَبرها بگذارند…
صبح، مِه، باران
اَبر، نگاه، خاطره
در من ترانهای نبود، تو خواندی
در من آینهای نبود، تو دیدی
ریشهای بودم در خوابِ خاکهای مُتُبَرک
بیباران، در نگاه تو سبز شدم
برق از چشمانم برخواست، نگاهم بارانی شد
گونههایت خیسِ باران، چشمهایت آفتابی
گرگها میزایند، برهها را دریابیم
تو، با چشمانت مرا بنواز
چوبدست چوپانیم سلاحی کارگر خواهد شد
بعد از جنگ، با چوبدستم
انجیرهای تازه را برای تو خواهم چید
با تو خواهم ماند، با تو خواهم خواند
و تورا در بُهتِ آفتابیات خواهم بوسید
اگر اَبرها بگذارند…
❤1
Code & Life
خاکستری، خاکستری، خاکستری صبح، مِه، باران اَبر، نگاه، خاطره در من ترانهای نبود، تو خواندی در من آینهای نبود، تو دیدی ریشهای بودم در خوابِ خاکهای مُتُبَرک بیباران، در نگاه تو سبز شدم برق از چشمانم برخواست، نگاهم بارانی شد گونههایت خیسِ باران،…
بیشترین چیزی که این روزها داره توی ذهنم زمزمه میشه این شعره
👏1