دریافت ip در سرویس های ساخته شده به صورت میکروسرویس


#1

با درود خدمت دوستان گرامی . یک مشکل کوچیکی برخورد کردم اونم دریافت ip کاربر هست

به تصویر بالا نگاه کنید لطفا من حتما باید در مربع وسط که api هست آیپی رو بگیرم که خیالم راحت باشه این آیپی از آخرین کاربر بهم رسیده .

ولی شما به دایره قرمز شده که یک phoenix هست و سایت قسمت فرونت من هست نگاه کنید . فکر کنید کاربر داره اونجا ثبت نام می کنه و من می خوام آیپی اون رو بگیرم .

مشکل شروع می شه چون اینجا من درخواست از کاربر می گیرم و پست می کنم به api پس اینجا ip خود سرورمو دارم به سرویس api می فرستم نه ip کاربر . حال اگر من بیام از دایره قرمز آیپی کاربر بگیرم و اونو همراه درخواست بفرستم که مشکل پیش می یاد اینجوری کاربری به public api من خودش دستی آیپی می ده .

برای این مشکل چه روندی رو پیشنهاد می کنید ؟ این مشکل در پلتفرم های دیگر وجود ندارد ولی در قسمت سایت یا بخش فرونتی که کاربر می بیند چون بر روی سرور خودم هست مشکل هست

لازم به ذکر هست که سیستمم شدیدا به دریافت ip از طرف کاربر وابسته است و در صورتی که این مورد انجام نگیرید مطمئنن باید از حالت میکروسرویس خارج بشم

به روز رسانی

به این منظور که کامل تر متوجه عرایض بنده بشوید ویدیویی در این رابطه رکورد کردم


#2

چرا ip خود سرورو به api میفرستی؟ client ip رو از فینکس بگیر.
مهمترین چیزی که در http فینکس قرار داره که حامل کل رشتست (به struct تبدیل شده) connection هست (Plug.Conn) که احتمالا بتونید ip کاربر رو به این صورت بدست بیاری

conn.remote_ip

#3

درود خدمت شما . یک ویدیی گرفتم در این رابطه شاید کمک بکنه به اینکه نظرم بهتر برسونم و چرا از فونیکس نمی گیرم.

مشکل اصلا در مورد دریافت از فونیکس نیست از نظر منطقش هست در ویدیو زیر توضیح دادم لطفا در صورت امکان ببنید ویدیو رو

تنها راه حلی که به فکرم می رسه اینکه من بیام برای فقط قسمت سایتم یعنی phoniex بیام یک پراویت api درست کنم که بجای مثلا متصل شده به پابلیک ای پی آی بیاد مثلا localhost/ mainsite/api متصل بشه اینجوری دوباره کاری می شه و همینطور ارتباط قسمت سایت با پابلیک api به صورت کامل جدا می شه


#4

قسمتی که گفتی در api ایپی رو بگیری کلا از بحث خارج بشه بهتره چون در موضوع قرار نداره اصلا. اینو برای ساده کردن بحث گفتم.

اینکه یوزر از نرافزار شما یا مبایل استفاده میکنه دلیل نمیشه که نتونه ip spoofing انجام بده.
در مورد جلوگیری از ip spoofing مثل همه فریمورک های بزرگ دیگه راهی در phoenix وجود داره، یک بررسی میکنم ببینم به روزترین مورد چیه.

اگر من جای شما باشم این کارو فقط برای یوزر هایی که لاگین میکنند انجام میدم.
سرویس هایی هم وجود داره مثل cloud flare که در این زمینه کمک زیادی میکنه.


#5

توماج عزیز . اینکه تغییر می ده باز در بحث من نیست خوب اگر واقعا اینکاره باشه که هیچ رقمه نمی شه جلوشو گرفت.

ولی اینکه خودش دستی با یک json بفرسته و منم اون رو ذخیره کنم مشکل بزرگ هست من نمی خوام خودش بتونه با ارسال درخواست این کارو بکنه .

دریافت ip بنده برای ورود و خروج کاربران هست نه چیز دیگیری . به صورت مثال اگر پسورد چند بار اشتباه بزند یا چندین بار درخواست تغییر پسورد بدهد . با مدت زمان محدود من برای بالا بردن این پروژه تغییر کل منطق کد هام در میکروسرویس user تقریبا امکان پذیر نیست .

اگر باز عزیزان دیگه و همینطور شما نظری در این رابطه نداشتید باید یک پراویت api فقط برای سایت درست بکنم. :disappointed_relieved:


#6

خب مگر csrf توکن فعال نیست؟


#7

شما به گوگل درخواست می فرستید و می خواهید به صورت json اطلاعاتی رو بگیرید و بفرستید CSRF دارید ؟
کل وب اپ توماج جان با json کار می کنه


#8

گوگل؟ متوجه نمیشم یعنی چی


#9

شما می خواهید یک درخواست به گوگل آنالیز بفرستید به واسطه api گوگل و اطلاعات سایتتون بگیرید کجای این دریافت اطلاعات شما CSRF دارید ؟

