Vad är SQL Injection?

En av de största klasserna av webbsårbarheter är känd som "SQL Injection", eller SQLi. Structured Query Language, aka SQL, är språk som används för att interagera med de flesta databaser, även om ett antal varianter av språket används beroende på databasen plattform. Alla webbplatser som lagrar användardata, såsom kontoinformation, eller tillhandahåller användaruppladdningsfunktioner, till exempel en webbsida för bildvärd, kommer att använda en databas för att lagra dessa data.

Tips: SQL uttalas vanligtvis antingen "ess cue ell" eller "sequel" där det första alternativet är vanligare på brittisk engelska och det andra vanligare på amerikansk engelska. Båda uttalen förstås i allmänhet i samband med att man talar om databaser.

Vad är SQLi?

SQLi är en sårbarhet där webbutvecklarna som designar koden som kommunicerar mellan webbservern och databasen implementerar inte skydd mot SQL-kommandon som skickas av en användare. Problemet är att det är möjligt att kunna fly ut ur databassatser och lägga till nya argument eller ett helt nytt uttalande. Den ändrade eller andra databassatsen kan utföra en rad åtgärder inklusive potentiellt storskaliga raderingar eller dataläckor.

Exploater kretsar vanligtvis kring att göra befintliga påståenden sanna under alla omständigheter eller att tillhandahålla ett andra batchkommando som utför en specifik åtgärd som att ta bort eller visa all data. Till exempel kan en SQL-sats för att logga in på en webbplats kontrollera om det inlämnade användarnamnet och lösenordet matchar en post i databasen. För att försöka få åtkomst kan en SQL-injektionsexploatering försöka lägga till en "or true"-sats som "or 1=1". Detta skulle göra kommandot i stil med "logga in med [detta] användarnamn, om lösenordet är [detta], eller om detta påstående är sant".

Hur man förhindrar SQLi

SQLi brukade vara ett mycket vanligt sätt för webbplatser att få sin databas bruten och sedan läckt online. På grund av en samlad ansträngning för att säkerställa att säkerhetsmedvetenhet är en del av utvecklarutbildningen har denna klass av sårbarhet till stor del lösts och ses bara sällan längre.

Den korrekta metoden för att förhindra SQLi är att använda förberedda satser, även kända som parameteriserade frågor. Traditionellt deklareras SQL-satser och har användarinmatningen sammanlänkade i dem under den deklarationen. Med förberedda satser skrivs databaskommandot ut och sedan kör en speratfunktion kommandot och infogar användardata. Även om detta kan verka som en mindre skillnad förändrar det helt hur kommandot hanteras. Skillnaden förhindrar att några meningsfulla SQL-kommandon körs och behandlar all användarinmatning som en sträng, vilket förhindrar att SQL-injektion sker.