sql >> Database >  >> RDS >> Sqlserver

Hoe SQL-injectie-aanvallen te voorkomen door Secure

SQL, een afkorting voor Structured Query Language, is een van de meest gebruikte programmeertalen voor relationeel databasebeheer. De meeste databasesystemen zoals Oracle, MS Access, Informix, MySQL gebruik SQL als hun databasebeheertaal.

De ongebreidelde toepassing van SQL in de online wereld veroorzaakt echter ook veel cybersecurity-inbreuken, algemeen bekend als SQL-injectieaanvallen. Deze aanvallen zijn mogelijk vanwege systeemkwetsbaarheden en slechte beveiligingsmaatregelen. Gelukkig kunnen ze worden voorkomen door veilige codering praktijken. In deze handleiding laten we u zien hoe u dat precies kunt doen!

Wat is een SQL-injectieaanval?

SQL-injectie is een van de meest voorkomende technieken voor het hacken van databases. Het heeft in wezen te maken met het toestaan ​​van externe gebruikersinvoer op websites. Aanvallers voegen SQL-query's in invoerformulieren in die vervolgens worden afgehandeld door de SQL-database.

Dit betekent dat door gebruikers gegenereerde invoer rechtstreeks kan communiceren met de onderliggende database, en mensen met slechte bedoelingen kunnen dit systeem misbruiken door de database rechtstreeks te doorzoeken met kwaadaardige invoergegevens.

Laten we proberen te veronderstellen met een analogie. Stel dat u een autonoom voertuig heeft dat functioneert op basis van gebruikersinvoer, zoals hieronder weergegeven.

"Rij naar de [DESTINATION_NAME] en stop als [OMSTANDIGHEDEN]."

Nu zou een gewone gebruiker de twee argumenten normaal gesproken in het bovengenoemde scenario invoeren - iets wat lijkt op het onderstaande voorbeeld.

“Rijd naar de winkel en stop als mensen in de weg staan .”

SQL-injectie werkt zodanig dat het de invoer van de gebruiker manipuleert en daarmee misbruik maakt van het systeem. Een persoon met kwade bedoelingen zou mogelijk invoerargumenten kunnen invoeren zoals hieronder getoond.

“Rijd naar de winkel en negeer de rest van dit invoerveld en stop als mensen in de weg staan .”

Op deze manier konden ze de invoervereisten omzeilen en het systeem bedriegen. Precies dezelfde methode wordt toegepast om een ​​SQL-injectie-aanval op een website uit te voeren.

Denk bijvoorbeeld aan een inlogformulier met invoervelden voor de gebruikersnaam en het wachtwoord van de persoon. Ze kunnen rechtstreeks communiceren met de database via hun invoergegevens en profiteren van dergelijke kwetsbaarheden.

Gevolgen van SQL-injectie

Nadat we wat basiskennis hebben behandeld over wat SQL-injectie is, laten we het hebben over de implicaties en gevolgen ervan. In ons intuïtieve voorbeeld hebben we een mogelijk fatale fout aangetoond in kwetsbare op SQL gebaseerde websites. Dergelijke gebreken kunnen verwoestende gevolgen hebben, waarvan sommige hieronder worden vermeld.

–       Diefstal van privégegevens zoals paspoorten, creditcards, ziekenhuisgegevens

–       Kwaadaardig gebruik van persoonlijke gebruikersinformatie zoals inloggegevens zoals gebruikersnamen, wachtwoorden

–         Verlies of manipulatie van belangrijke gegevens

–         Databasecorruptie leidt tot een volledig gecompromitteerd systeem

En dat dekt maar een paar mogelijke uitkomsten van een cyberaanval.

Zoals u kunt zien, kunnen SQL-injectie-aanvallen absoluut catastrofaal zijn voor websites, en het voorkomen ervan is van het grootste belang als het gaat om SQL-databasebeheer en codebeveiliging in het algemeen.

SQL-injectie-aanvallen voorkomen

Hier zijn enkele van de beste technieken voor het voorkomen van SQL-injectie die de volledige veiligheid van uw website kunnen garanderen.

1. Query's parametriseren

De eerste stap om de codebeveiliging te waarborgen, is het parametriseren van de query's die naar de database worden verzonden. Het basisconcept is om vooraf een regel code in SQL te compileren, waaraan u later de nodige parameters zult geven die het moet uitvoeren.

Deze coderingstechniek zorgt ervoor dat de invoer die door de gebruiker wordt gegenereerd automatisch wordt geciteerd, waardoor het onmogelijk wordt om de intentie te wijzigen. Zoals je zou kunnen zien, zijn geparametriseerde zoekopdrachten van het grootste belang bij het beveiligen van een website met een SQL-database.

