Spørsmål:
Bruker du grunnleggende godkjenning i en iOS-app, er det trygt?
Alec
2016-12-28 23:36:55 UTC
view on stackexchange narkive permalink

Jeg jobber med en iOS-app som sender brukerens brukernavn og passord for hver URL-forespørsel. For øyeblikket, bare for enkelhets skyld, til det er klart til å bli lansert, blir brukernavnet og passordet sendt over HTTPS i en GET-forespørsel som nedenfor.

  https://www.example.com/ api / login.php? brukernavn = user&password = pass  

HTTPS sikrer parametrene for overføring, men jeg vet at sikkerhetsproblemet med dette er at URL-en kan lagres i nettleserloggen og eventuelle serverlogger.

Spørsmålet mitt er ... hvis jeg blir kvitt å passere brukernavnet og passordet slik jeg for øyeblikket gjør og jeg base64 koder dem før jeg blir sendt, inkluder dem i overskriften som nedenfor, er dette trygt? Vil brukernavnet og passordet bli lagret i en hvilken som helst logg eller logg?

  Autorisasjon: Basic aHR0cHdhdGNoOmY =  

EDIT: I allerede vet base64 lett kan reverseres ... det er ikke det jeg spør om. Jeg spør bare om sikkerheten ved å sette brukernavn og passord i HTTPS GET-parametere i forhold til overskriften.

OPPDATERING: Jeg bruker nå grunnleggende autentisering for påloggingsendepunktet og returnerer et JSON Web Token som skal brukes til alle forespørsler etterpå.

Hvorfor ikke bare bruke en POST-kropp?Det er vanlig å bare logge spørringsdelen, men i teorien kan en server også logge kropp og overskrifter.
Base64 * koding * beskytter ikke dataene.Hvorfor ikke designe applikasjonen riktig fra starten ??Er det virkelig så mye enklere enn å måtte gå tilbake og endre kode?
@user1801810 OP er ikke bekymret for MITM-angrep (som han demper ved å bruke HTTPS), men om legitimasjon som sendes i URL-en.
@user1801810 Jeg vet at base64 ikke vil beskytte noe ... det er ikke det jeg er bekymret for.
Jeg leste hva OP postet og forstår HTTPS.Poenget mitt var at hvis dataene er logget (som vil være avhengig av nettjenesten og applikasjonen), vil base64 ikke beskytte dem.Det poenget er som svar på "" ... brukernavn og passord som jeg gjør for øyeblikket, og jeg base64 koder dem før de sendes, inkluderer dem i overskriften som nedenfor, er dette trygt? "" Og "Vil brukernavnet ogpassordet lagres i en hvilken som helst historie eller logg? "Et enkelt scenario for å stave poenget mitt - jeg har et program som logger alle data ... inkludert overskrifter.I tillegg fanger WAF topptekster.
Hvorfor ikke sende legitimasjonen i en postforespørsel?Det vil minimere synligheten for legitimasjon
Hvis du skriver denne appen, hvorfor er du bekymret for nettleserloggen?
@Agent_L Jeg er ikke bekymret for nettleserhistorikk for appens skyld ... men det er uansett et generelt sikkerhetsanliggende.
Seks svar:
Steffen Ullrich
2016-12-28 23:41:05 UTC
view on stackexchange narkive permalink

Vil brukernavnet og passordet bli lagret i en hvilken som helst historie eller logg?

Vanligvis er ikke autorisasjonsoverskrifter logget, men selvfølgelig kan man konfigurere applikasjonen eller serveren til å logge disse dataene. Sjekk dermed oppsettet ditt.

Når det gjelder lagring i historikken: I tilfelle en nettleser, vil ikke slik legitimasjon bli lagret i historikken, men kan lagres i likhet med informasjonskapsler og sendes automatisk når du besøker nettstedet. Likevel, siden du ikke bruker en nettleser, men din egen app, er det opp til deg hvordan du administrerer denne informasjonen.

Tom
2016-12-29 00:42:21 UTC
view on stackexchange narkive permalink

Du bør bruke et midlertidig token etter den første utvekslingen, for å unngå å overføre den virkelige legitimasjonen med alle forespørsler. Dermed trenger appene dine bare å huske det midlertidige tokenet, ikke hele legitimasjonen.

Og ja, det er bedre å legge det i overskriftene enn i url:

For OPs fordel i å gjøre fremtidig forskning, vil dette vanligvis kalles en "økt-ID".Ikke alt vil kalle det det, men det er den mest brukte terminologien.Den typiske arbeidsflyten er da å logge inn for å få en økt-ID, og deretter blir denne økt-IDen overført med alle fremtidige forespørsler om autentisering.Informasjonskapsler brukes ofte til dette (slik husker nettsteder påloggingen din).
@Kat ja, og i https-sammenheng er de "TLS session ID", noe som betyr noe annet.
Trevor
2016-12-29 03:43:21 UTC
view on stackexchange narkive permalink

Jeg er ikke helt sikker på om OP spør rett ut om ordningen er helt sikker når overskrifter er brukt:

Mitt spørsmål er ... hvis jeg kvitt deg med å sende brukernavnet og passordet slik jeg for øyeblikket gjør det, og jeg base64 koder dem før de blir sendt, inkluder dem i overskriften som nedenfor, er dette trygt?

... eller hvis spørsmålet bare er knyttet til logging på klientsiden, og ikke den generelle sikkerheten:

Vil brukernavnet og passordet bli lagret i en hvilken som helst historie eller logg?

