رفتن به مطلب

امنیت در b4a ( قسمت سوم )


ارسال‌های توصیه شده

3_answer.jpg

استفاده سهوی از 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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...