Fintech praktikaları: sessiya, sensitive data, compliance
Bank tətbiqini adi tətbiqdən ayıran gündəlik mühəndislik vərdişləri:
Sessiya idarəetməsi:
- Qısa access token + refresh rotation; server tərəfdə sessiyaların siyahısı və uzaqdan ləğv
- Inactivity timeout — hərəkətsizlikdə avtomatik kilid (lifecycle observer ilə)
- Arxa plana keçəndə həssas ekranın gizlədilməsi; qayıdışda PIN/biometrika
Sensitive data lifecycle:
- Loglara heç vaxt: PAN, CVV, token, şifrə, balans — release-də log siyasəti + lint qaydaları
- Analytics/crash hesabatlarına PII düşməməsi (Crashlytics custom key-lərinin auditi)
- Klipbord: kart nömrəsi kopyalananda
ClipDescription.EXTRA_IS_SENSITIVEvə vaxtla təmizləmə - Ekran görüntülərində maskalama; klaviatura cache-i üçün
importantForAutofill/inputType seçimi
Compliance təfəkkürü:
- PCI DSS — kart datası: mobil cihaz untrusted sayılır → tam PAN/CVV saxlanmır, tokenization
- PSD2/SCA (Avropa) — strong customer authentication: iki faktor, dynamic linking (təsdiq mesajında məbləğ+alıcı)
- Audit trail — kritik əməliyyatların server tərəfdə izlənməsi; cihaz tərəfdə də hadisə jurnalı
- Pen-test və audit dövrləri — release prosesinin hissəsi
class SessionGuard(
private val lockScreen: () -> Unit
) : DefaultLifecycleObserver {
private var backgroundedAt: Long = 0
override fun onStop(owner: LifecycleOwner) {
backgroundedAt = SystemClock.elapsedRealtime()
}
override fun onStart(owner: LifecycleOwner) {
val away = SystemClock.elapsedRealtime() - backgroundedAt
if (backgroundedAt > 0 && away > LOCK_AFTER_MS) {
lockScreen() // PIN/biometrika ekranı
}
}
companion object { const val LOCK_AFTER_MS = 60_000L }
}
// Kart nömrəsinin təhlükəsiz kopyalanması
fun copyCardNumber(context: Context, masked: String) {
val clip = ClipData.newPlainText("card", masked).apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true) // önizləmədə gizli
}
}
context.getSystemService<ClipboardManager>()?.setPrimaryClip(clip)
}Sessiya kilidi: hərəkətsizlik + arxa plan
Müsahibədə fintech düşüncəsini göstərən cümlələr: "Client-ə heç vaxt etibar etmirik — limit yoxlaması UI-da rahatlıq, serverdə qayda-dır"; "Hər kritik əməliyyat idempotency key ilə gedir — şəbəkə retry-ı double-charge yaratmır"; "Feature flag-lərlə riskli funksionallığı tədricən açırıq"; "Release-dən əvvəl təhlükəsizlik checklist-i: log audit, screenshot testi, backup yoxlaması". Bu səviyyə detallar texniki biliyi biznes riskinə bağlayır — bank müsahibəsində ən çox qiymətləndirilən bacarıq.
🛠 Tapşırıq
Öz (və ya nümunə) tətbiqin üzərində mini audit apar:
Logçağırışlarını qrep et: token, kart, balans loglanırmı? Release-də logging-i söndür/redaksiya et.- Sessiya kilidi əlavə et: 60 saniyə arxa planda qalandan sonra PIN ekranı.
- Kart nömrəsini
EXTRA_IS_SENSITIVEilə kopyala və klipbord önizləməsinə bax. - Crashlytics custom key-lərini nəzərdən keçir — PII varmı?
Bitdi sayılır: 5 bəndlik tapıntı siyahısı və hər biri üçün düzəliş yazmısansa.
📚 Mənbələr və sənədlər
- Android təhlükəsizlik tövsiyələrirəsmideveloper.android.com
- OWASP Mobile Application Securityrəsmimas.owasp.org
- PCI Security Standards Councilrəsmipcisecuritystandards.org