️ CodeNight | آموزش برنامه نویسی
841 subscribers
8 photos
1 file
64 links
🚀 کدنایت | آموزش برنامه‌نویسی از صفر تا صد
گولنگ، جاوااسکریپت، نودجی اس، وب، اپلیکیشن و الگوریتم
🧑🏻‍💻 آموزش پروژه‌محور و رایگان
🤖آموزش هوش مصنوعی و vibe coding و Ai engineering

💻 مناسب مبتدی تا پیشرفته
🌐 codenight.ir
Download Telegram
👨🏻‍💻💚 روز برنامه‌نویس مبارک!

امروز از همه‌ی برنامه‌نویس‌های خلاق و پرتلاش تشکر می‌کنیم؛ کسانی که با دانش و پشتکار، ایده‌ها را به راهکارهای واقعی تبدیل می‌کنند و از هر خطا، فرصتی برای رشد می‌سازند. 🚀

برایتان یادگیری مداوم، پیشرفت حرفه‌ای و موفقیت‌های بزرگ آرزو داریم! 💻❤️
❤7
🔥 ورژن NestJS 12 منتشر شده؛ فقط یک آپدیت معمولی نیست
ورژن NestJS 12 با چند تغییر مهم آمده:
✅ پکیج‌های ESM-ready ✅ پشتیبانی از Standard Schema برای Validation و Serialization ✅ ابزار CLI بازطراحی‌شده ✅ پکیج های Observability بومی با @nestjs/observe ✅ تست نویسی با Vitest و oxlint به‌عنوان انتخاب‌های جدید برای پروژه‌های تازه

نکته مهم: مهاجرت پروژه فعلی شما به ESM اجباری نیست و CommonJS همچنان پشتیبانی می‌شود.
همچنین برای NestJS 12 حداقل Node.js 20.19+ یا 22.12+ لازم است.

قبل از Upgrade هم می‌توانید اجرا کنید:
nest upgrade --dry-run

تا تغییرات را بدون دستکاری پروژه ببینید.

کانال آموزشی کدنایت | آموزش برنامه نویسی
https://t.me/codenight_ir
❤4
یکی از دردسرهای Production در Go: Goroutine Leak

در Go 1.27 قابلیت جدیدی برای Goroutine Leak Profiling اضافه شده که تشخیص Goroutineهایی را که ایجاد شده‌اند اما دیگر عملاً پیشرفتی ندارند ساده‌تر می‌کند.

در Go 1.27 همچنین Generic Methodها، encoding/json/v2، پکیج UUID و بهبودهایی در Runtime و Memory Allocation آورده است.

چرا مهم است؟

یک سرویس ممکن است ظاهراً درست کار کند، اما به‌مرور تعداد Goroutineها بالا برود و مصرف Memory و Resource افزایش پیدا کند.

برای Backend Developerها، Monitoring تعداد Goroutineها باید بخشی از Observability سرویس باشد.



کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
وقتی سیستم شما به ۷۰ میلیون Request در ثانیه برسد چه اتفاقی می‌افتد؟
شرکت OpenAI جزئیات معماری Habitat، پلتفرم Online Storage خودش را منتشر کرده؛ سیستمی که بیش از 70M درخواست در ثانیه و بیش از 500PB داده را مدیریت می‌کند.

یکی از نکات جالب معماری این سیستم:
شرویس Habitat ابتدا یک Library ساده بود، اما با رشد سیستم به یک Service مستقل تبدیل شد.

در مسیر Scale هم موضوعاتی مثل:
Connection Pool Management Load Balancing Rate Limiting Tail Latency Downstream Protection
اهمیت زیادی پیدا کردند.

حتی OpenAI بازنویسی Python به Rust را حدود یک سال عقب انداخت تا ابتدا Bottleneckهای مهم‌تر را حل کند.

📌 درس مهم معماری:
همیشه اولین راه‌حل پرفورمنس Rewrite نیست.

کانال آموزشی کدنایت | آموزش برنامه نویسی
https://t.me/codenight_ir
👍2
درس دوم - #گولنگ

