Säkerhet är en viktig aspekt av mjukvaruutveckling. Nästan varje mobilapplikation handlar om användarinformation eller kommunicerar med en fjärrserver. Trots att säkerheten har förbättrats dramatiskt under de senaste årtiondena, fortsätter det att vara ett diskutabelt ämne.
I den här artikeln vill jag lyfta fram ett antal ämnen som är relaterade till säkerhet och mobil utveckling. Under tiden berör jag ett antal bra metoder och förslag som du kan hitta användbara för att säkra de program du skriver.
Säkerheten är relativ. Säkerhetsutnyttjande upptäckes och patchas regelbundet. Inget är perfekt. Det sagt är det ett antal saker du kan göra för att förbättra säkerheten för dina mobilapplikationer. En inbrott är mindre frestad att bryta sig in i en byggnad omgiven av ett elstaket än ett som inte är det.
Vissa utvecklare förbiser det faktum att användarna av sina applikationer litar på dem med sin information. Som utvecklare är du ansvarig för att hålla informationen säker. Det spelar ingen roll vad den informationen är. Medan informationen kan se oavsiktlig ut för dig är det viktigt för användaren.
Apple tar väldigt seriös säkerhet och integritet. HealthKit är ett bra exempel på Apples engagemang för att skydda användarens integritet. Användaren bestämmer vilka hälsodata en ansökan har tillgång till. Medan ansökan kan begära tillgång till användarens hälsodata, säger HealthKit inte vilken data den har tillgång till. Med andra ord anser Apple att tillstånds status för en ansökan är känslig information som den inte borde veta om.
Innan du bestämmer hur eller var du vill lagra en viss data måste du fråga dig själv om du ska lagra den data i första hand. Är det exempelvis möjligt att hålla data i minnet istället för att skriva det till disk eller skicka det till en fjärrserver? Detta kan i hög grad förenkla din applikations arkitektur och förbättra dess säkerhet.
Om du bestämmer dig för att lagra data lokalt är ditt enda alternativ, måste du bestämma var du planerar att lagra den data. För känslig information, till exempel uppgifter, är nyckelring det bästa alternativet. Detta är endast möjligt för små mängder data, din ansökan behöver inte frekvent tillgång till.
Behöver data säkerhetskopieras till iCloud eller iTunes? Om så inte är fallet kanske du vill överväga att lagra data i cachar katalog över programmets sandlåda. Den här katalogen är inte säkerhetskopierad till iCloud och iTunes. Varför är det viktigt? Data som inte finns kan inte äventyras.
Standardinställningen, tillgänglig via NSUserDefaults
klass, är ett snabbt och bekvämt sätt att lagra bitar av data. Tyvärr är standardinställningarna ofta överanvändna av utvecklare. Det händer alltför ofta att känslig information, till exempel behörighetsuppgifter och åtkomsttoken, lagras i standardinställningen.
En mycket bättre plats för att lagra små bitar av känslig information är systemets nyckelring. Som namnet antyder är det utformat med säkerhet i åtanke och det har funnits i många år. Även om nyckelfärdigheten hanteras av operativsystemet, har andra applikationer som standard inte tillgång till de objekt som din ansökan lagrar i nyckelringen.
Det är sant att gränssnittet för åtkomst till nyckelringstjänsterna är arkaiskt. Lyckligtvis finns det flera utmärkta bibliotek som övervinnar denna hinder. Lockbox är till exempel ett lättviktsbibliotek för att interagera med systemets nyckelringstjänster. Lockboxs gränssnitt är lätt att använda och förstår.
Det är frestande att lagra nycklar, tokens och till och med legitimationsuppgifter på lättillgängliga platser, såsom målets Info.plist eller en JSON-fil i programmets bunt. Sanningen är att det är barns lek att extrahera den informationen från en applikation som hämtas från App Store. Genom att lagra ett API-token för en webbtjänst i din ansökans Info.plist, andra utvecklare kan hitta den och använda den.
Säkerhet och integritet har varit på Apples agenda i många år och, tillsammans med andra stora aktörer, har Apple beslutat att leda till exempel. Under förra årets WWDC introducerade företaget App Transport Security.
Med App Transport Security vill Apple förbättra säkerheten för sina plattformar och programmen som körs på dem. Oavsett hur mycket Apple investerar i att säkra sina operativsystem är ett system bara så säkert som sin svagaste komponent och det inkluderar tredjepartsprogram.
App Transport Security verkställer applikationer för att skicka nätverksförfrågningar via en säker anslutning. Om App Transport Security är aktiverat för en applikation skickas nätverksförfrågningar som standard över HTTPS. Apple betonar sitt engagemang för säkerhet och integritet genom att automatiskt aktivera App Transport Security för applikationer som är byggda med Xcode 7.
Du kan läsa mer om App Transport Security på Envato Tuts +. Även om det är lätt att inaktivera App Transport Security, kom ihåg att ett av målen med App Transport Security är att få utvecklare att överväga nätverksbeteendet hos sina applikationer.
Nästan varje mobilapplikation använder nätverket. Det innebär att personer med dåliga intentioner starkt fokuserar på denna aspekt av applikationssäkerhet. Nätverk är en komplicerad fråga och applikationer bygger utöver en rad teknologier för att hämta de data de är intresserade av.
Som utvecklare är det viktigt att du håller fast vid ett antal bra metoder. Vi diskuterade redan App Transport Security och de regler som denna nya teknik verkställer. Det stannar dock inte där. Du kanske också vill titta på mer avancerade ämnen, till exempel certifikatpinne för att servern som din ansökan kommunicerar med inte är bedräglig. Moderna bibliotek, som Alamofire, gör det mycket lättare.
De flesta program använder eller lagrar känslig användarinformation. Mobila enheter har tillgång till ett brett utbud av användarinformation som ofta är personlig och känslig i naturen, till exempel adress, adressbok och hälsoinformation.
Som jag nämnde tidigare i den här artikeln är den första frågan du behöver fråga dig själv om du behöver komma åt denna information och, ännu viktigare, om du behöver lagra den informationen.
Om du har tillgång till den information du behöver genom ett inbyggt ramverk, t.ex. HealthKit, behöver du inte duplicera och lagra den informationen. Till exempel kommer Apple att avvisa program som lagrar användarens hälsoinformation i iCloud.
Förutsatt att du behöver lagra känslig information, överväga om den informationen ska hållas lokal. Är det nödvändigt att skicka känslig information till en fjärrserver?
Lagring av känslig information kommer med en varning. Om den server du lagrar känslig information på äventyras kan du vara ansvarig för att exponera den informationen till andra parter.
Online-säkerhet har utvecklats enormt under de senaste decennierna. Autentiseringsprotokoll, till exempel OAuth, har gjort kommunikationen med webbtjänster säkrare och transparent.
Om din ansökan behöver prata med en säker server, överväga hur din ansökan hanterar behörighetsuppgifter. Håller de dem i minnet eller lagras på disken? Om du frågar användarens användarnamn och lösenord för att hämta ett åtkomsttoken är det bra att lagra den åtkomsttoken. Men ska du också lagra användarnamn och lösenord? Svaret är nej i de flesta situationer.
För applikationer som behandlar mycket känslig data, t.ex. hälso- eller finansiell information, kan det till och med vara bättre att behålla åtkomsttoken i minnet och inte lagra det på disken. Att hålla det i minnet gör det mycket säkrare, vilket gör din ansökan betydligt mindre ansvarig. Chansen är att åtkomsttoken har en kort livstid ändå.
Säkerheten hos en ansökan är en grundläggande aspekt av mjukvaruutveckling. Tänk på vilka uppgifter din ansökan har tillgång till och om den ska lagra den informationen. Om du bestämmer dig för att lagra känslig information, behåll ovanstående tips och bästa praxis i åtanke. Se till att du behandlar användarens information med respekt. Även om informationen kan se oavsiktlig ut för dig är det viktigt för användaren.