Imidlertid, forutsatt at spørsmålet er av generell sikkerhet, vil jeg poengtere at selv om OP bruker HTTPS, min forståelse er at overføring av legitimasjon over hver forespørsel blir ansett som dårlig i dag fordi MITM-replayangrep fortsatt er mulig (selv om HTTPS er ansatt). Derfor, selv når du bruker HTTPS, bør en tokenordning som JWT favoriseres fremfor å bruke grunnleggende godkjenning på forespørsel.

Julian Knight
2016-12-29 00:32:23 UTC
view on stackexchange narkive permalink

er dette trygt?

Ikke spesielt. Base64-koding kan enkelt reverseres.

Vil brukernavnet og passordet bli lagret i en hvilken som helst historie eller logg?

Kanskje ikke egentlig mulig å fortelle fra informasjon tilgjengelig. Det er selvfølgelig mulig at dataene blir registrert i et MitM-angrep.

Dette kommer virkelig ned på et spørsmål om risiko. Er det god praksis, absolutt ikke. Ville det være egnet for økonomi- / helseposter, absolutt ikke. Ville det være bra nok når du testet et nytt produkt, nesten helt sikkert, spesielt hvis du ikke tar opp live data og vil tilbakestille databasen før du går live.

Merk at OP sammenligner * HTTP Basic Auth (med Base64) over HTTPS * mot * URL GET-parametere (helt klart) over HTTPS *.
Jeg forstår at base64 kan reverseres ... det er ikke min bekymring.Alt jeg bekymrer meg for er sikkerheten ved å sette brukernavn og passord i get-forespørselen mot overskriften.Hva sier du er ikke god praksis nøyaktig Logging?Jeg er litt forvirret av det.
Tim X
2016-12-30 04:08:10 UTC
view on stackexchange narkive permalink

Jeg tror den generelle tilnærmingen din er grunnleggende feil. Selv om jeg fullt ut kan forstå hvor du kommer, er din generelle tilnærming villedet.

En av de store bidragsyterne til det dårlige sikkerhetsnivået i mange applikasjoner, er å la sikkerheten være på et senere tidspunkt i stedet for å bygge den inn i begynnelsen. For ofte er tilnærmingen "la oss bare få appen til å fungere, og vi vil håndtere sikkerhet når vi har den grunnleggende funksjonaliteten i bruk.

Problemet med denne tilnærmingen er at å få den grunnleggende funksjonaliteten til å fungere ofte vil etablere begrensninger og veileder design på en slik måte at alternativene dine når det gjelder sikkerhet blir begrensede.

Dette er helt forståelig. Når du setter deg ned til høyre for den nye killer-appen, vil du fokusere på de kule delene. - nøkkelfunksjonaliteten du vil se, og du vil se reell fremgang. Ofte er det ledere og beslutningstakere som øker presset for å produsere noe å se. Alt dette tryggheten er bare stillas som kommer i veien - en slags nødvendig ondskap.

Dessverre, alt for ofte, resulterer dette i mangel på vekt på sikkerheten. Enten gjør designet å tilføre tilstrekkelig sikkerhet for hardt eller andre press, som leveringsfrister, betyr at hjørner blir kuttet .

Start med sikkerhetsmodellen. Få det til å fungere, og start deretter med app-funksjonaliteten. Det vil gi bedre design og noe som er lettere å vedlikeholde. I dette spesifikke tilfellet

  • Jepp, definitivt bli kvitt GET-parametertilnærmingen.
  • Glem base64-kodingen. Det er egentlig ikke å kjøpe deg noe og vil sannsynligvis skape en falsk følelse av sikkerhet.
  • Se på måter å minimere behovet for å sende passordet eller til og med brukernavnet. Vurder å bruke et slags godkjenningstoken.
  • Forsikre deg om at tokens er kryptert.

Det er mange fordeler med å bruke et autentiseringstoken i stedet for bare brukernavn og passord. Du kan kryptere tilleggsinformasjon i tokenet, for eksempel utløpstid. Jeg har til og med sett tokens som inkluderer klientdetaljer, som nettleserversjon og OS-informasjon, som kan brukes som en type fingeravtrykk.

Den største fordelen med å bruke et token er at du bare passerer brukernavn og passord et absolutt minimum antall ganger. Jo mindre du trenger å sende denne informasjonen, jo bedre. Imidlertid, for å bruke tokens effektivt og på en sikker måte, må de utformes i applikasjonen din og ikke klistres på etterpå.

Den andre fordelen ved å bygge dette inn i appen din fra starten er at du lettere kan teste de forskjellige tilnærmingene og bibliotekene der ute. Det finnes en rekke forskjellige tokenbaserte autentiserings- og autorisasjonsløsninger der ute, og du må identifisere hvilken som passer best til din arkitektur, språk og plattform. Få dette rett i begynnelsen, og resten vil falle på plass langt lettere enn å prøve å tilpasse det til en eksisterende kodebase.

Opaida
2016-12-29 00:56:30 UTC
view on stackexchange narkive permalink

er dette trygt? Vil brukernavnet og passordet bli lagret i en hvilken som helst historie eller logg?

Du vil redusere GET-risikoen i det minste, da det vanligvis ikke blir tatt noen headerlogger i en proxy eller en webserver. / p>

Men bedre å bruke HTTPS i applikasjonen din, da du ikke har til å kjøpe et digitalt sertifikat hvis du har å gjøre med din egen webserver. Du kan bruke Certificate Pinning og selvsignert sertifikat vil være sikkert nok: https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning.

OP bruker allerede HTTPS.
HPKP og å feste et selvsignert sertifikat er to forskjellige ting


Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 3.0-lisensen den distribueres under.
Loading...