ساختار یک برنامه Go
تو درس قبلی با زبان Go و کاربردهاش آشنا شدیم. حالا وقتشه اولین قدم عملی رو برداریم و ببینیم یه برنامه ساده Go از چه بخش‌هایی تشکیل شده.
• هر فایل Go با package main شروع میشه که میگه این برنامه قابل اجراست •

با import پکیج‌های موردنیاز رو وارد برنامه می‌کنیم، مثلاً fmt برای چاپ خروجی • تابع func main() نقطه شروع اجرای هر برنامه Go هست • برای نمایش خروجی از fmt.Println() استفاده می‌کنیم • برنامه رو با دستور go run file.go تو ترمینال اجرا می‌کنیم
package main

import "fmt"

func main() {
// این پیام موقع اجرای برنامه چاپ میشه
fmt.Println("سلام از Go!")
}

نکته مهم اینه که Go خیلی به ساختار و نظم اهمیت میده؛ برخلاف خیلی از زبان‌های دیگه نمیشه بخش‌هایی مثل package رو نادیده گرفت. فردا با متغیرها و انواع داده‌ای تو Go آشنا می‌شیم.

کانال آموزشی کدنایت | آموزش برنامه‌نویسی

https://t.me/codenight_ir
❤1🔥1
#جاوااسکریپت - درس سوم

عملگرها و عملیات‌ها در جاوااسکریپت
تو درس قبلی با متغیرها و انواع داده‌ای آشنا شدیم. حالا وقتشه یاد بگیریم چطور با اون مقادیر کار کنیم و روشون عملیات انجام بدیم.

• عملگرهای ریاضی: +، -، *، / و %

(باقیمانده تقسیم) برای محاسبات عددی •

• عملگرهای مقایسه‌ای: == و != فقط مقدار رو مقایسه می‌کنن، ولی === و !== مقدار و نوع داده رو هر دو چک می‌کنن

• عملگرهای منطقی: && (و)، || (یا) و ! (نقیض) برای ترکیب شرط ها

•‌ عملگرهای انتسابی مثل += و -= کار نوشتن کد رو کوتاه‌تر می‌کنن

اولویت اجرا مهمه: ضرب و تقسیم قبل از جمع و تفریق انجام میشن، دقیقاً مثل ریاضی مدرسه
let price = 50000;
let discount = 5000;
let finalPrice = price - discount;

console.log(finalPrice); // 45000
console.log(finalPrice === 45000); // true
console.log(price > 10000 && discount > 0); // true

یه اشتباه رایج بین تازه‌کارها استفاده از == به‌جای === هست که می‌تونه نتایج غیرمنتظره بده؛ همیشه سعی کن از === استفاده کنی. فردا سراغ ساختارهای شرطی می‌ریم و می‌بینیم چطور از همین عملگرها برای تصمیم‌گیری تو کد استفاده کنیم.

کانال آموزشی کدنایت | آموزش برنامه‌نویسی

https://t.me/codenight_ir
❤1
یک کامپوننت داخلی React برای انیمیشن‌های نرم، بدون هیچ کتابخانه‌ی اضافه

اگر تا حالا برای انیمیت کردن ورود و خروج کامپوننت‌ها سراغ framer-motion یا کدنویسی دستی با CSS transition رفته‌اید، خبر خوب اینه که دیگه لازم نیست.

در React نسخه‌ی ۱۹.۳ (منتشرشده ۹ سپتامبر ۲۰۲۶) کامپوننت ViewTransition رو به‌صورت رسمی و پایدار عرضه کرده؛ یعنی بعد از یک دوره‌ی طولانی experimental بودن، حالا می‌شه توی پروژه‌ی پروداکشن ازش استفاده کرد.
این کامپوننت روی View Transitions API خود مرورگر سوار شده و خودش تشخیص می‌ده که تغییر درخت کامپوننت‌ها چه نوعیه:
اضافه‌شدن (enter)، حذف‌شدن (exit)، تغییر محتوا یا استایل (update)، یا جابه‌جایی یک المان بین دو مکان مختلف (share).

رفتار پیش‌فرضش یک کراس‌فید نرمه، ولی کاملاً قابل شخصی‌سازی با CSS View Transition Classes یا Web Animations API هست.

