Förhindra att folk gör egna post requests

Permalänk
Medlem

Förhindra att folk gör egna post requests

Hej jag har skapat en hemsida som skickar information från ett formulär till php med hjälp av POST requests.
Då delar av formuläret fylls i automatiskt ska det inte gå att ändra/göra egna post-requests?
Hur gör man lättast det? Har sett att man kan göra det med tokens men jag förstår ej hur detta fungerar

Hoppas någon där ute har koll på detta

Tack på förhand
Jesper

Permalänk
Medlem

Det jag läst mig till /sett med tokens är alltså att du har ett krav på att en token ska skickas med i din post.

Denna token sätts aningen som en ett hidden form field eller som en cookie, på den sida som användaren requestar för att få formuläret.
Detta hindrar ju att nån annan part antingen bara postar rätt in, eller en cross-site.

Men du har ju ett mycket mer delikat problem. Har ingen som helst idé på hur man ska hindra användaren från att då bara ta en token du skickat med och sen göra en egen post i t ex Fiddler.

Jag vet att t ex blocket håller på med massa sneaky shit med sitt API.
Varje api-anrop från iOS-appen skickar med en hash, har man inte en korrekt hash så blir det reject.
Detta funkar ju dock eftersom hashen kalkyleras i appen, och då jag ej har tillgång till källkoden till appen så blir det svårt att lista ut vad det är som görs.

Men motsvarande i en browser kommer ju inte heller funka eftersom du då måste göra det i t ex javascript och då har ju användarna tillgång till källkoden.

Blocket kör även med en token när man ska "kontakta" en annons.
<input type="hidden" name="ik" value="5317799f52c5c6da38572ad7e24eb593e682acac"/>
Det där finns med i deras formulär, försöker man göra en post mot ett korrekt annonsnummer fast utan rätt "ik" så blir det reject.
Men det hindrar ju ingen (jag gjorde det då jag byggde en egen app då jag inte gillar deras ) som först hämtar ner deras formulär, parsar ut "korrekt" "ik" för den annonsen och sen bara bifogar den i min egna post

Ska bli intressant att se vad folk har att komma med

Edit:
http://www.asp.net/web-api/overview/security/preventing-cross...
Där har du läsning om det som går att "slå på" automagiskt i .net MVC

Permalänk
Medlem

Tack för ett mycket informativt inlägg.

Jag fick en ide:
Min hemsida innehåller ett spel (vars resultat ska summeras med post och jag vill inte att folk ska kunna fuska).
I början av varje runda hämtas topplistan med hjälp av en GET.
Om jag i min php genererar en token som jag sen lagrar i en mysql-databas med token samt timestamp samt skickar tillbaka till client side kan jag där spara den i en variabel. Sedan när man ska spara sitt resultat och skicka det med en POST-request kan jag lägga till den token man har fått med hjälp av jquery där den är sparad som variabel. Innan man får summera sitt resultat tittar jag i databasen om den genererade token existerar där och om den gör det så får man spara sitt resultat.

Användaren borde aldrig se denna token då den är sparad i variabeln väll?
Tror du detta tar för mycket datorkraft från mysql-servern?

(insåg precis att man kommer att se token i GET-elementet), dock försvårar det lite iaf, då det är spelresultat är inte informationen speciellt känslig men det är tråkigt när folk kan fuska

Permalänk
Medlem

Jo precis, sålänge du inte har client-side koden relativt skyddad (t ex en iOS-app) så blir det problematiskt.
Här har du lite mer intressant läsning på samma fråga:

http://gamedev.stackexchange.com/questions/4181/how-can-i-pre...

Permalänk
Medlem

Precis, det mesta kör ihop sig på att användaren kan se källkoden så enkelt.

Intressant, ska fundera på om jag kan implementera en liknande lösning i mitt spel(snake).
Jag skriver resultatet av testandet här sen

Permalänk
Medlem

Det är ju iof bara att sniffa trafiken för att se vad som händer bakom kulisserna. Kort och gott kan du inte förhindra att folk kan fuska, bara försvåra det. I detta fallet så är ""security" by obscurity" the way.

Permalänk
Medlem

Men om man skapar tokens på sessions så kan man inte gissa sig till en token som skall fungera och iom att en token gäller bara för en session så slutar den funka efter ett tag.

https://css-tricks.com/serious-form-security/
http://bkcore.com/blog/code/nocsrf-php-class.html

Eller har jag missat nått?

Visa signatur

Arch - Makepkg, not war -||- Gigabyte X570 Aorus Master -||- GSkill 64GiB DDR4 14-14-15-35-1T 3600Mhz -||- AMD 5900x-||- Gigabyte RX6900XT -||- 2x Adata XPG sx8200 Pro 1TB -||- EVGA G2 750W -||- Corsair 570x -||- O2+ODAC-||- Sennheiser HD-650 -|| Boycott EA,2K,Activision,Ubisoft,WB,EGS
Arch Linux, one hell of a distribution.

Permalänk
Medlem
Skrivet av Commander:

Men om man skapar tokens på sessions så kan man inte gissa sig till en token som skall fungera och iom att en token gäller bara för en session så slutar den funka efter ett tag.

https://css-tricks.com/serious-form-security/
http://bkcore.com/blog/code/nocsrf-php-class.html

Eller har jag missat nått?

Sure. men så länge det är möjligt att snappa upp token när den överförs till klienten så går det att fuska. Och det kommer det "alltid" att göra. Även om man kör kryptering osv.

Permalänk
Medlem

Väldigt intressanta länkar Commander! Blir till att testa NoCSRF

Permalänk
Medlem

Enda sättet att göra så att folk inte kan fuska är genom att köra spelet på server sidan. Varje gång användaren gör ett drag så skickas ett request till din server som utför draget i spelet och skickar tillbaka resultatet.

Annars kommer det alltid att gå att fuska till sig max score. Är bara att ändra värdet som du skickar till servern.

Visa signatur

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