PDA

View Full Version : محافظت از توکن در اندروید



samiasoft
دوشنبه 23 دی 1398, 23:57 عصر
سلام وقت بخیر

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

مورد اول :
برای محافظت از توکن های نقشه های انلاین یا.... که از قبل توکن اونا رو داریم اومدم داخل فایل بیلد گریدل بدین صورت اون رو ذخیره کردم :

buildTypes { release {
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

buildConfigField "String", "MyToken", '"1111111111111111"'
}
خب حالا شاید بگید چرا اینکارو کردم...بخاطراینکه هنگام دیکامپایل فایل بیلدگریدل تا جایی که بررسی کردم به هیچ وجه دی کامپایل نمیشه (حالاشاید انجام بشه اما به راحتی امکان پذیر نیست).
بخاطرهمین توکن ذخیره شده داخل اون به نظرم ایمن هست...اما مساله ای که هست اینه که وقتی میخوام در کلاسی ازش استفاده کنم طبیعتا دستورشو اینطور بنویسم :

String Token = BuildConfig.MyToken;

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

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


برای ایمن کردن هردو حالتی که مدنظرم بود چه راهکاری پیشنهاد میکنید ؟

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

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

samiasoft
سه شنبه 24 دی 1398, 13:52 عصر
این کتابخانه رو اومدم تست کردم :

https://github.com/MEiDIK/Cipher.so

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

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