sql >> Database >  >> RDS >> Database

Wat is SQL-injectie?

Inleiding tot SQL-injectie

  • SQL-injectie is een kwetsbaarheid of een techniek die de database van een website of een webtoepassing kan vernietigen. Het is een van de meest gebruikte webgebaseerde aanvallen.
  • Het belangrijkste doel van een SQL-injectie is om toegang te krijgen tot de database van een website. Dus om een ​​SQL-injectie te laten werken, heb je een webapplicatie nodig die is verbonden met een database.
  • Aangezien de database alle gegevens bevat, inclusief het beheerderswachtwoord, d.w.z. het inlogwachtwoord van de eigenaar, kan de aanvaller van de website toegang krijgen tot de beheerderspagina om de website te bewerken door een webformulier in te vullen.
  • Het webformulier bevat gebruikersnaam en wachtwoorden. Wanneer de gebruiker iets invoert in het invoerveld van het webformulier, wordt de SQL SELECT-query is geïmplementeerd in de database.
  • Het systeem probeert de invoer, d.w.z. de gebruikersnaam en het wachtwoord die door de gebruiker zijn ingevoerd, te matchen met de gebruikersnaam en het wachtwoord die al in de database zijn opgeslagen. Als beide invoer overeenkomen, krijgt de gebruiker de toegang, anders wordt de gebruiker de toegang geweigerd.
  • Er zijn bepaalde websites die geen mechanisme hebben om andere invoer te blokkeren. Dergelijke websites zijn kwetsbaar voor SQL-injectie. In dit geval kan elke SQL-query als invoer worden ingevoerd en zal het systeem deze uitvoeren.
  • De aanvaller kan bijvoorbeeld een query invoeren om de hele database te downloaden, de database verwijderen, de database wijzigen en ervoor zorgen dat de voorwaarde altijd waar is. Als een wachtwoordvoorwaarde altijd waar wordt gemaakt, maakt het niet uit of er een wachtwoord wordt ingevoerd. Voor het wachtwoord heeft het systeem toegang tot degenen die in de database zijn opgeslagen, maar als een verzoek wordt gedaan om de wachtwoordtabel in de database te laten vallen, begint het systeem elk wachtwoord te nemen. Op deze manier kan de aanvaller gemakkelijk toegang krijgen tot de database. Nu kan hij alle wachtwoorden kennen van de mensen die op de website zijn ingelogd, de verschillende tabellen en hun inhoud, de interne structuur van de website en alle andere informatie met betrekking tot de website.
  • Deze methode wordt SQL-injectie genoemd, waarbij u een query in de database injecteert om deze te manipuleren en ongeautoriseerde toegang ertoe te krijgen. Dit is het gevaarlijkste type website-aanval voor een op SQL gebaseerde database.
  • Een manier om dergelijke aanvallen te voorkomen, is door onnodige invoer te blokkeren, behalve de gebruikersnamen en wachtwoorden.
  • SQL-injectieopdrachten worden uitgevoerd tijdens runtime. Vermijd dus dynamische invoercommando's. Voorkom de database met webtoepassingsfirewall . Onthul ook aan niemand vertrouwelijke informatie over de website.
  • Websites kunnen enorme gegevens- en financiële verliezen lijden als gevolg van dergelijke SQL-aanvallen.

Voorbeeld:

Stel, er is een webapplicatie waaraan een database is gekoppeld. Deze webtoepassing neemt mogelijk invoer van de gebruiker en slaat de informatie op in de database of haalt de gegevens uit de database op en geeft deze weer aan de gebruiker.

In beide gevallen is er een SQL-query of databasequery die wordt gegenereerd op de webtoepassing die naar de database wordt verzonden en deze query wordt uitgevoerd op de database en relevante informatie wordt teruggestuurd naar de webtoepassing. Dit is hoe het normale scenario werkt.

Dus wanneer de aanvaller SQL-injectie gebruikt, probeert hij deze databasequery te manipuleren om het iets te laten doen wat het idealiter niet zou moeten doen. Dus de aanvaller verandert de SQL-query, manipuleert deze, injecteert een kwaadaardige string in de SQL-query en laat deze vervolgens iets doen op een ongeoorloofde manier. Dus nu wordt de databasequery gemanipuleerd door de aanvaller, vervolgens wordt deze kwaadaardige query naar de database gestuurd, daar uitgevoerd en de relevante resultaten worden geretourneerd.

Dit staat bekend als SQL-injectie. SQL-injectie is een code-injectietechniek die wordt gebruikt om kwaadaardige en dynamische SQL-instructies uit te voeren. SQL-aanvallen zijn iets dat de aanvaller gebruikt om de controle over databaseservers over te nemen.

SQL-injectie voorkomen

  1. Vermijd het gebruik van dynamische SQL

De invoer die door de gebruiker wordt verstrekt, mag niet rechtstreeks in de SQL-query worden geplaatst die op de database wordt uitgevoerd. In plaats van dynamische SQL te gebruiken, zou men gebruik moeten maken van opgeslagen procedures, voorbereide instructies en geparametriseerde query's, omdat deze veiliger zijn in vergelijking met dynamische SQL-query's.

  • Door de gebruiker verstrekte invoer moet worden opgeschoond

Het type gegevens dat door de gebruiker wordt verstrekt, moet correct worden afgestemd en geverifieerd met het verwachte type.

  • Gevoelige gegevens mogen niet in platte tekst zijn

Voordat de vertrouwelijke gegevens, zoals wachtwoorden, in de database worden opgeslagen, moet deze correct worden versleuteld met hashes. Salting moet worden toegepast op de versleutelde hashes om een ​​extra beveiligingslaag voor de vertrouwelijke gegevens te bieden.

  • Databasefouten mogen niet rechtstreeks aan de gebruiker worden getoond

Foutinformatie die aan de aanvaller wordt getoond, kan hem helpen om informatie over de database te krijgen.


  1. MySQL 'Order By' - alfanumeriek correct sorteren

  2. Oracle-nummer naar C# decimaal

  3. Krijg alle datums tussen twee datums in SQL Server

  4. Tabel wijzigen in SQL Server met behulp van Alter Statement - SQL Server / T-SQL Tutorial Part 35