نکته‌ی جالب‌تر، تابع addTransitionType هست که می‌ذاره انیمیشن رو بر اساس علت تغییر state مشخص کنید؛ مثلاً برای اسلایدر بگید حرکت به جلو از راست بیاد و حرکت به عقب از چپ.

import { ViewTransition, startTransition, addTransitionType } from 'react';

function nextSlide() {
startTransition(() => {
addTransitionType('next');
setCurrentSlide(c => c + 1);
});
}

<ViewTransition
enter={{ next: 'from-right', previous: 'from-left' }}
exit={{ next: 'to-left', previous: 'to-right' }}
>
<Page />
</ViewTransition>


این کامپوننت با startTransition، Suspense و useDeferredValue هم به‌خوبی کار می‌کنه، یعنی می‌تونید حتی fallback یک Suspense رو هم به محتوای نهایی به‌شکل نرم انیمیت کنید.

#React #فرانت_اند #برنامه_نویسی #جاوااسکریپت #وب

Sources:
• React 19.3

کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
❤5
یکی از قابلیت‌هایی که Go Developerها مدت‌ها منتظرش بودند: Generic Methods

در Go 1.27 امکان تعریف Methodهایی با Type Parameterهای خودشان را اضافه کرده است؛ یعنی Genericها دیگر فقط محدود به Type و Function نیستند.

این قابلیت مخصوصاً هنگام طراحی Library و APIهای reusable می‌تواند کدهای تمیزتری ایجاد کند.

اما یک هشدار مهم:
در گو Generic بودن لزوماً به معنی معماری بهتر نیست.
اگر Type Parameter فقط باعث پیچیده‌تر شدن API شود و مزیت واقعی Type Safety یا Reusability نداشته باشد، Interface یا حتی Function ساده ممکن است انتخاب بهتری باشد.

📌 قانون خوب:
اول ساده‌ترین API ممکن را طراحی کن؛ Generic را وقتی اضافه کن که واقعاً duplication یا type-safety problem را حل می‌کند.

منبع رسمی: Go Blog
#گولنگ #گو #go
کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
هر چیزی را نباید داخل Context Window نگه داریم

یکی از اشتباهات رایج در ساخت AI Agent این است که تمام تاریخچه گفتگو، نتایج Toolها و اطلاعات قبلی را دائماً داخل Context مدل قرار دهیم.

با طولانی‌شدن Session، سه مشکل ایجاد می‌شود:

Token Cost ↑
Latency ↑
Noise ↑

معماری بهتر، حافظه Agent را به چند لایه تقسیم می‌کند:

Working Memory → Short-term Context

Conversation Summary → Compressed Memory

Long-term Memory → Database / Vector DB

Business Data → Source of Truth

نکته مهم این است که Vector Database هم نباید به «محل ذخیره همه‌چیز» تبدیل شود. اطلاعات ساختاریافته مثل سفارش، پروفایل یا وضعیت پروژه بهتر است همچنان از Database اصلی خوانده شوند.

📌 خود Context Window حافظه دائمی Agent نیست؛ یک Working Memory محدود و گران‌قیمت است.

کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
👍2👎1
🟢 اگر از Stream استفاده می‌کنی؟ پس باید Backpressure را هم بشناسی

فرض کنید در Node.js یک فایل بزرگ را می‌خوانیم و داده را به مقصد دیگری می‌فرستیم.

اگر Producer سریع‌تر از Consumer داده تولید کند:

Producer >>> Consumer

داده شروع به جمع‌شدن در Memory می‌کند.

اینجاست که مفهوم Backpressure اهمیت پیدا می‌کند.

در Node.js Streamها مکانیزم‌هایی دارند که به Producer اجازه می‌دهند وقتی Consumer عقب افتاده، سرعت تولید را کاهش دهد.

به‌جای مدیریت دستی:

read → write → buffer → memory pressure

در بسیاری از سناریوها بهتر است از:

stream.pipeline()

استفاده شود تا جریان داده، Error Handling و Cleanup قابل‌کنترل‌تر شوند.

📌 در Stream فقط برای «کم‌کردن Memory» نیست؛ Flow Control بخش مهم‌تر ماجراست.

