Läsarfråga: sessioner med AJAX

Jag fick en fråga från en av bloggens läsare:

Säg att jag har en AJAX-funktion som gör något i min MySQL-databas (t ex raderar en rad). AJAX-funktionen kallas från ett Javascript. Hela webbsajten är skyddad med https, session etc, men det hindrar ju inte att någon oinloggad kan kolla på mina scripts-filer om man råkar veta URL:en (eller gissar den), eller hur? Så vad är det som hindrar att man som oinloggad gör AJAX-calls direkt i adressfältet? Hur skyddar man i så fall känsliga operationer i AJAX-script?

Frågan baseras på ett missförstånd, och jag gör själv samma tankevurpa ibland, så jag tänkte försöka reda ut det här.

AJAX använder webbläsarens funktion XMLHttpRequest för att anropa webbservern och returnera svaret till en Javascript-funktion istället för att rendera om sidan i webbläsaren. Det är sedan upp till Javascript-koden att göra något med svaret.

Men själva AJAX-anropen och svaren är helt vanliga http- eller https-anrop, precis som när användaren klickar på en länk och webbläsaren hämtar en ny html-sida. Webbläsaren skickar även med samma cookies!

Eftersom webbläsarens session på servern identifieras med en sessions-cookie, kan du verifiera att besökaren är inloggad även om anropen görs med AJAX.

Inte ens cookie-flaggan HttpOnly ställer till det. (Flaggan ska göra så att cookien inte kan läsas av Javascript och bara skickas fram och tillbaka med http-anrop. Det spelar ingen roll, eftersom webbläsaren lägger till cookien vid AJAX-anrop.)