Permalänk

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?

Permalänk
Medlem
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.

Visa signatur

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

Permalänk
Medlem

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.

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk

@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?

Permalänk
Medlem

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.

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk
Medlem

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..

Permalänk
Medlem
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!

Visa signatur

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