مستندات نودجی اس درباره Stream در کدنایت⁠

کانال آموزشی کدنایت | آموزش برنامه نویس

https://t.me/codenight_ir
❤2👍1
سیستم Cache می‌تواند Database را نجات دهد؛ یا یک‌دفعه همه Requestها را روی آن بریزد!

فرض کنید یک Query پرمصرف را ۵ دقیقه Cache کرده‌ایم.
Cache Expire می‌شود و همان لحظه ۱۰۰۰ Request می‌رسد.

اگر همه ببینند Cache خالی است:
1000 Requests → Database
این مشکل را Cache Stampede می‌نامند.

یکی از Patternهای کاربردی، Request Coalescing یا Single Flight است:

اولین Request داده را Refresh می‌کند و بقیه منتظر همان نتیجه می‌مانند.

1000 Requests → 1 DB Query → Cache → 1000 Responses

راهکارهای دیگر:
TTL Jitter Stale-While-Revalidate Distributed Lock
📌 در Cache Strategy فقط انتخاب TTL نیست؛ باید رفتار سیستم هنگام Cache Miss همزمان را هم طراحی کنیم.

کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
👍5❤1🔥1
مصرف CPU پایین است، ولی API کند شده؛ مشکل شاید Event Loop باشد

در Node.js یک Request می‌تواند بدون مصرف عجیب CPU، Event Loop را برای مدت زیادی Block کند.

مثلاً:

JSON پردازش بسیار بزرگ
اجرای Regex سنگین
اجرای Loop محاسباتی
کار CPU-bound داخل Request

نتیجه؟

حالا Request های دیگر باید منتظر بمانند.

در توسعه ی اپ های مبتنی بر نودجی اس فقط این‌ها کافی نیستند:

CPU + RAM + Request Count

در Production بهتر است Event Loop Delay / Utilization هم مانیتور شود.

در Node.js برای این کار APIهایی مثل:

monitorEventLoopDelay()

و

eventLoopUtilization()

را در perf_hooks ارائه می‌دهد.

📌 اگر کار CPU-heavy دارید، راه‌حل همیشه افزایش Replica نیست؛ گاهی باید Task را به Worker Thread یا Background Worker منتقل کنید.


دوره رایگان مرتبط با پرفورمنس و worker thread در کدنایت ⁠

کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
❤4
🎯 این اسم ها یا سه واژه این روزا خیلی قاطی استفاده می‌شن، ولی هرکدوم یه سطح متفاوت از کنترل و مسئولیت رو نشون می‌دن. فرقشون رو بدونی، انتخاب درستی تری برای هر تسک می‌کنی.

🧩 AI-Assisted Coding
کلی‌ترین اصطلاح: هر جایی که AI به‌صورت نقطه‌ای کمکت می‌کنه (اتوکامپلیت، توضیح کد، ریفکتور یک تابع). خط به خط دست خودته، AI فقط دستیاره.

🌀 Vibe Coding
طبق تعریف اصلی Karpathy: با زبان طبیعی به AI می‌گی چی می‌خوای، کد رو کامل ریویو نمی‌کنی، فقط نتیجه رو تست می‌کنی. مالکیت کد میفته دست AI. عالیه برای پروتوتایپ و MVP، خطرناکه برای production.

🤖 Agentic Engineering
تو هدف و قیدها (constraints) رو مشخص می‌کنی، ایجنت‌ها plan/code/test رو خودشون انجام می‌دن، ولی زیر نظارت ساختاریافته‌ی تو: code review، تست خودکار، معماری همچنان مسئولیت خودته.
مثال یه پرامپت برای همون تسک با دو رویکرد:

# به سبک  👇Vibe Coding

"یه endpoint برای ثبت سفارش بساز که کار کنه"

# به سبک 👇Agentic Engineering

"یه POST /orders در NestJS با TypeORM بساز:
- DTO با class-validator
- تراکنش روی MySQL برای کسر موجودی
- تست unit برای rollback در خطا
بعد از ساخت، diff رو نشونم بده."


