Säkerhet i en app

Diskussion i 'Frågor, support och diskussion' startad av mille7, 15 aug 2012.

  1. mille7

    mille7 Kid Droid Medlem

    Blev medlem:
    21 jan 2011
    Inlägg:
    56
    Mottagna gillanden:
    2

    MINA ENHETER

    Hej

    Jag har idag ett fult phpscript på en server som loggar in på en sida och parsar lite data för att sedan skicka data i formulär.

    Jag tänkte skriva en liten ful app för att lättare kunna ändra viss data och funderar då på hur man gör det på ett säkert sätt.

    Jag har alltså användardata som jag vill kunna ändra från appen. Frågan lyder hur man ska tänka när det gäller säkerhet. Nu är det ju egenligen ingen mer än jag som får se datan men vill ändå lära mig hur jag ska tänka.

    Jag tänker mig alltså:

    App skickar request att den vill ha data.
    Servern kör mitt php-script med användnamn och lösenord.
    Servern skickar datan till appen.
    Appen fyller i formulär och skickar tillbaka datan till ett php-script.

    Just nu har hårdkodat användarnamn och lösenord i scriptet men det känns fel.

    Finns det någon bra sida på internet som förklarar hur man ska skicka "känslig" data eller några andra tips?

    //mille

    PS. Jag vet att jag antligen kan göra all parsning i min app men då jag redan har ett script som hämtar datan tänkte jag att det är smidigast att använda det.
     
  2. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Det absolut viktigaste för att göra kommunikationen säker är att aktivera SSL på servern. Då har du en säker överföringslänk som du kan skicka känslig data via utan att någon kan se eller manipulera den.
    Det går att signera sina egna certifikat om man vill slippa den extra kostnaden, men det är inget som ska användas på en publik site eftersom det oftast dyker upp frågor om man verkligen litar på certifikatet.

    Sen bör du hasha alla lösenord och aldrig spara lösenord i klartext någonstans (varken på klient eller server).
     
  3. urbanlarsson

    urbanlarsson Adult Droid Medlem

    Blev medlem:
    15 feb 2010
    Inlägg:
    686
    Mottagna gillanden:
    78

    MINA ENHETER

    Det första du ska göra är att analysera attack-vekorerna. I ditt fall finns det tre stycken, mobilen, servern och kommunikationen.

    Nästa steg är att fundera på vem det är du vill skydda dig mot. Vill du skydda dig mot en sk. non-discriminative attacker (någon som kommer attackera din app / server bara för det går) eller vill du skydda dig mot en attackerare som verkligen vill komma åt information du har och som har bra kunskaper om säkerhet... eller vill du skydda dig mot t.ex. den kinesiska regeringen?

    När du svarat på vem du vill skydda dig mot, och vad det är du vill skydda, så kan du designa säkerheten.

    Jag kan ta ett exempel. Om du vill skydda dig mot en attackerare som vill åt information i din app och har bra kunskaper och tillgång till lite datakraft så ska du göra följande.

    Mobilen
    Enkryptera all information (finns färdig kod du kan använda, du ska absolut inte implementera din egen enkryptering, ta en titt på bouncycastle.org t.ex.) Glöm inte att använda s.k "user-supplied data" i din enkrypteringsnyckel, t.ex. lösenordet. Fundera också på hur du kommer hantera lösenordsbyten.
    Ett bra sätt är att generera en nyckel när appen installeras som används för att enkryptera data, sen i någon form använda lösenordet för att enkryptera nyckeln. Det blir då rätt enkelt när användaren byter lösenord.

    Server
    Kolla upp OWASP Top 10 och se till att du skyddar dig mot allt som står där.

    Kommunikationen
    Du bör använda SSL, dock så får du köpa ett cert för att få det att funka, SSL utan att verifiera cert är rätt värdelöst (kostar inte mycket, 200 - 300 per år eller så).
    Personligen skulle jag rekommendera att använda ytterligare något utöver SSL då det inte är så svårt att komma runt den, Secure Remote Password är riktigt fint och bouncycaste.org har en bit kod du kan använda.

    Till sist så ska du också fundera på vad du kan göra för det ska bli svårt för en attackerare som stjäl informationen att använda den. T.ex. rekommenderas hashing av lösenord, men du ska komma ihåg att ett GTX-470 kort kan testa närmare 2M hashar i sekunden (beror på algoritm osv). Kolla upp oclhashcat benchmarks så ska du se, en hash är marginellt bättre än inget alls.
    Du bör därför kombinera lösenordet med ett s.k. salt och sen hasha det minst 10 000 ggr (du loopar alltså hashningsfunktionen minst 10 000 ggr). Det gör att det tar lite längre tid om man ska brute-forca det.

    Lycka till :)
     
  4. mille7

    mille7 Kid Droid Medlem

    Blev medlem:
    21 jan 2011
    Inlägg:
    56
    Mottagna gillanden:
    2

    MINA ENHETER

    Tack för svaren.

    Var egentligen ute efter hur man ska tänka. Tycker att det är en ganska viktig aspekt när man gör en app att den inte ska skicka massa klartext data men det finns få guider på nätet där man tar upp säkerheten och det är lite det jag söker, hur och vad man ska göra.

    I mitt lilla lilla projekt spelar det ingen större roll men är ändå kul att göra på "rätt" sätt.
    Men ska iaf hasha lösenordet och slå på ssl.