Code Module | کد ماژول
1.91K subscribers
357 photos
42 videos
6 files
355 links
Hello World 🌎

<> Earth is programmable if you code it </>

Group 👇🏻
@CodeModuleGap

Contact Us 👇🏻
@MrShahiin
@neoMahan
Download Telegram
‏Trust Proxy توی Express.js چیه و دقیقاً چه کاری میکنه؟ 🤔

‏Trust Proxy یه تنظیم توی Express هست که به اپلیکیشن میگه آیا باید به اطلاعاتی که توی هدرهای X-Forwarded-For و X-Forwarded-Proto میاد، اعتماد کنه یا نه.

حالا این یعنی چی؟ یعنی وقتی برنامه بک اند یه سرور واسطه‌ای (مثل Nginx یا Cloudflare) قرار داره، IP و پروتکل واقعی کاربر توی این هدرها قرار می‌گیره. Express به‌طور پیش‌فرض به این اطلاعات اعتماد نداره اما اگه trust proxy رو فعال کنید، Express از این هدرها برای تعیین IP و پروتکل واقعی کاربر استفاده میکنه.

‏۲. Trust Proxy به چه دردی میخوره؟

وقتی که برنامه‌ شما رو یه پراکسی معکوس (Reverse Proxy) یا یه لود بالانسر اجرا میشه، در حالت عادی Express فقط IP و اطلاعاتی که از سمت اون پراکسی دریافت کرده رو می‌بینه، نه اطلاعات اصلی کاربر. این یعنی ممکنه req.ip اشتباه باشه، req.protocol به جای https مقدار http داشته باشه و کلی مشکل دیگه.

اینجاست که Trust Proxy به درد می‌خوره 👇🏻

‏- وقتی فعال بشه، Express مقدار واقعی IP کاربر رو از X-Forwarded-For میخونه.

‏- req.protocol‏ رو بر اساس X-Forwarded-Proto تنظیم میکنه. ‌‌‏
‏- req.hostname رو درست مقداردهی میکنه‏

۳. چجوری Trust Proxy رو توی Express فعال کنیم؟

خیلی ساده!
const app = express();
app.set("trust proxy", true);


با این تنظیم:

‏- req.ip مقدار واقعی آی‌پی کاربر رو میده.
‏- req.protocol مقدار واقعی http یا https رو نشون میده.

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


‏ ۴. Trust Proxy چه مقدارهایی میگیره؟


مقدار true همیشه بهترین گزینه نیست. Express چند مدل مقدار رو قبول میکنه:

app.set("trust proxy", false);  // پیش‌فرض، هیچ پراکسی‌ای رو قبول نمی‌کنه.
app.set("trust proxy", true); // به همه پراکسی‌ها اعتماد میکنه.
app.set("trust proxy", "loopback"); // فقط به 127.0.0.1 اعتماد میکنه.
app.set("trust proxy", "127.0.0.1"); // فقط به این IP خاص اعتماد میکنه.
app.set("trust proxy", ["192.168.1.1", "10.0.0.1"]); // لیستی از پراکسی‌های قابل‌اعتماد.
app.set("trust proxy", 2); // از آخرین دو پراکسی مقدار رو می‌خونه.


- مقدار 2 یعنی چی؟
وقتی مقدار 2 رو میدید، Express میاد ip واقعی کاربر رو از دو پراکسی آخر توی X-Forwarded-For استخراج میکنه. این کار به درد جایی میخوره که چند تا سرور بین کاربر و اپلیکیشن هستن.

- پس مقدار true بدیم یا نه؟
بهتره فقط به پراکسی‌هایی که می‌شناسی اعتماد کنید. مثلاً اگه سرور فقط Cloudflare یا Nginx قرار داره، میتونید فقط به اون آی‌پی‌ها اعتماد کنین تا از IP Spoofing جلوگیری بشه.


‏Trust Proxy یه تنظیم مهمه که وقتی برنامتون یه پراکسی مثل Nginx یا Cloudflare باشه، کمک میکنه Express اطلاعات واقعی کاربر رو تشخیص بده. اما باید دقت کنی که به هر پراکسی‌ای اعتماد نکنید! برای امنیت بیشتر، فقط به آی‌پی‌هایی که واقعاً Proxyهای خودتون هستن اجازه بدید.

برای جزئیات بیشتر میتونید به مستندات رسمی Express در مورد TrustProxy مراجعه کنید، که این جنبه ها رو با عمق بیشتری توضیح میده.

#nodejs #express
@CodeModule
13👌3