💡 نکته طلایی: مشکل کلمه‌ها نیست، مشکل جایی‌ه که سبک اشتباه رو برای تسک اشتباه انتخاب کنی. برای production همیشه سمت Agentic Engineering برو، نه Vibe Coding خام.

کانال آموزشی کدنایت | آموزش برنامه نویسی
https://t.me/codenight_ir


#VibeCoding #کدنایت #Agentic_Engineering #AI_Assisted_Coding #هوش_مصنوعی
👏1
تیم Node.js درحال وارد کرد جدی تر Benchmarking در Runtime می‌باشد

ورژن Node.js 26.9.0 در ۱۶ سپتامبر منتشر شد و یکی از قابلیت‌های جالبش API آزمایشی جدید node:bench است.

در همین نسخه چند قابلیت مهم دیگر هم آمده:
چند قابلیت جدید و مهم در Node.js:

• پکیج node:bench برای Benchmark
برای تست و مقایسه سرعت کدها؛ مثلاً بفهمیم کدام الگوریتم یا روش پیاده‌سازی سریع‌تر اجرا می‌شود.

• Web Workers Support
برای اجرای کارهای سنگین در Threadهای جدا و جلوگیری از بلاک شدن برنامه.

• FFI به‌صورت پیش‌فرض
برای ارتباط مستقیم‌تر Node.js با توابع و کتابخانه‌های Native مثل C/C++.

• Virtual File System برای CJS و ESM
امکان مدیریت و شبیه‌سازی فایل‌ها برای هر دو سیستم ماژول CommonJS و ES Modules.

• Generic MAC API در Crypto
یک API عمومی‌تر برای تولید Message Authentication Code و کارهای امنیتی مرتبط با رمزنگاری.

همچنین APIهای جدیدی برای تحلیل Histogram در perf_hooks اضافه شده‌اند.

برای Backend Developerها، node:bench می‌تواند مسیر Benchmarkهای قابل‌تکرار را ساده‌تر کند.

📌 نکته: Node.js 26 ورژن Current است؛ برای Production بدون بررسی compatibility مستقیماً Upgrade نکنید و حتما از ورژن LTS استفاده کنید

کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
👋 به کدنایت خوش اومدی 💚

کدنایت یک پلتفرم آموزش برنامه‌نویسی و توسعه نرم‌افزاره؛ از شروع مسیر تا مباحث حرفه‌ای.

اینجا درباره این موضوعات محتوا داریم:

💻 مباحث Backend و Frontend
🤖 هوش مصنوعی و vibe coding و AI Engineering
🟢 آموزش Node.js و NestJS
🐹 آموزش پایه تا پیشرفته Golang
🏗 مهندسی و معماری نرم‌افزار
📄 رزومه، بازار کار و مسیر شغلی
🛠 ابزارها و تکنولوژی‌های جدید

در وب‌سایت کدنایت هم می‌تونی به دوره‌ها، مقالات، آموزش‌های رایگان و ابزارهای آموزشی دسترسی داشته باشی.

🌐 codenight.ir
📢 @codenight_ir

از شروع برنامه‌نویسی تا حرفه‌ای شدن، کنار کدنایت باش.
❤6
🛡️ اعتبارسنجی ورودی‌ها در Express.js با Zod
یکی از مهم‌ترین بخش‌های ساخت API امن و قابل اعتماد، بررسی داده‌های ورودی کاربره.
با استفاده از Zod می‌تونیم خیلی ساده مشخص کنیم هر ورودی چه ساختاری داشته باشه، چه فیلدهایی اجباری باشن و چه محدودیت‌هایی روی داده‌ها اعمال بشه.
مثلاً قبل از اینکه اطلاعات وارد منطق برنامه یا دیتابیس بشن، می‌تونیم بررسی کنیم:

• ایمیل معتبره یا نه
• مقدارها نوع درستی دارن یا نه
• فیلدهای ضروری ارسال شدن یا نه
• داده‌ها محدودیت‌های تعریف‌شده رو رعایت می‌کنن یا نه

در این مقاله نحوه پیاده‌سازی Validation در Express.js با Zod رو بررسی کردیم 👇

https://codenight.ir/articles/express-validation-zod

کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
❤3
️ CodeNight | آموزش برنامه نویسی pinned «👋 به کدنایت خوش اومدی 💚 کدنایت یک پلتفرم آموزش برنامه‌نویسی و توسعه نرم‌افزاره؛ از شروع مسیر تا مباحث حرفه‌ای. اینجا درباره این موضوعات محتوا داریم: 💻 مباحث Backend و Frontend 🤖 هوش مصنوعی و vibe coding و AI Engineering 🟢 آموزش Node.js و NestJS 🐹 آموزش…»
🔓 ریسک امنیتی که Vibe Coding با خودش می‌آورد

سرعت وسوسه‌انگیز Vibe Coding یک قیمت پنهان دارد: کد تولیدشده اغلب کار می‌کند، اما امن نیست. این فاصله‌ی بین «کار کردن» و «امن بودن» همین حالا موضوع داغ تحقیقات امنیتی است.

📊 عدد نگران‌کننده
پژوهش Carnegie Mellon نشان داد ۶۱٪ کدهای تولیدشده با AI به‌درستی اجرا می‌شوند، اما فقط ۱۰.۵٪ از بازبینی امنیتی سربلند بیرون می‌آیند. یعنی اکثر کدهایی که «کار می‌کنند»، حفره امنیتی هم دارند.

⚖️ چرا این‌طور می‌شود؟
تست Veracode نشان داد وقتی مدل بین یک پیاده‌سازی امن و یک ناامن حق انتخاب دارد، در ۴۵٪ موارد گزینه ناامن‌تر را پیشنهاد می‌دهد؛ چون رایج‌ترین الگو در داده‌های آموزشی همیشه امن‌ترین الگو نیست.

🔬 شاهد میدانی
تیم Georgia Tech با ابزار Vibe Security Radar روی بیش از ۴۳ هزار گزارش امنیتی، ده‌ها آسیب‌پذیری بحرانی (command injection، bypass احراز هویت، SSRF) را ردیابی کرد که مستقیماً از کد AI-generated آمده بود — و روند در سال ۲۰۲۶ به‌شدت صعودی است.

💻 مثال ملموس (NestJS + TypeORM):

// ❌ الگویی که مدل‌ها گاهی پیشنهاد می‌دهند
const user = await this.repo.query(
`SELECT * FROM users WHERE email='${email}'`
);

// ✅ همیشه پارامتری بنویس
const user = await this.repo.query(
"SELECT * FROM users WHERE email = ?",

[email]
);


🎯 نکته طلایی: هیچ‌وقت کدی که AI نوشته را بدون یک پاس امنیتی جدا (SAST یا review دستی روی auth و input) مرج نکن. سرعت Vibe Coding نباید جای Code Review را بگیرد.

کانال آموزشی کدنایت | آموزش برنامه نویسی
https://t.me/codenight_ir

#VibeCoding #کدنایت #امنیت_کد #AI_Agent #برنامه_نویسی #NestJS
.
❤3
👨🏻‍💻 مفاهیمی که هر وایب‌کدری باید بدونه

اگه با Codex، Claude Code، Cursor یا Copilot کد می‌زنی، این ۳ مفهوم رو باید بشناسی:

🔹 Token
مدل‌های AI متن، کد و فایل‌ها رو به تکه‌های کوچیکی به اسم Token تبدیل می‌کنن. هرچی اطلاعات بیشتری به مدل بدی، Token بیشتری مصرف می‌شه.

🔹 Context
تمام اطلاعاتیه که AI در اون لحظه برای تصمیم‌گیری در اختیار داره؛ مثل Prompt، پیام‌های قبلی، فایل‌های پروژه، کدها، Skillها و خروجی ابزارها.

🔹 Context Window
حداکثر حجمی از Tokenهاست که مدل می‌تونه هم‌زمان پردازش کنه. وقتی این فضا پر بشه، ممکنه اطلاعات قدیمی‌تر از Context خارج بشن و AI بعضی جزئیات قبلی پروژه رو فراموش کنه.

💡 پس در Vibe Coding فقط Prompt مهم نیست؛ باید یاد بگیری Context رو درست مدیریت کنی، اطلاعات اضافه رو حذف کنی و اطلاعات مهم پروژه رو در دسترس AI نگه داری.