طرف داره با این نرم افزار برای من json ارسال می کنه کجا باید CSRF بزارم براش ؟ سایت گرافیکی وجود نداره که این بخش فرم رو CSRF بزاره


#10

اگر میشه دقیقتر توضیح بده، مشکل شما با گوگل هست؟
من فکر کردم داریم در مورد html حرف میزنیم نه json api


#11

مثال زدم توماج جان .

ولاه نمی دونم چیجوری توضیح بدم سعی کردم ویدیو بگیرم تا کامل منظورمو برسونم .ولی فکر کنم موفق نبودم در این کار .

سایتی که کاربر می بینه با phoenix درست شده . این سایت به یک public api متصل شده است . خوب حال من می خوام در موقعی که کاربر به سایت اول یعنی phoenix ایمیل و پسوردشو داده این سایت بگیره و به public api پست کنه . در این وسط ما نیاز به این داریم که آیپی کاربر نیز گرفته شود .

خوب اگر در سایت اول فونیکس این کارو بکنیم و اون رو به public api ارسال کنیم این وسط کاربر می تونه کلا سایت اول رو در نظر نگیره و مستقیم خودش به public api بیاد و دستی به صورت json هر چیزی می خواد بفرسته . و اگر در public api این کارو بکنیم خوب آیپی که دریافت می کنه آیپی سرور ماست چون قسمت phoenix روی سرور هست .

مشکل اینجاست . من فکر می کنم من باید برای سایتی که روی سرور خودم هست بیام و یک پرایوت api درست کنم و از خود phoenix که سایت اول می شود بیام و دستی به پراویت api آیپی که گرفتم رو بفرستم اینجوری چون کاربر دسترسی به پراویت api نداره من دارم آیپی رو می گیرم ولی ما بقی بلتفرم ها با همون پابلیک کار کنند


#12

اون نرمافزار X-Forwarded-For رو تغییر میده، کار خاصی نمیکنه


#13

متوجه موضوع شدم اما شما خیلی غیر متمرکز توضیح داده بودی، با این حال عرض کردم که باید چکار کرد


#14

قسمتی که گفتی در api ایپی رو بگیری کلا از بحث خارج بشه بهتره چون در موضوع قرار نداره اصلا. اینو برای ساده کردن بحث گفتم.

اینکه یوزر از نرافزار شما یا مبایل استفاده میکنه دلیل نمیشه که نتونه ip spoofing انجام بده.
در مورد جلوگیری از ip spoofing مثل همه فریمورک های بزرگ دیگه راهی در phoenix وجود داره، یک بررسی میکنم ببینم به روزترین مورد چیه.

اگر من جای شما باشم این کارو فقط برای یوزر هایی که لاگین میکنند انجام میدم.
سرویس هایی هم وجود داره مثل cloud flare که در این زمینه کمک زیادی میکنه.


#15

چون برای خودم پیچیدگی داشته توضیح کمی سخت بوده و بنده بخاطر این موضوع پوزش طلب می کنم.

متاسفانه قضیه اصلا حول spoofing نمی گرده موضوع اینکه بهترین راه حل برای تفکیک api هست . من برای سایت روی سرورم باید api جدا درست بکنم نسبت به پابلیک api یا خیر ؟

یعنی برای من مهم نیست کاربر تغییر آیپی می ده فقط نمی خوام اون با یک درخواست json خودش دستی برای بنده بفرسته


#16

دلیل این کار چیه؟ یعنی چه خطری ایجاد میکنه؟


#17

یعنی شما حاظر هستید کاربر شما مثلا اینطوری json برای شما فرسته ؟

{
  "country": "Iran",
  "email": "karimbenzema@gmail.com",
  "language": "fa",
  "last_ip": "127.1.2.4",
  "lastname": "tavakkoli",
  "name": "shahryar",
  "password": "3250AAasa$123"
}

یعنی خودش آیپی خودشو هم برای شما ارسال کنه تاکید می کنم خودش

شما هم بگید چون خودش ارسال کرده من اون رو ذخیره می کنم . تاکید می کنم این ip از هیج جا برداشته نشده یعنی حتی سایت اول یعنی phoenix اون رو هم جنریت نکرده .


#18

خب خطر این کار چیه؟
من میخوام بدونم مشکل اصلی چیه که اون حل بشه، اما در عین حال یک نگاهی به این plug بنداز


#19

مشکل اینجاست که من نمی خوام آخرین نفری که می خواید آیپی ولید شده بفرسته کاربر باشه . بلکه می خوام phoenix من باشه . اگر از بیس آیپی تغییر کرده اون مشکل من نیست مشکل من اینکه وقتی درخواست ارسال شده خودش آیپی خودشو نفرسته بلکه من از درخواستش به واسطه plug آیپی رو بگیرم


#20

Plug.Conn همون درخواست یوزر هست که از request string تبدیل به struct شده.
plug بالا در این زمینه کمک میکنه.