Programu ya simu huweka bidhaa yako, na mara nyingi data ya kibinafsi ya wateja wako, katika mamilioni ya mifuko ambayo huidhibiti. Simu hupotea, huibiwa, huziba mizizi, huambukizwa na kuachwa kwenye mitandao ya umma. Washambuliaji wanaweza kupakua programu yako, kuibomoa na kujifunza jinsi inavyowasiliana na seva zako. Usalama katika mazingira haya si kipengele cha kuongeza mwishoni. Ni seti ya maamuzi yanayofanywa katika mradi mzima.
Habari ya kutia moyo ni kwamba hitilafu nyingi za usalama wa simu si za kigeni. Zinatokana na orodha fupi ya makosa ya kawaida: kuhifadhi data nyeti bila kujali, kuamini programu kupita kiasi, kuacha API za nyuma zikiwa wazi na kuruka majaribio. Orodha hii ya ukaguzi inashughulikia mambo ishirini ya kufanya sahihi kabla ya uzinduzi. Imeandikwa ili waanzilishi na wamiliki wa bidhaa waweze kuuliza maswali sahihi, na watengenezaji wanaweza kuitumia kama orodha ya mapitio. Kwa upangaji mpana wa mradi wa programu, tazama [mwongozo wetu wa gharama ya ukuzaji wa programu ya simu] (blogu/ukurasa wa ukuzaji-wa-programu-ya-simu-ya-gharama-inayoendesha-bei) na [ukurasa wa ukuzaji-wa-programu ya simu] (ukurasa wa ukuzaji-wa-programu-ya-simu-ya-simu-ya-simu-ya-simu-ya-simu-ya-simu-ya-simu-ya-simu-ya-simu-ya-simu-ya-simu-ya-simu-ya-simu.php).
Kwanza, mawazo
Kanuni tatu zinaunga mkono kila kitu hapa chini.
- Usimwamini mteja kamwe. Chochote kinachoendeshwa kwenye simu ya mtumiaji kinaweza kukaguliwa na kubadilishwa. Maamuzi muhimu, kama vile bei, ruhusa na malipo, lazima yafanywe kwenye seva.
- Kusanya na uhifadhi kidogo. Data ambayo huhifadhi kamwe haiwezi kuibiwa. Kila sehemu unayokusanya ni dhima.
- Chukua ukiukaji, punguza uharibifu. Buni ili ikiwa jambo moja litashindwa, madhara yazuiliwe: tokeni za muda mfupi, ruhusa ndogo, data iliyosimbwa kwa njia fiche.
Hifadhi ya data kwenye kifaa
1. Usihifadhi data nyeti isipokuwa lazima
Nywila, nambari kamili za kadi na vitambulisho vya kibinafsi visiwe kwenye kifaa. Ukiweza kupata kitu kutoka kwa seva inapohitajika, fanya hivyo badala ya kukihifadhi ndani ya eneo lako.
2. Tumia hifadhi salama kwa kile unachofanya
iOS na Android zote hutoa hifadhi salama kwa siri kama vile tokeni na funguo: Keychain kwenye iOS na Keystore kwenye Android. Tumia faili hizo, si za mapendeleo ya kawaida, hifadhidata za ndani au faili za maandishi zisizolindwa. Mifumo ya mifumo mbalimbali kama vile Flutter na React Native hutoa vifurushi salama vya hifadhi vinavyofunga vipengele hivi, na vinapaswa kuwa chaguo-msingi kwa tokeni na sifa.
3. Simba hifadhidata na faili za ndani zinazohifadhi data ya kibinafsi
Ikiwa programu inahifadhi taarifa za mtumiaji nje ya mtandao, isimbaji fiche. Kumbuka kwamba nakala rudufu, picha za skrini na kumbukumbu pia zinaweza kuvuja data, kwa hivyo kagua mahali ambapo taarifa zinaweza kuishia.
4. Futa data nyeti unapotoka
Mtumiaji anapoondoka, ondoa tokeni, rekodi zilizohifadhiwa na faili zozote nyeti. Vifaa vilivyoshirikiwa na kuuzwa tena ni vya kawaida.
Uthibitishaji na vipindi
5. Tumia uthibitishaji uliothibitishwa, sio wako mwenyewe
Kuendesha mfumo wako wa kuingia ni hatari. Tumia viwango na maktaba zilizowekwa, kama vile OAuth 2.0 na OpenID Connect, au huduma ya utambulisho inayoaminika. Tekeleza sheria za nenosiri zinazofaa na ulinde dhidi ya kubahatisha mara kwa mara kwa mipaka ya viwango na kufungiwa nje.
6. Toa chaguo kali za kuingia
Unga mkono uthibitishaji wa vipengele vingi ambapo data inahalalisha, na utumie biometriki za kifaa, kama vile alama za vidole na kufungua kwa uso, kama safu ya urahisi juu ya kuingia salama. Biometriki inapaswa kufungua kitambulisho kilichohifadhiwa salama, si kuchukua nafasi ya ukaguzi wa upande wa seva.
7. Weka vipindi vifupi na vinavyoweza kubatilishwa
Tumia tokeni za ufikiaji za muda mfupi na tokeni za kuonyesha upya, na kuwezesha kubatilisha ufikiaji wakati kifaa kinapotea. Tokeni zinazodumu kwa muda mrefu zilizohifadhiwa ovyo ni udhaifu wa kawaida.
Mawasiliano ya mtandao
8. Tumia miunganisho iliyosimbwa kila mahali
Trafiki yote kati ya programu na seva zako inapaswa kutumia TLS ya kisasa. Usitume kamwe vitambulisho au data ya kibinafsi kupitia miunganisho ya kawaida, na usipuuze makosa ya cheti wakati wa usanidi na usahau kuwezesha tena ukaguzi katika toleo.
9. Fikiria kubandika cheti kwa programu zilizo hatarini
Kubandika hufanya programu ikubali cheti cha seva yako pekee, ambacho hushinda baadhi ya mashambulizi ya kukatiza. Huongeza juhudi za matengenezo wakati vyeti vinabadilika, kwa hivyo inafaa programu zinazoshughulikia malipo, afya au data nyingine nyeti sana kuliko programu rahisi za maudhui.
10. Usiweke siri kwenye programu
Funguo za API, manenosiri na funguo za faragha zilizopachikwa kwenye programu zinaweza kutolewa na mtu yeyote anayeipakua. Chochote ambacho lazima kibaki siri ni cha seva yako. Funguo ambazo lazima ziwe kwenye programu, kama vile ramani, zinapaswa kuzuiwa na utambulisho wa programu na mipaka ya matumizi kwa mtoa huduma.
Mazingira ya nyuma na API
Programu ni salama tu kama seva inayozungumza nayo. Washambuliaji mara nyingi hupita programu kabisa na kupiga simu API yako moja kwa moja.
11. Idhinisha kila ombi kwenye seva
Hakikisha kwamba mtumiaji aliyeingia anaruhusiwa kufikia kila rekodi anayoiomba. Dosari ya kawaida ni sehemu ya mwisho inayorudisha agizo lolote inapopewa nambari yoyote ya agizo, kwa hivyo mtumiaji mmoja anaweza kusoma data ya mwingine kwa kubadilisha nambari katika ombi.
12. Thibitisha ingizo zote kwenye seva
Usitegemee kamwe programu kuthibitisha data. Angalia aina, urefu na fomati kwenye seva, na utumie maswali salama ya hifadhidata ili kuzuia uingizaji. Mazingira ya nyuma yaliyojengwa kwa mifumo iliyokomaa kama vile Laravel hutoa ulinzi mwingi huu kwa chaguo-msingi inapotumika kama ilivyokusudiwa; Tunalinganisha chaguo za sehemu ya nyuma katika Laravel dhidi ya Node.js.
13. Kiwango cha kikomo na ufuatiliaji
Punguza ni mara ngapi mteja anaweza kupiga simu kwenye sehemu nyeti za mwisho, kama vile kuingia, kuweka upya nenosiri na malipo. Andika shughuli isiyo ya kawaida na uiarifu.
14. Linda malipo ipasavyo
Tumia mtoa huduma wa malipo anayeaminika ili maelezo ya kadi yaende moja kwa moja kwao na usipite au kukaa kwenye seva zako. Thibitisha malipo kwenye seva, usiamini kamwe dai la programu kwamba ununuzi ulifanikiwa.
Programu yenyewe
15. Linda msimbo kwa njia inayofaa
Miundo ya kutolewa inapaswa kukusanywa na kurekebishwa, huku vipengele vya utatuzi wa matatizo na kumbukumbu za maneno mengi zikiondolewa. Kuficha data hufanya uhandisi wa kinyume kuwa mgumu lakini kamwe hauwezekani, kwa hivyo ichukulie kama kikwazo cha kasi, si ulinzi, na usitegemee kamwe kulinda siri.
16. Gundua mazingira hatarishi ambapo ni muhimu
Kwa programu za benki, afya au zingine zenye hatari kubwa, fikiria ukaguzi wa vifaa vilivyozimwa au vilivyofungwa, virekebishaji na uchezaji. Hizi huongeza msuguano na kengele za uwongo, kwa hivyo zitumie kulingana na hatari halisi.
17. Omba ruhusa za chini kabisa
Omba kamera, eneo, anwani au ufikiaji wa hifadhi inapohitajika tu, na ueleze ni kwa nini. Ruhusa chache humaanisha kufichuliwa kidogo ikiwa programu imeathiriwa, na uaminifu zaidi kutoka kwa watumiaji.
18. Msimbo wa mtu mwingine wa Vet
Maktaba na SDK zinaendeshwa na ruhusa za programu yako. Kila moja ni udhaifu unaowezekana na swali la faragha. Weka orodha fupi, tumia vifurushi vilivyotunzwa vizuri, visasishe mara kwa mara na uhakiki data ambayo SDK yoyote ya uchanganuzi au matangazo inakusanya.
Mchakato na utayari
19. Jaribu usalama kabla ya kutolewa
Jumuisha usalama katika majaribio, si utendaji kazi pekee.
- Uchanganuzi otomatiki wa msimbo na utegemezi kwa udhaifu unaojulikana.
- Uhakiki wa mikono wa uthibitishaji, uhifadhi na ufikiaji wa API.
- Upimaji wa kupenya na mtaalamu huru kwa programu zinazoshughulikia data nyeti.
- Huangalia dhidi ya orodha inayotambuliwa. Mradi wa Usalama wa Programu za Simu wa OWASP huchapisha mwongozo unaotumika sana na viwango vya upimaji, kipimo kizuri cha ukaguzi.
20. Jiandae kwa matukio na masasisho
Amua mapema utakachofanya ikiwa kitu kitaenda vibaya.
- Njia ya kuwalazimisha watumiaji kusasisha wakati dosari kubwa inapopatikana.
- Ufuatiliaji na kuripoti ajali ili matatizo yagundulike haraka.
- Mwasiliani wa ripoti za usalama na mchakato wa kujibu.
- Mpango wa kuwaarifu watumiaji na, inapohitajika, wasimamizi.
- Masasisho ya kawaida kwa mifumo ya uendeshaji, maktaba na sehemu ya nyuma. Usalama unaendelea kufanya kazi, kama ilivyoelezwa katika gharama za matengenezo ya programu.
Faragha na utiifu
Usalama na faragha vinaingiliana lakini si sawa. Faragha inahusu unachokusanya na kwa nini, na kile ambacho watumiaji wanakubali.
- Kusanya tu unachohitaji, na uwaambie watumiaji wazi unachokusanya.
- Kutoa sera ya faragha inayolingana na kile ambacho programu hufanya kweli.
- Heshimu chaguo za watumiaji, kama vile maombi ya kufuta na mapendeleo ya uuzaji.
- Fuata sheria za duka. Apple na Google zinahitaji ufichuzi wa faragha na zina sera kuhusu matumizi ya data.
- Jua majukumu yako. Sheria hutofautiana kulingana na nchi na sekta, kwa mfano kwa data ya afya au ya watoto. Tunapendekeza kuwathibitisha kwa mshauri aliyehitimu na kubuni programu inayolingana.
Sekta nyeti zinahitaji uangalifu wa ziada. Ukurasa wetu kuhusu uundaji wa programu ya afya unaelezea mambo muhimu ya kubuni bidhaa zinazohusiana na afya.
Jedwali la marejeleo mafupi
| Eneo | Swali muhimu |
|---|---|
| Uhifadhi | Je, kuna data yoyote nyeti iliyohifadhiwa, na iko katika hifadhi salama? |
| Uthibitishaji | Je, tunatumia viwango vilivyothibitishwa, vyenye vipindi vya muda mfupi, vinavyoweza kubatilishwa? |
| Mtandao | Je, trafiki yote imesimbwa kwa njia fiche, bila siri katika programu? |
| API | Je, seva inaidhinisha na kuthibitisha kila ombi? |
| Malipo | Je, maelezo ya kadi huenda moja kwa moja kwa mtoa huduma? |
| Msimbo | Je, miundo ya kutolewa imeondolewa vipengele vya utatuzi? |
| Ruhusa | Je, tunauliza tu kile tunachohitaji? |
| Utegemezi | Je, maktaba za wahusika wengine ni chache, za sasa na zimekaguliwa? |
| Upimaji | Je, usalama umejaribiwa kwa kujitegemea? |
| Jibu | Je, tunaweza kulazimisha masasisho na kujibu matukio? |
Makosa ya kawaida
- Siri ngumu za usimbaji fiche kwenye programu.
- Kumwamini mteja kwa maamuzi kuhusu bei, majukumu au ufikiaji.
- Kuhifadhi tokeni katika mapendeleo ya kawaida.
- Kuacha mipangilio ya majaribio au kurekebisha uingiaji kwenye toleo.
- Kuruka ukaguzi wa idhini ya upande wa seva.
- Kuongeza SDK nyingi bila kukagua kile wanachokusanya.
- Kuchukulia usalama kama hatua ya mwisho badala ya kujadili mradi.
- Hakuna utaratibu wa sasisho kwa marekebisho ya haraka.
- Kutojaribu kwa mashambulizi halisi.
- Kusahau sehemu ya nyuma, ambapo uvunjaji mkubwa zaidi hutokea.
Nani anawajibika?
Kila mtu. Wamiliki wa bidhaa huamua ni data gani inayokusanywa na ni hatari gani inayokubalika. Wabunifu huunda mtiririko unaoepuka kufichuliwa bila lazima. Wasanidi programu hutekeleza ulinzi. Wajaribu hujaribu kuzivunja. Mshirika mzuri wa maendeleo huuliza maswali haya mapema, badala ya baada ya uzinduzi. Unapotathmini moja, uliza jinsi wanavyoshughulikia usalama; mwongozo wetu wa [kuchagua kampuni ya ukuzaji wa programu] (blogu/jinsi-ya-kuchagua-kampuni-ya-kuendeleza-programu) unajumuisha maswali yanayofichua hili.
Mawazo ya mwisho
Huwezi kuifanya programu ya simu kuwa salama kikamilifu, lakini unaweza kuifanya kuwa lengo gumu na lisilo na thawabu, na epuka hitilafu za kawaida zinazosababisha uvunjaji mwingi. Hifadhi kidogo, amini seva badala ya simu, tumia uthibitishaji uliothibitishwa, ficha trafiki, jaribu vizuri na upange wakati kitu kitaenda vibaya.
Ikiwa unapanga programu na unataka usalama ujengewe ndani tangu mwanzo, zungumza nasi. Tutakagua mahitaji yako, tutaonyesha hatari zinazohusika kwa bidhaa yako na kujenga ulinzi katika mpango, sio kuzifunga mwishoni.