این یکی از تفاوت‌های مهم بین «کد زدن با AI» و مهندسی نرم‌افزار با AI هست.

کانال آموزشی کدنایت | آموزش برنامه نویسی 👇👇

https://t.me/codenight_ir
https://t.me/codenight_ir

#AI #VibeCoding #Context #Token #LLM #Programming
سرویس Node.js هنگ کرده؛ قبل از Restart یک Snapshot از وضعیتش بگیر

در Node.js یک قابلیت Stable و بسیار کاربردی به نام Diagnostic Report وجود دارد که گاهی کمتر از چیزی که باید استفاده می‌شود.

در Diagnostic Report می‌تواند اطلاعاتی مثل:

🔵 JavaScript / Native Stack

🔵 Heap Statistics

🔵 Resource Usage

🔵 libuv Handles

🔵 CPU / Memory

را داخل یک فایل JSON ذخیره کند.

مثلاً می‌توان تنظیم کرد هنگام Fatal Error یا Signal گزارش ساخته شود:

--report-on-fatalerror

--report-on-signal

یا داخل برنامه:

process.report.writeReport()

📌 این قابلیت برای باگ‌هایی که فقط در Production اتفاق می‌افتند بسیار ارزشمند است.

یک نکته امنیتی هم مهم است: Report می‌تواند Environment Variables داشته باشد؛ Node.js گزینه --report-exclude-env را برای حذف آن‌ها ارائه می‌دهد.


کانال آموزشی کدنایت | آموزش برنامه نویسی 👇👇

https://t.me/codenight_ir
https://t.me/codenight_ir
🛡 چطور با چند خط کانفیگ Nginx، جلوی اجرای Web Shell در پوشه آپلود رو بگیریم؟

بیش از ۷۰٪ نفوذها به سایت‌ها و سیستم‌های مدیریت محتوا (از جمله وردپرس و لاراول) و اپلیکیشن‌ها، سوءاستفاده از قابلیت آپلود فایله.

مهاجم سعی می‌کنه فایلی با پسوند اجرایی یا نام‌های فریب‌دهنده مثل:

shell.php.jpg
backdoor.phtml
script.cgi

داخل پوشه‌هایی مثل uploads، files یا storage قرار بده و بعد از طریق URL مستقیماً به اون فایل دسترسی پیدا کنه.

اگر این پوشه‌ها فقط برای نگهداری تصاویر، ویدیوها و فایل‌های کاربران ساخته شدن، منطقیه که هیچ اسکریپتی اجازه اجرا داخلشون نداشته باشه.

در Nginx می‌تونیم این مسیر رو با یک Rule ساده محدود کنیم:

# جلوگیری از اجرای فایل‌های اسکریپتی داخل پوشه‌های آپلود

location ~* /(?:uploads|files|storage)/.*\.(?:php[0-9]?|phtml|pl|py|cgi|sh|bash)$ {
deny all;
return 403;
}


💡 چه اتفاقی میفته؟
فایل‌های معمولی مثل عکس، ویدیو و PDF همچنان بدون مشکل در دسترس هستن؛ اما اگر کسی موفق بشه یک Web Shell یا فایل اجرایی داخل این مسیرها آپلود کنه، درخواست دسترسی به اون فایل با 403 Forbidden متوقف میشه.

یعنی حتی اگر مرحله‌ی Upload Validation جایی اشتباه عمل کنه، یک لایه امنیتی دیگه در سطح Nginx جلوی اجرای فایل رو می‌گیره.
⚠️ البته این تنظیم به‌تنهایی کافی نیست. در کنار اون باید نوع فایل، پسوند، MIME Type، نام فایل و محل ذخیره‌سازی فایل‌های آپلودی رو هم سمت Backend به‌درستی کنترل کنید.

امنیت خوب معمولاً نتیجه‌ی یک Rule نیست؛ نتیجه‌ی چند لایه دفاعیه. 🔐

کانال آموزشی کدنایت | آموزش برنامه نویسی 👇
https://t.me/codenight_ir
👍2