My Back-End Experience❤️
Open in Telegram
روزمرگی های یک Backend devloper https://t.me/my_backend_experience
Show more164
Subscribers
-124 hours
-17 days
-530 days
Posts Archive
برای امروز کافیه فعلا همین رو داشته باشیم تا بعد دوباره یک سناریو تکمیل تری پیش بریم که کامل بشه 🍺
این به این حالت میشه که ما به درخواست های ورودی یک جی پی اس میزنیم و اون ها رو ترک میکنیم
و باعث میشه که بتونیم به ایپی دقیق واقعی دسترسی داشته باشیم
حالا با دسترسی به ایپی دقیق تر میتونیم حتی یک middelware داشته باشیم که درخواست از ایپی مشخصی رو ببندیم
حالا این چرا اهمیت داشت گفتیم ؟ چرا لوپ بک مهم شد؟
نیاز به تکرار نداریم که دقیقا الان ایپی ها زمانی پروکسی میشن به چه شکل میشه
حالا این مثال برسی کنیم
X-Forwarded-For: 203.0.113.42, 198.51.100.1, 127.0.0.1اولین ایپی از سمت راست دقیقا ایپی هستش که نزدیک ترین به اپلیکیشن خودمون یعنی از پروکسی کننده اومده! اما اولی از سمت چپ ایپی اورجینالی که یک درخواست کننده زده اما ما باید فقط فقط ایپی هایی رو اجازه بدیم که بهشون اعتماد داریم و گرنه هر هدری میشه ایپی هاش دستکاری بشه
حالا میخوام یکم دیگه عمیق بشیم و یه یاد اوری بکنیم!
loopback , ip
باهم برسی کنیم که دقیقا چی بودن ،چون درک درست زمانی که بشه تا جایی که جا داره عمیق شد
ip
به درک خیلی ساده یعنی ادرس دیوایسی که به اینترنت وصل میشه
loopback
ادرس ایپی که دیوایس ها ست میکنن روی خودشون تا بتونن بدون ارسال کردن دیتا به خودشون درخواست بزنن که معروف ترینشون 127.0.0.1 هستش!
ip /8
عموما هم ما دیدیم که این / هست! این یعنی چی؟ یعنی به تعداد بیت مشخص شده مثلا /8 هشت بیت اول اون ایپی ثابت هستش و باقی ایپی متغییر
روش دوم ست کرددن مقدار
به صورت IP و یا loopback و یا ip به همراه loopback
در این حالت ما به اکپرس میگیم که پذیرا چهip هایی باشد و بقیه رو رد کنه
از اونجایی که درخواست ما توسط یک پروکسی درحال ارسال به اکسپرس
ایپی درخواست همونطور که گفتیم میشه ایپی پروکسی مثلا ایپی nginx
و ایپی اوریجنال درخواست توی هدل با X-forwarded-for قابل دسترس
در این حالت اکسپرس میاد چیکار میکنه؟
از هدر های x-forwarded-for ایپی رو یکی یکی از راست به چپ میخونه و نسبت به اون چیزی که شما تایین کردین ولیدیت میکنه . درخواست هایی که ایپی درستی دارن رد میشن و داخل میرن اما در اولین اپی غیرقابل اعتماد اکسپرس درخواست متوقف میکنه و مانع رسیدنش میشه
حالا خارج از مبحث اکسپرس میخوام درباره یک هدر که همیشه بهش بر میخوریم صحبت کنم!
X-Forwarded-For
X-Forwarded
این هدر ها همیشه بهشون بر میخوریم اما یعنی چی؟
X-Forwarded-For and related X-Forwarded-* headers are HTTP request headers used to identify the original client IP address and other request context when the request passes through proxies, load balancers, or reverse proxies (e.g., Nginx, Cloudflare, AWS ELB).
این هدر ها و هدر های مشابه زمانی استفاده میشه که شما درخواستت پروکسی بشه یا از لودبالانسری رد بشه حالا چیه؟ بخاطر این هستش که بتونید context درخواستی که پروکسی شده داشته باشید و بتونید از اون استفاده کنید
اما یک نکته ای!
هدر به راحتی spoof میشه و قابل تغییر ! یعنی به راحتی میشه تغییرش داد و اگر ولیدیشنی نباشه میتونه درخواست یک راست بفرسته به جایی که نباید و باگ امنیتی ایجاد بکنهحالا چطوری ست کنیم؟!
اکسپرس به ۴ حالت اجازه ست کردن trust proxy به ما میده
در حالت اول که مقدار boolean قبول میکنه
اگر به true ست بشه ایپی که درخواست میده به سرویس از هدر
X-Forwarded-For خونده میشه و قبول میشه ولی اگر مقدار به false ست بشود اپلیکیشن شما درخواست پروکسی شده رو قبول نخواهد کرد!نکته خیلی مهم! زمانی که ما trust proxy ست میکنیم ! باید روش حساس باشیم چرا؟!
چون داریم اجازه میدیم که اپلیکیشن هر درخواستی رو قبول بکنه و این هشداری که داکیومنت خود اکسپرس در اینباره داده
نوار ابی رنگ
درخواست بدون ست کرن trust proxy به این شکل میشه
اون authorization هم که داخل تصویر بخاط اکستنش که نصب دارم و هدر های یکسری ادرس های خاص تغییر میده
دقت کنید! مقدار ایپی به این شکل هست
::ffff:172.28.0.3
خب این ایپی داخل داکر که داره از انجین ایکس خونده میشه ! و خب اینجا این درخواست مشخص نیست از کجا اومده و فقط رسیده
زمانی که اپلیکیشن ما پشت یک پروکسی یا لودبلانسری قرار میگیره ممکن رفتار متقاوت تری نسب به حالت مستقیم نشون بده.
حالا چرا؟ چون پروکسی ها یکسری هدر اضافه هم همراه خودشون ست میکنن شاید یجایی مشکل برامون ایجاد بکنه
حالا از اون مهم تر این هستش زمانی که شما میخواید با آیپی که درخواست ازش میاد استفاده کنید اگر ست نکنید این مورد رو باعث میشه به جای ایپی درخواست ایپی لود بالانسر یا پروکسی که به صورت internal هم هست ست بشه
#expres_deep@my_backend_experience
Trust proxy
https://expressjs.com/en/guide/behind-proxies.html
تصمیم گرفتم که یکمی دیپ بشیم داخل express و بریم داخل ببینیم چخبره به صورت دیلی شاید پشت سر هم نه ولی وقت کنم میخوام که به عمق بریم و برسیش کنیم و بخونیمش 😄
هرموقع یاد بگیریم که به جای اینکه چشممون دنبال ایراد گرفتن و تخریب باشه دنبال بهتر کرد و بهیود دادن باشیم اونموقع پیشرفت میکنیم.
طرف توی مجازی آفتاب بالانس میزنه دیده بشه کسی با کپشن و محتوا کار نداره حالا یه چیز بدرد بخور که ساخته میشه همه دنبال اینن که ایراد بگیرن از سر تاپاش
قسمت جدید آخر هفته با من داریم 😁😄. یادتون نره که با لایک و کامنت هاتون انرژی بدین 🔥
https://youtu.be/mkY8b-L8l90
