17 februari, 2008

AJAX: Är ajax säkert

Förord
Jag har inte läst på så mycket om AJAX säkerhet men det jag tänker berätta är den mest grundläggande säkerheten som de flesta glömmer bort när de utvecklar en ajax-tjänst.

Introduktion
Detta är min första lilla artikel om säkerheten i AJAX. Det är mycket grundläggande och är till för många av er där ute som inte är så insatta i detta. Personligen har jag själv inte hunnit utveckla så mycket med AJAX men när jag skapade en enkel dynamisk CMS (Content Management System) tjänst lärde jag mig hur jag skulle implementera simpla säkerhetsåtgärder.

Att tänka på
För det första måste ni veta vad AJAX egentligen är och hur det fungerar. Jag kommer inte gå igenom alla detaljer, utom endast det nödvändigaste. AJAX står för Asynchronous Javascript And XML är är ett sätt för en webbsida att kontakta en webbserver i bakgrunden (dolda anrop/request) utan att det märks för besökaren. Webbsidan har t.ex ett Javascript som anropar webbservern och begär information om de senaste inloggade personerna. Webbservern kör PHP och använder MySQL för att hämta informationen som efterfrågas av AJAX. Koden kanske är utvecklad så att den bara visar användare som har samma behörighet för webbsidan som den aktuella besökaren har. Därför skickas besökarens ID med i AJAX anropet och klistras in i SQL-frågan som skickas till databasen med PHP. Sedan skickar PHP ett svar (response) tillbaka med de 10 senaste inloggade användarna på webbsidan. Utvecklaren som har programmerat ihop allt detta tror att koden är säker eftersom det är dolt för användaren så därför har inga säkerhetskontroller implementerats.

Observera att detta bara är ett testscenario!

Hur kan man knäcka detta system
Man kan knäcka systemet enkelt genom att modifiera sitt användar ID med ett enkelt Javascript. Man kan då skicka med "skadlig" kod som sedan klistras in i SQL-frågan tillsammans med användar ID:t och göra en så kallad SQL Injection.

Utvecklaren får sedan ett epostmeddelande från en säkerhetsexpert som har analyserat hans/hennes AJAX tjänst och talar om vilka brister som finns. Utvecklaren tänker inte mer på det utan försöker istället dölja Javascript koden som används i AJAX anropet. Det kan t.ex vara kod som innehåller värden och parametrar som sedan skickas till en specifik adress med GET eller POST.

Utvecklaren tror då att man kan använda webbläsarens referer-värde för att kontrollera att koden kommer från rätt plats. Men detta kan också modifieras av en illasinnad besökare. Istället blir han/hon kontaktad av en person som säger att AJAX fungerar precis som en vanlig besökare som surfar på webbsidan men att det istället görs automatiskt med diverse kommandon som skrivs av utvecklaren. Detta betyder att det inte spelar någon roll (i nuläget) om man använder AJAX eller inte för att göra anrop till webbservern, som annars skulle ha skett med t.ex formulär, klick, knappar, länkar etc.

Säkra tjänsten
För att säkra en AJAX-tjänst måste man även implementera säkerhetskontroller på serversidan. Om man t.ex använder MySQL och PHP kan man säkra SQL-frågan med en funktion som heter mysql_real_escape_string(). Sedan kan man även skapa HASH (Message-Digest) kontroller på datan som skickas och sedan se efter om datan har modifierats.

En annan viktig sak är att endast tillåta tal och siffror om det är det som förväntas - och inget annat.

Sammanfattning
Okej! Så om ni använder AJAX måste ni även se till att ni gör samma säkerhetskontroller som förut, innan ni började använda AJAX för att skicka/ta emot data. Helst görs detta på serversidan men man kan även försöka dölja och kryptera Javascriptet på webbsidan som anropar webbservern så att det är svårare för illasinnade besökare att tyda och förstå kodens logik och funktion. Säkra alltid alla data som skickas till servern.

Inga kommentarer:

Välkomna till bloggen

Välkomna ska ni vara kära besökare. Jag skriver om IT för att det är kul och för att jag vill dela med mig av information och kunskap. Jag försöker hålla bloggen så kategoriserad som möjligt för att ni enklare ska hitta intressanta länkar och artiklar.