sql >> Databasteknik >  >> RDS >> Database

Vad är SQL Injection?

Introduktion till SQL Injection

  • SQL-injektion är en sårbarhet eller en teknik som kan förstöra databasen för en webbplats eller en webbapplikation. Det är en av de mest använda webbaserade attackerna.
  • Huvudsyftet med en SQL-injektion är att få tillgång till databasen för en webbplats. Så för att en SQL-injektion ska fungera behöver man en webbapplikation som är ansluten till en databas.
  • Eftersom databasen har all data inklusive administratörslösenordet, dvs. ägarens inloggningslösenord, kan angriparen av webbplatsen komma åt administratörssidan för att redigera webbplatsen genom att fylla i ett webbformulär.
  • Webbformuläret innehåller användarnamn och lösenord. När användaren matar in något i inmatningsfältet i webbformuläret visas SQL SELECT-frågan implementeras i databasen.
  • Systemet försöker matcha ingångarna, det vill säga användarnamnet och lösenordet som angetts av användaren med användarnamnet och lösenordet som redan är lagrat i databasen. Om båda ingångarna matchas får användaren åtkomsten annars kommer åtkomsten att nekas användaren.
  • Det finns vissa webbplatser som inte har mekanismen att blockera någon annan inmatning. Sådana webbplatser är sårbara för SQL-injektion. I det här fallet kan vilken SQL-fråga som helst matas in som indata och systemet kommer att köra den.
  • Till exempel kan angriparen mata in en fråga för att ladda ner hela databasen, ta bort databasen, ändra databasen och göra villkoret alltid sant. Om ett lösenordsvillkor görs alltid sant, så spelar det ingen roll om något lösenord anges. För lösenordet, systemåtkomst till de som är lagrade i databasen, men om en fråga görs för att släppa lösenordstabellen i databasen, kommer systemet att börja ta vilket lösenord som helst. På så sätt kan angriparen enkelt få tillgång till databasen. Nu kan han känna till alla lösenord för de personer som är inloggade på webbplatsen, de olika tabellerna och deras innehåll, webbplatsens interna struktur och all annan information som är relaterad till webbplatsen.
  • Denna metod kallas SQL-injektion där du injicerar en fråga i databasen för att manipulera den och få obehörig åtkomst till den. Detta är den farligaste typen av webbplatsattack för en SQL-baserad databas.
  • Ett sätt att förhindra sådana attacker är att blockera onödiga indata förutom användarnamn och lösenord.
  • SQL-injektionskommandon görs vid körning. Så undvik dynamiska inmatningskommandon. Förhindra databasen med webbapplikationsbrandvägg . Avslöja inte heller någon konfidentiell information om webbplatsen för någon.
  • Webbplatser kan drabbas av enorma data- och ekonomiska förluster på grund av sådana SQL-attacker.

Exempel:

Antag att, det finns en webbapplikation med en databas kopplad till den. Den här webbapplikationen kan ta emot input från användaren och lagra informationen i databasen eller hämta data från databasen och visa den för användaren.

I båda fallen finns det en SQL-fråga eller en databasfråga som genereras på webbapplikationen som skickas till databasen och denna fråga exekveras på databasen och relevant information returneras tillbaka till webbapplikationen. Så här fungerar det normala scenariot.

Så när angriparen använder SQL-injektion försöker han manipulera denna databasfråga för att få den att göra något som den helst inte är tänkt att göra. Så angriparen ändrar SQL-frågan, manipulerar den, han injicerar en skadlig sträng i SQL-frågan och får den sedan att göra något på ett otillåtet sätt. Så nu manipuleras databasfrågan av angriparen, sedan skickas denna skadliga fråga till databasen, den körs där och de relevanta resultaten returneras.

Detta är känt som SQL-injektion. SQL-injektion är en kodinjektionsteknik som används för att exekvera skadliga och dynamiska SQL-satser. SQL-attacker är något som angriparen använder för att ta kontroll över databasservrar.

Hur man förhindrar SQL-injektion

  1. Undvik att använda dynamisk SQL

Indata från användaren ska inte placeras direkt i SQL-frågan som kommer att användas på databasen. Istället för att använda dynamisk SQL bör man använda sig av lagrade procedurer, förberedda satser och parametriserade frågor eftersom de är säkrare jämfört med dynamiska SQL-frågor.

  • Användarens indata måste saneras

Typen av data som kommer att tillhandahållas av användaren måste vara korrekt matchad och verifierad med den förväntade typen.

  • Känsliga data ska inte vara i klartext

Innan du lagrar konfidentiella data som lösenord i databasen bör de krypteras ordentligt med hash. Saltning måste appliceras på de krypterade hasharna för att ge ett extra lager av säkerhet åt konfidentiell data.

  • Databasfel ska inte visas direkt för användaren

Felinformation som visas för angriparen kan hjälpa honom att få information om databasen.


  1. Infoga CLOB i Oracle-databasen

  2. Hur man tar bort kolumn i tabell

  3. MyBatis Batch Insert/Update för Oracle

  4. Hur infogar man en tidsstämpel i Oracle?