ذخیره کردن توکن در local storage صحیح است؟

, , ,

سلام من در حال پیاده سازی یک سیستمم که هم سمت فرانت (vue) دست خودمه هم بکند (لاراول) کله پروژه هم با rest api و jwt هندل میشه .حالا بحث اینجاست که کلی از سایت ها گفتن که توکن رو نباید تو local storage ذخیره کرد ولی هر ریپوزیتوریی که تو گیت هاب دیدم یا ویدئو ها همه تو لوکال این کار رو میکردن.یک سوال اگه نباید تو لوکال استورج گذاشت پس کجا باید گذاشت؟ :wink:

برای جلوگیری از XSS و در HttpOnly cookie،
توی صفحه زیر قسمت HttpOnly رو چک کنید

3 Likes

ممنون بابت پاسخ🙋‍♂️.این روش فقط رو https جواب میده برای http سولوشنی نیست؟ و اینکه ایا به هر سبکی تو لوکال استورج ذخیره کنیم راحت xss میزننو به فنا میریم؟

اصلا در مورد http بهتره به خودمون زحمت ندیم چون ارتباط کاملا برهنست

2 Likes

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

محمد جان، خوب اون وقت اطلاعات هویتی رو کجا نگه میداری؟

1 Likes

اطلاعات هویتی اگه منظورت یوزر پسه که جایی نگه داری نمیشه تو هر بار درخواست باید ارسال بشه بعد اونور توکن میده بهت دوباره بعد با این توکن درخواست اصلی تو میزنی و اطلاعات و میگیری برای هر کار باید دوبار درخواست بزنی.البته این یه حالت ایده ال و …

یعنی من سایت شارو باز می کنم ۲۰ تا صفحه از سایت شما رو می بنیم باید ۲۰ بار یوزر پسورد بزنم ؟ :woozy_face:

این ایراد توش هست بله ولی وقتی قرار سایتو ببینی دیگه نیازی به توکن نیست با سشن هندل میشه قضیه بیشتر برای سیستم های وب سرویس و ایناست و جایی که امنیت تو اولویت اول باشه( ۱۰۰ درصد نمیشه ولی امنیت و میبره بالا ) .
در کل اینا نتایج جستجو هایی که زدم اگه کسیو داریم با تخصص امنیت‌و … بیاد روشن ترمون کنه.

دوست من شما باید

۱. یوزر پسورد رو به سرور ارسال کنید
۲. سرور باید به شما یک توکن ارسال کنه که مثلا JWT خیلی خوبه
۳. این کلید jwt رو سشن کنید

این سشن باید

۱. کدگزاری بشه
۲. دامینش مشخص بشه
۳. در صورت نیاز تایم اکسپایر بگیره
۴. httponly باشه
۵. از https استفاده بشه و فلگ سکیور خورده باشه
۶.در صورت ارتباط با دیگر دامنه ها در same site مشخص بشه

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

ممنون از مشارکتتون تو بحث. بله این روشی که اکثرا انجام میدیم. بحث تو این حالت جدید بود که برای هر کاری باید ۲ تا درخواست بزنیم.وقتی سشن میاد وسط دیگه میریم رو حالت statefull ولی ما داریم رو سرویس های stateless روش رو مطرح میکنیم.

مسلما اینطوره حامد جان.

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

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