CSRF protection

Her kan du få hjælp og stille spørgsmål til PHP!
Besvar
Josefine
Geni
Geni
Indlæg:308
Tilmeldt:9. dec 2011, 16:46
CSRF protection

Indlæg af Josefine » 9. aug 2019, 10:53

Hej.
I denne video (https://www.youtube.com/watch?v=usdCSL2ZreY) undgås CSRF ved, at der oprettes et token på siden, som gemmes i formen og senere tjekkes for, når formen submittes. Men så kom jeg til at tænke på: vil en attacker ikke bare kunne bruge variabelnavnet $token til at bypasse dette tjek/if statement? Er der noget, jeg overser?
Mvh.

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: CSRF protection

Indlæg af jepperask » 9. aug 2019, 19:12

Husk på at PHP og $token variablen kun findes på serveren.
Det eneste hackeren har at arbejde med, er det data der kan sendes/modtages over HTTP.
I videoen sammenlignes $_POST (som kommer fra HTML-formen) med $_SESSION (som kun findes på serveren).
Et problem kunne måske være hvis $_SESSION['token'] ikke bliver clearet ved POST, for så skal man bare få token første gang og så kan man over-poste med den samme token uden at behøve lave et nyt GET request.

Josefine
Geni
Geni
Indlæg:308
Tilmeldt:9. dec 2011, 16:46

Re: CSRF protection

Indlæg af Josefine » 9. aug 2019, 20:20

Sorry jeg er lidt ny i det med tokens og hvordan CSRF fungerer, så jeg forstår stadig ikke helt:

Sådan som jeg har forstået det indtil videre, så genereres et token på server-siden, som så gives til formen på hjemmesiden (og klient-siden?). Når formen submittes, så tjekkes der for, om den form, der submittes, er fra hjemmesiden og ikke fra en anden hjemmeside (altså CSRF) - dette sker ved at tjekke det givne token i formen med det fra server-siden.

Hvorfor kan hackeren ikke bare inkludere

Kode: Vælg alt

<input type="hidden" name="nocsrf" value="<?php echo $_SESSION['CSRFtoken']; ?>">
i sin form, ligesom den er det på den rigtige hjemmeside? Hvis vedkommende nu finder ud af, at navnet er 'CSRFtoken'?
Eller kan hackeren f.eks. ikke også på en måde få det givne token fra den rigtige hjemmesides form, da denne jo står i source code? Og så bruge det i formen i stedet for <?php echo $_SESSION['CSRFtoken']; ?> ?

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: CSRF protection

Indlæg af cristian » 10. aug 2019, 14:07

Josefine prøv at se denne video, de forklar Cross Site Request Forgery ret godt, og jeg tænker du fanger det humlen efterfølgende.
https://www.youtube.com/watch?v=vRBihr41JTo

Jeg har også set videoen du linker til https://www.youtube.com/watch?v=usdCSL2ZreY og jeg må godt nok sige at han gør sin forklaring unødvendig indviklet.

"On form load, set value to 123321abc and send it to the client".
"On form received from client, check if form value still equals 123321abc"
- If yes, allow.
- If no, drop.

On next form load
"On form load, set value to 123456789ab and send it to the client".
"On form received from client, check if form value still equals 123456789ab"
- If yes, allow.
- If no, drop.

continue...

Value bliver genereret af serveren og derefter sent til klienten, derfor kan en hacker (hver mindre han er sindssyg heldig) ikke gætte value.

Josefine
Geni
Geni
Indlæg:308
Tilmeldt:9. dec 2011, 16:46

Re: CSRF protection

Indlæg af Josefine » 14. aug 2019, 21:48

Altså jeg forstår godt princippet i det, men jeg forstår stadig ikke helt, det jeg skrev om tidligere. Altså: hvorfor angriberen ikke kan få adgang til token? Token bliver jo synlig under 'inspect' i browseren, vil angriberen så ikke kunne læse det på en måde? Altså, når formen på den rigtige hjemmeside bliver givet et token, når siden, den er på, besøges - hvordan er dette token så beskyttet fra at blive kendt? Kan angriberen ikke også bare inkludere

Kode: Vælg alt

        <input type="hidden" name="nocsrf" value="<?php echo $_SESSION['CSRFtoken']; ?>">
i sin form, og så bliver value det samme token, der blev givet, da siden blev besøgt? Eller er det bare ikke muligt at hente $_SESSION['CSRFtoken'] og få samme token fra en anden hjemmeside?
Sorry hvis det er lidt basis :oops:

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: CSRF protection

Indlæg af cristian » 15. aug 2019, 12:22

Josefine skrev:
14. aug 2019, 21:48
hvorfor angriberen ikke kan få adgang til token?
1. Din token genereres på serveren, som en hacker ikke har adgang til.
2. Du sender din token fra server til klienten over HTTPS, en datastrøm som hacker ikke kan kigge ind i.

Hvordan din HTTPS strøm fungere er igennem Diffie Hellman nøgle udveksling som føder din HTTPS forbindelsen
https://www.youtube.com/watch?v=cM4mNVUBtHk
https://www.youtube.com/watch?v=E_wX40fQwEA

Hvis du sender din token over en HTTP forbindelse er det muligt for en hacker igennem et man-in-the-middle angreb at opsnappe din token.
Der var engang en god video på youtube hvor dette blev demonsteret med et supermarked som brugte HTTP, men den kan jeg ikke lige finde :(

Josefine
Geni
Geni
Indlæg:308
Tilmeldt:9. dec 2011, 16:46

Re: CSRF protection

Indlæg af Josefine » 15. aug 2019, 17:54

Men selv når token så er landet hos klienten, så kan hackeren bare stadig ikke tilgå den på nogen måde?

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: CSRF protection

Indlæg af cristian » 15. aug 2019, 20:01

Josefine skrev:
15. aug 2019, 17:54
Men selv når token så er landet hos klienten, så kan hackeren bare stadig ikke tilgå den på nogen måde?
Den eneste situation jeg kan komme i tanke om er hvis en hacker har kompromitteret dit system, ved at installere en virus, rootkit eller andet som kan levere denne information tilbage til hackeren efter at dataene forlader HTTPS tunellen.

Josefine
Geni
Geni
Indlæg:308
Tilmeldt:9. dec 2011, 16:46

Re: CSRF protection

Indlæg af Josefine » 16. aug 2019, 10:40

Ok, tak for svar :) Vil det være OK at benytte sig af samme token, hvis der er flere forms på én side? Så længe den altid ændres ved at submitte?

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: CSRF protection

Indlæg af cristian » 23. aug 2019, 17:41

Det ser jeg umiddelbart ikke noget problem i

Josefine
Geni
Geni
Indlæg:308
Tilmeldt:9. dec 2011, 16:46

Re: CSRF protection

Indlæg af Josefine » 31. aug 2019, 08:18

Tak for hjælpen!

Besvar