Ajax+säkerhet+cross+site+scripting

 Ajax baserade applikationer använder sig av i större utsträckning av otillförlitliga informationskällor (bloggar, feeds etc.). Det kan leda till cross-site scripting. Cross site scripting (XSS) händes när en plats lyckas att köra ett skript på en annan webbplats, med användarens rättigheter.  Om en webbsidan skapades som innehåller ett formulär som innehåller ett element  och därefter glömdes att ”escape” data(lägger till escape tecken \) och serversida innehåller en php skript som skriver ut variabelns värde t.ex. om valideringen misslyckades "> Denna print satsen gör det möjligt för den elaka(ondsinta) webbplatsen att skicka (via iframe, länk, etc.) sitt eget skript istället(som variabelns värde) och skapa en webbsida med källkoden som innehåller den elaka skriptet(se nedan): <input name="foo" value <span style="font-family: Courier New,serif;"><span style="font-family: Times New Roman,serif;">**=""> det elaka skriptet här <"**  <span style="font-family: Courier New,serif;"><span style="font-family: Times New Roman,serif;">"> <span style="font-family: Times New Roman,serif;">Detta hot skulle enkelt elimineras med: <span style="font-family: Courier New,serif;"><span style="font-family: Courier New,serif;"><span style="font-family: Times New Roman,serif;"><input name="amm" value="<?php  <span style="font-family: Courier New,serif;"><span style="font-family: Courier New,serif;"><span style="font-family: Times New Roman,serif;">print htmlspecialchars($amm); ?>">
 * <span style="font-family: Times New Roman,serif;">AJAX sårbarheter **
 * <span style="font-family: Times New Roman,serif;"> Först kort nämns ett antal sårbarheter(säkerhetsproblem) som Ajax har och därefter ges lite mer omfattad beskrivning av cross site scripting. **
 * <span style="font-family: Times New Roman,serif;"> Ett antal säkerhetsproblem kan uppstå i en ajax baserad webbapplikation: **
 * **<span style="font-family: Times New Roman,serif;"> Ökad interaktivitet mellan webbapplikationer ökar i sin tur nätverktrafik. Det leder att säkerhetsrisk ökar också. **
 * **<span style="font-family: Times New Roman,serif;"> De flesta tror att en användaren kan inte komma åt skriptet på server sidan utan att först gå på GUI webbsida (ajax baserad webbsida = html sida med javascript). Ajax baseras på **<span style="font-family: Times New Roman,serif;">XML HTTP Request och det gör de flesta ett falsk känsla av säkerhet, dvs. de tror att ajax baserade applikationer är osårbara. Men XML HTTP Request funktion använder i grunden http protokol (sårbar på olika attack) då de typer av attack som används för de andra webbaplikationer (icke ajax baserade) kan också användas på ajax baserade webbapplikationer.
 * <span style="font-family: Times New Roman,serif;">En annan sårbarhet ligger i faktumet att Ajax applikationer använder sig av javascript för att transformera ett användarens kommando i ett funktionsanrop. Sådana kommando är skickade i ren (plain) text till servern och på grund av detta kan avslöjas t.ex. en valid användarens ID, variablernas namn etc. Alternativet är att använda SSL, men det är inte bra att skicka hela sidan med SSL om bara några få data på sidan behöver bli krypterade.
 * <span style="font-family: Times New Roman,serif;">Bristande kunskaper i en ny teknologi (som ajax baserade applikationer) kan ledda till en felaktig slutsats att serverside eller clientside validering är överflödig och avsaknad av en eller av de bägge två (serverside eller clientside validering) kan skapa en säkerhetsrisk.
 * <span style="font-family: Times New Roman,serif;">En webbläsare kan vid ett ajax anrop genomföra data serialisering (hämta t.ex. en xml fil). Data från denna xml filen skickas, men en man i mitten (den elake hackaren) kan ta emot datan och skicka förändrad data vidare.
 * <span style="font-family: Times New Roman,serif;">När de dynamiska sidor skapas hämtar Ajax info från servern och skickar de hämtade datan till DOM för att den kan uppdateras. Denna uppdatering utförs med skräddarsydda funktioner eller eval funktion. Om detta innehåll (info från servern) inte valideras då kan det ledda till att t.ex. ett ondsint innehåll exekveras.

<span style="font-family: Times New Roman,serif;">Där <span style="font-family: Courier New,serif;"><span style="font-family: Times New Roman,serif;">htmlspecialchars konverterar de <span style="font-family: Times New Roman,serif;">speciella tecknena till HTML entiteter. <span style="font-family: Times New Roman,serif;"> Det kan också hända att hela sidan skickas som parameter på en gång och det glöms att “escape” data, då kan den “elaka” inehållet inijiceras i sidan: <span style="font-family: Times New Roman,serif;">mypage.php?pagecontent=elekainnehållet <span style="font-family: Times New Roman,serif;">Botemedlet är som i första fallet escape data (i fallet med php med <span style="font-family: Courier New,serif;"><span style="font-family: Times New Roman,serif;">htmlspecialchars <span style="font-family: Times New Roman,serif;">). <span style="font-family: Times New Roman,serif;">De olika sätt att förhindra attack är(vissa är inte så effektiva): <span style="font-family: Courier New,serif;"><span style="font-family: Courier New,serif;">[]
 * “<span style="font-family: Times New Roman,serif;">escape” data – escape alla speciella tecken (<, > , “ etc.)
 * <span style="font-family: Times New Roman,serif;">kontrollera url format – måste börja med http: eller https:. Vissa skript (de elaka) använder sig av location header eller meta(taggen) uppdatering för att skicka skript till sidan.
 * <span style="font-family: Times New Roman,serif;">ett skript (javascript ) ska aldrig evaluera någonting passerad som parameter till sidan. Om du laddar en bild via någon skickat parameter som är bildens URL, då kan det elaka hackaren skicka sitt elaka skript istället för url parameter (t.ex. se nedan)
 * <span style="font-family: Times New Roman,serif;">använd bara http only kakor – som förhindrar att kakor bli åtkomliga till skriptet. Men http kakor kan användas bara i vissa webbläsare.
 * <span style="font-family: Times New Roman,serif;">http autentisering kan användas men ingen webbläsare tillåter att logga ut ur den och på detta sätt är den lämplig för XSRF attack(cross-site request forgery - attack som tvingar användaren att utföra en oönskad aktion på en webbaplikation där han/hon är autentiserad)
 * <span style="font-family: Times New Roman,serif;">spara unik session id i kakan istället för användarens namn ock lösenord. Med kännedom av bara id kan den elaka hackaren inte logga in igen efter användaren har loggat ut.
 * <span style="font-family: Times New Roman,serif;">tillåt bara ett visst html input. Det är inte så enkelt darför att det elaka skriptet kan läggas till i html på massor olika sätt (via skript taggen, via div taggen, via href attribut etc.).
 * <span style="font-family: Times New Roman,serif;">använd BB kod – en förenklad html kod som använder [ ] istället för < >.Antalet taggar är mindre än i html som gör den lättare överskådlig.
 * <span style="font-family: Times New Roman,serif;">bli försiktigt när du lägger till (embedd tagg) innehållet från de andra webbplatserna - (t.ex. för flash det finns en parameter allowscripting som ska sättas till never)