Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2004

Skydda app's webbresurser

Till att börja med måste jag säga att de här inte riktigt är mitt område så kanske är svaret sjukt uppenbart men inte för mig.

Om vi använder oss av en webbtjänst som hämtas från https://xxx.se?token=zzz hur är då lättaste sätten för en skurkfigur att få ut den här adressen och token?

Vad är common practice för att lösa säkerheten kring sånt här?

Trädvy Permalänk
Medlem
Registrerad
Okt 2011
Skrivet av -=*ThE_cRoW*=-:

Till att börja med måste jag säga att de här inte riktigt är mitt område så kanske är svaret sjukt uppenbart men inte för mig.

Om vi använder oss av en webbtjänst som hämtas från https://xxx.se?token=zzz hur är då lättaste sätten för en skurkfigur att få ut den här adressen och token?

Vad är common practice för att lösa säkerheten kring sånt här?

Hämta datan på backend sidan. Inte frontend.

Alltså hämta den datan med tex PHP och inte med javascript.

Så istället för att ha:

Frontend JS

$.get('xxx.se?token=zzz', function(result){...});

så har ni:

Frontend JS

$.get('backend.php', function(result) {...});

backend.php

<?php echo shell_exec('curl xxx.se?token=zzz'); // Eller liknande kod som hämtar resultatet från xxx.se och skriver ut det ?>

Med detta sätt kan ingen utomstående se varifrån ni hämtar er data. Syns bara att ni hämtar den från backend.php.

Programmerare -> PHP | HTML | CSS | JS | Java.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Aug 2010

Det kan även vara en bra idé att själv generera ett token för varje användare, så att ni kan hålla reda på hur många förfrågningar som varje användare gör. Om ni då ser att någon gör omänskligt många förfrågningar kan ni försöka ta lämpliga åtgärder (i extremfall kanske stänga av IP-adressen från att göra fler förfrågningar).

För att lägga till till @Sony?s svar så finns cURL inbyggt i PHP, vilket jag skulle föredra framför att använda `shell_exec`: http://php.net/manual/en/curl.examples-basic.php.

Du får gärna citera eller nämna mig (@ToJa92) om du svarar på något jag skrivit.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2004

@Sony?: Självklart så hämtas all data serverside, de är ju en app.

@ToJa92: Yes, cURL är en bättre lösning.

Men min fråga är mer:
1. Vad kan en användare göra på sin telefon för att se varifrån denne hämtar datan. Vilka är de vanligaste sätten och hur döljer man vad som hämtas eller skickas så väl som möjligt?
2. Vad finns det för tokeniseringslösningar?

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Aug 2010

Det går lätt att skapa en egen WiFi-hotspot och få iOS- och Android-enheter att ansluta via den. På datorn som agerar hotspot går det då att köra exempelvis WireShark för att lyssna av trafiken mellan appen och er server.

Vill du göra det svårare att lyssna av bör du kryptera kommunikationen, med exempelvis TLS.
Apple har en artikel på sin utvecklarsida som går igenom hur man kan göra i OS X och iOS: https://developer.apple.com/library/prerelease/ios/documentat....

Om ni nu utvecklar en app, loggar inte användarna in på något sätt? Om de gör det, så antar jag att ni redan nu använder er av någon av form av token som skickas till er server när användaren gör något som kräver inloggning.

Om ni enbart vill hålla reda på vilka som kommunicerar med er server kan ni generera ett UUID på servern, skicka tillbaka det till appen och låta appen skicka med det varje gång den gör en förfrågan, ni kan då spara alla UUID i databasen och då se att förfrågan kommer från er app (såvida inte någon får tag på UUIDt och tar reda på hur de skickar frågor till er server.

Du får gärna citera eller nämna mig (@ToJa92) om du svarar på något jag skrivit.

Trädvy Permalänk
Medlem
Registrerad
Mar 2013

Kolla in json web token (jwt), smidigt format och finns bra implementationer för t om smalltalk. Att hitta vart en request skickas är inte svårt, det ni ska skydda är ju den token ni delar ut, det gör ni med krypterad kommunikation och genom att använda smarta sätt att lagra tokens på. Brukar inte vara så populärt att behöva logga in varje gång man öppnar appen. Android/iOS har ju, för de flesta fall, tillräckligt bra skydd för att isolera olika applikationers data och finns väl för de flesta versioner bra stöd för krypterade keystores. Har enheten blivit kapad och rootad så blir det svårare att skydda, lite ansvar får man lägga på användaren dock..

Trädvy Permalänk
Medlem
Registrerad
Jan 2015
Skrivet av Sony?:

Hämta datan på backend sidan. Inte frontend.

Alltså hämta den datan med tex PHP och inte med javascript.

Så istället för att ha:

Frontend JS

$.get('xxx.se?token=zzz', function(result){...});

så har ni:

Frontend JS

$.get('backend.php', function(result) {...});

backend.php

<?php echo shell_exec('curl xxx.se?token=zzz'); // Eller liknande kod som hämtar resultatet från xxx.se och skriver ut det ?>

Med detta sätt kan ingen utomstående se varifrån ni hämtar er data. Syns bara att ni hämtar den från backend.php.

Om man ska göra så här måste man vara helt säker på att all indata saniteras på rätt sätt. Man vill ju inte att någon ska kunna exekvera kod på servern!

Intel Core i5 4460 @ 3.20GHz | 12GB DDR3 | ASUS Z-97A | GTX 560 | 64GB Samsung SSD + diverse hårddiskar.