MR.B4A 246 ارسال شده در 28 اردیبهشت اشتراک گذاری ارسال شده در 28 اردیبهشت استفاده سهوی از HardCoding در امنیت اطلاعات، واژهی "hardcoded" (هاردکد شده) به این معناست که اطلاعات حساس یا مقادیر مشخصی بهصورت ثابت و مستقیم در کد برنامه نوشته شدهاند، به جای اینکه از منابع امنتری مانند فایلهای پیکربندی رمزگذاریشده، محیط اجرا (environment variables) یا سیستمهای مدیریت کلید استفاده شوند. به طور خلاصه بخوام بگم، یعنی این که برنامه نویس بیاید و مقادیر را طوری بنویسد که به راحتی قابل خواندن باشد. مثلا رمز عبورها و کلید های اصلی بعد از مهندسی معکوس پروژه، به راحتی قابل دسترس باشند. به طور کلی اطلاعاتی که نباید hardcoded باشند: رمزهای عبور کلیدهای API توکنهای دسترسی (Access Tokens) آدرس سرورها یا پایگاه دادهها اطلاعات شخصی کاربران در این موارد باید دقت کنید که مقادیرشان به راحتی قابل دسترس نباشند. اما چگونه؟! با مثال زیر متوجه این چگونگی میشوید. مثال در بیسیک فور اندروید کد ناامن Sub Process_Globals Private serverUrl As String = "https://myserver.com/api" Private apiKey As String = "12345-ABCDE-SECRET-KEY" End Sub Sub SendRequest Dim job As HttpJob job.Initialize("Job1", Me) job.Download2(serverUrl, Array As String("apikey", apiKey)) End Sub در اینجا، apiKey و serverUrl بهصورت hardcoded توی کد نوشته شدن. اگه کسی فایل APK رو decompile کنه، بهراحتی میتونه این اطلاعات رو استخراج کنه. حالا اگه همینو بخوایم امنش کنیم به این شکل درمیاد: Sub Process_Globals Private serverUrl As String = "https://myserver.com/api" Private apiKey As String End Sub Sub Globals End Sub Sub Activity_Create(FirstTime As Boolean) If File.Exists(File.DirInternal, "config.dat") Then Dim encrypted As String = File.ReadString(File.DirInternal, "config.dat") apiKey = DecryptKey(encrypted) Else Log("API key file not found!") ToastMessageShow("Configuration error", True) Return End If SendRequest End Sub Sub SendRequest Dim job As HttpJob job.Initialize("Job1", Me) job.Download2(serverUrl, Array As String("apikey", apiKey)) End Sub Sub DecryptKey(encrypted As String) As String Dim su As StringUtils Dim data() As Byte = su.DecodeBase64(encrypted) Return BytesToString(data, 0, data.Length, "UTF8") End Sub حالا چند نکته امنیتی که اگر برنامه نویس رعایت کنه، بهتره: برای رمزنگاری کلید در سمت توسعهدهنده، از ابزارهایی مثل Base64 encoder یا الگوریتمهای AES استفاده کن. Base64 فقط پنهانسازی هست نه رمزنگاری واقعی! برای تولید نسخه نهایی اپ، بهتره از کتابخانه رمزنگاری قوی مثل Encryption در B4A استفاده کنی. محل ذخیرهسازی (File.DirInternal) خصوصی برنامهست و کاربران عادی نمیتونن بهش دسترسی داشته باشن، ولی برای امنیت واقعی بهتره با رمزگذاری همراه باشه. تهیه و تنظیم مرتضی صباغی MR.B4A https://eitaa.com/basic4androidlan https://t.me/programmingwithb4a لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
ارسالهای توصیه شده
بایگانی شده
این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.