sql >> Database teknologi >  >> RDS >> Database

Hvad er SQL Injection?

Introduktion til SQL Injection

  • SQL-injektion er en sårbarhed eller en teknik, der kan ødelægge databasen på et websted eller en webapplikation. Det er et af de mest udbredte webbaserede angreb.
  • Hovedformålet med en SQL-injektion er at få adgang til databasen på et websted. Så for at en SQL-indsprøjtning skal fungere, har man brug for en webapplikation, der er forbundet til en database.
  • Da databasen har alle data inklusive administratoradgangskoden, dvs. ejerens login-adgangskode, kan hackeren af ​​webstedet få adgang til administratorsiden for at redigere webstedet ved at udfylde en webformular.
  • Webformularen indeholder brugernavn og adgangskoder. Når brugeren indtaster noget i inputfeltet i webformularen, vises SQL SELECT-forespørgslen er implementeret på databasen.
  • Systemet forsøger at matche inputs, dvs. brugernavnet og adgangskoden indtastet af brugeren med brugernavnet og adgangskoden, som allerede er gemt i databasen. Hvis begge input matches, får brugeren adgangen, ellers nægtes adgangen til brugeren.
  • Der er visse websteder, som ikke har mekanismen til at blokere andre input. Sådanne websteder er sårbare over for SQL-injektion. I dette tilfælde kan enhver SQL-forespørgsel indlæses som input, og systemet vil udføre den.
  • For eksempel kan angriberen indtaste en forespørgsel for at downloade hele databasen, slette databasen, ændre databasen og gøre betingelsen altid sand. Hvis en adgangskodebetingelse er gjort altid sand, så det er ligegyldigt, om der indtastes en adgangskode. For adgangskoden skal du få systemadgang til dem, der er gemt i databasen, men hvis der bliver stillet en forespørgsel om at slippe adgangskodetabellen i databasen, vil systemet begynde at tage en hvilken som helst adgangskode. På denne måde kan angriberen nemt få adgang til databasen. Nu kan han kende alle adgangskoderne for de personer, der er logget på hjemmesiden, de forskellige tabeller og deres indhold, hjemmesidens interne struktur og enhver anden information relateret til hjemmesiden.
  • Denne metode kaldes SQL-injektion, hvor du injicerer en forespørgsel i databasen for at manipulere den og få uautoriseret adgang til den. Dette er den farligste type webstedsangreb for en SQL-baseret database.
  • En måde at forhindre sådanne angreb på er at blokere de unødvendige input bortset fra brugernavne og adgangskoder.
  • SQL-injektionskommandoer laves under kørsel. Så undgå dynamiske input-kommandoer. Forhindr databasen med webapplikationsfirewall . Afslør heller ikke nogen fortrolige oplysninger om webstedet til nogen.
  • Websteder kan lide store data- og økonomiske tab på grund af sådanne SQL-angreb.

Eksempel:

Antag at, der er en webapplikation med en database forbundet til den. Denne webapplikation tager muligvis input fra brugeren og gemmer oplysningerne i databasen eller henter data fra databasen og viser dem til brugeren.

I begge tilfælde er der en SQL-forespørgsel eller en databaseforespørgsel, der genereres på webapplikationen, som sendes til databasen, og denne forespørgsel udføres på databasen, og relevant information returneres tilbage til webapplikationen. Sådan fungerer det normale scenarie.

Så når angriberen bruger SQL-injektion, forsøger han at manipulere denne databaseforespørgsel for at få den til at gøre noget, som den ideelt set ikke skal gøre. Så angriberen ændrer SQL-forespørgslen, manipulerer den, han injicerer en ondsindet streng i SQL-forespørgslen og får den derefter til at gøre noget på en uautoriseret måde. Så nu er databaseforespørgslen manipuleret af angriberen, så sendes denne ondsindede forespørgsel til databasen, den udføres der, og de relevante resultater returneres.

Dette er kendt som SQL-injektion. SQL-injektion er en kodeinjektionsteknik, der bruges til at udføre ondsindede og dynamiske SQL-sætninger. SQL-angreb er noget, som angriberen bruger til at tage kontrol over databaseservere.

Sådan forhindrer du SQL-injektion

  1. Undgå at bruge dynamisk SQL

De input, som brugeren leverer, bør ikke placeres direkte i SQL-forespørgslen, der vil blive brugt på databasen. I stedet for at bruge dynamisk SQL, bør man gøre brug af lagrede procedurer, forberedte sætninger og parametriserede forespørgsler, da de er sikrere sammenlignet med dynamiske SQL-forespørgsler.

  • Brugerleverede input skal renses

Den type data, som vil blive leveret af brugeren, skal være korrekt matchet og verificeret med den forventede type.

  • Følsomme data bør ikke være i almindelig tekst

Inden de fortrolige data, såsom adgangskoder, gemmes i databasen, skal de være korrekt krypteret med hashes. Saltning skal anvendes på de krypterede hashes for at give et ekstra lag af sikkerhed til de fortrolige data.

  • Databasefejl bør ikke vises direkte til brugeren

Fejloplysninger, der vises til angriberen, kan hjælpe ham med at få oplysninger om databasen.


  1. UnicodeEncodeError:'latin-1' codec kan ikke indkode tegn

  2. Brug af MySQL relationelle databaser på Gentoo

  3. Database Mail Tutorials

  4. PHP mysql søg i flere tabeller ved hjælp af et nøgleord