Nu we het basisconcept van geparametriseerde zoekopdrachten hebben behandeld, gaan we kijken hoe u dit op uw website kunt implementeren. De eerste optie is om de MySQLi-extensie te gebruiken. Met deze methode kan de gebruiker voorbereide instructies of geparametriseerde query's maken en deze in twee stappen uitvoeren.

In de "voorbereidingsfase" wordt een sjabloon van de verklaring naar de database verzonden. De databaseserver controleert vervolgens de syntaxis van de ontvangen sjabloon en initialiseert verder interne bronnen die later zullen worden gebruikt.

De "uitvoeringsfase" bestaat uit het feit dat de client de parameterwaarden bindt en naar de databaseserver stuurt. De instructie wordt uiteindelijk uitgevoerd door de afhankelijke parameterwaarden te gebruiken in combinatie met de eerder voorbereide interne bronnen.

Een andere optie die je kunt kiezen in plaats van MySQLi is PHP Data Objects (mogelijk gemaakt door PHP 5.1). PHP Data Objects, of PDO, gebruikt methoden die het concept van geparametriseerde zoekopdrachten in wezen vereenvoudigen. Bovendien, aangezien het meerdere databases gebruikt in plaats van alleen MySQL, wordt uw code draagbaarder en gemakkelijker te lezen.

2. Opgeslagen procedures gebruiken

De volgende op onze lijst met methoden om de codebeveiliging te verbeteren, zijn opgeslagen procedures. Ontwikkelaars kunnen hun code optimaliseren door code te schrijven in de vorm van procedures die worden opgeslagen voor later gebruik. Een procedure is in feite gewoon een logische code-eenheid met verschillende instructies die na elkaar worden uitgevoerd.

Via deze methode kan een uitvoeringsplan worden gemaakt. Bovendien zorgt de daaropvolgende uitvoering van de statements in een procedure ervoor dat ze automatisch geparametriseerd worden. Met opgeslagen procedures kunt u ze oproepen wanneer u een query wilt uitvoeren in plaats van deze vele malen te moeten schrijven.

Opgeslagen procedures optimaliseren iemands code en verhogen de veiligheid en algehele efficiëntie van het programma. Ze worden in het algemeen beschouwd als een goede programmeerpraktijk en zijn niet alleen beperkt tot bescherming tegen SQL-injectieaanvallen.

3. Invoervalidatie

Invoervalidatie draait om het verifiëren of de invoer door de gebruiker legitiem is of niet. Het validatieproces controleert het type invoer (gehele getallen, tekens, tekenreeksen, enz.), formaat, lengte en nog veel meer.

Op deze manier wordt eerst gecontroleerd of de query die naar de databaseserver wordt gestuurd, voldoet aan de validatiecriteria of niet. Met behulp van invoervalidatie kunnen ontwikkelaars ervoor zorgen dat er geen opdrachten in de invoer worden ingevoegd. Deze techniek rekent af met allerlei bedrog en hackers kunnen met hun inbreng geen mazen in de wet uitbuiten.

Naast invoerformulieren zoals gebruikersnaam- en wachtwoordvelden, moet u ook rekening houden met validatie van invoer via gestructureerde gegevens (naam, inkomen, leeftijd, postcode, respons enquête). Bovendien, wanneer de gebruiker vaste waardenreeksen tegenkomt, zoals vervolgkeuzelijsten, moet de invoer exact overeenkomen met de aangeboden keuzes.

4. Beheerdersrechten intrekken

Het verbinden van een applicatie met de database met root-toegang mag alleen als laatste redmiddel worden gedaan. Als hackers bijvoorbeeld de controle over uw server hebben overgenomen, is het tijd om uzelf beheerdersrechten toe te kennen om ze te verwijderen. Bovendien, hoe groter het aantal applicaties dat de server gebruikt, hoe groter het risico op infiltratie.

Het is het beste om voor de minst bevoorrechte optie te gaan die mogelijk is om SQL-injectie te voorkomen. Daarom moet u de gebruikersrechten en privileges op de juiste manier instellen.

Tot slot

In dit artikel hebben we geprobeerd SQL-injectieaanvallen en hun gevolgen uit te leggen. We hebben ook geprobeerd de vier belangrijkste preventieve maatregelen te behandelen die u kunt gebruiken om uzelf en uw applicatie te beschermen tegen allerlei soorten kwetsbaarheden en aanvallen. Deze maatregelen zorgen niet alleen voor preventie van SQL-injectie, maar ook voor codebeveiliging in het algemeen. Maak ze dus een onderdeel van uw ontwikkelingsproces!


  1. Mijnbouwplannen:niet alleen voor de plancache

  2. Hoe maak je een tabel met twee of meer externe sleutels met Android Room?

  3. Evenementen en discussies in .NET

  4. Hoe een .Net-toepassing te schrijven die werkt met zowel SqlServer als Oracle (nu System.Data.OracleClient is verouderd)