Union-based SQL Injection

Union-based SQL Injection är en av de mest effektiva metoderna för att **exfiltrera (stjäla) data** från en databas. Den bygger på det faktum att en webbapplikation använder osäker användarinmatning i en SQL-fråga, men istället för att bara ändra frågans logik (som i Rum 4), lägger angriparen till en helt ny fråga med hjälp av kommandot **UNION SELECT**.

Kommandot UNION används i SQL för att slå ihop resultaten från två separata SELECT-frågor till ett enda resultatset. För att detta ska fungera måste båda SELECT-frågorna ha **samma antal kolumner** och **kompatibla datatyper** i respektive position.

Så fungerar det tekniskt

Huvudstegen för en Union-based attack inkluderar ofta att först ta reda på hur många kolumner den ursprungliga frågan har (genom att använda ORDER BY eller UNION SELECT NULL, NULL, ...) och sedan att identifiera namnen på de känsliga tabellerna och kolumnerna (t.ex., genom att fråga databasens schema-tabeller).

Lär dig att skydda dig

Försvaret är detsamma som för Rum 4: **Använd alltid Förberedda Frågor (Prepared Statements)**. Eftersom id är en numerisk inmatning, bör du dessutom se till att all inmatning **typ-konverteras** till ett heltal innan det används i frågan. Detta förhindrar att citattecken och text kan injiceras.