Är din webbapplikation säker?

Säkerhet är något som är lätt att missa i en webbapplikation ofta på grund av brist på kunskap och avsaknad av säkerhetstänk under utveckling. Det är ofta fokus på vad en applikation ska ha för funktioner, dvs vad som ska gå att göra, och mindre på vad som inte ska gå att göra.

Vi har tagit fram guide om webbsäkerhet för att inspirera till ökad kunskap om vanliga attacker och hur du skyddar dig mot dessa.

Webbsäkerhetsguiden hittar du här: https://github.com/attentec/web-security-guide

Exempel på en attackvektor i PHP

Vi tar ett exempel från guiden som kan vara en aha-upplevelse för den som programmerat PHP men inte undersökt i detalj hur PHP tar emot GET/POST-data.

I PHP tar du vanligtvis in GET/POST-data från användaren genom variablerna $_GET och $_POST. Vid en första titt på hur variablerna fungerar så verkar det som att värdet på exempelvis $_GET["frukt"] antingen ej är satt eller att det är en sträng t.ex. "äpple" om sidan anropas med URL:en index.php?frukt=äpple.

Någon av funktionerna som du skickar vidare indatat till kanske får ett annat beteende om det exempelvis får en array istället för en sträng. Men det är ju lugnt, för du får ju bara in strängar från ditt GET-data. Nja, så enkelt var det tyvärr inte. Det går nämligen att få PHP att skapa arrayer av indatat. Genom genom att lägga hakparenteser efter parameterns namn, t.e.x?fruit[]=banana. Här är fler exempel med olika GET-strängar som ger olika arrayer:

<?php
// ?fruit=banana
//   => {"fruit":"banana"}
echo json_encode(array("fruit" => $_GET['fruit']));

// ?fruit[]=banana
//   => {"fruit":["banana"]}

// ?fruit[]=banana&fruit[]=pear
//   => {"fruit":["banana","pear"]}

// ?fruit[banana]=chocolate
//   => {"fruit":{"banana":"chocolate"}}

// ?fruit[x][y]=1&fruit[x][z][]=2&fruit[x][z][]=3
//   => {"fruit":{"x":{"y":"1","z":["2","3"]}}}
?>

Här är några exempel på där detta utnyttjas i verklig kod mot t.ex. Mongo eller mot hash_hmac-funktionen.

För fler exempel rekommenderar vi att läsa guiden för mer inspiration. Vi går även igenom OWASPs topp 10-lista med kända webbsårbarheter samt andra exempel.


Säkerhetguiden har skapats av David Granqvist och Niklas Holm