CSRF protection
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.
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.
Re: CSRF protection
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.
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.
Re: CSRF protection
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 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']; ?> ?
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']; ?>">
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']; ?> ?
Re: CSRF protection
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.
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.
Re: CSRF protection
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
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
Kode: Vælg alt
<input type="hidden" name="nocsrf" value="<?php echo $_SESSION['CSRFtoken']; ?>">
Sorry hvis det er lidt basis
Re: CSRF protection
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
Re: CSRF protection
Men selv når token så er landet hos klienten, så kan hackeren bare stadig ikke tilgå den på nogen måde?
Re: CSRF protection
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.
Re: CSRF protection
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?
Re: CSRF protection
Det ser jeg umiddelbart ikke noget problem i