sql >> Database >  >> RDS >> Mysql

Bescherming tegen SQL-injectie

Dit is niet waar SQL-injectie over gaat. Elke keer dat u parameters gebruikt die niet zijn opgeschoond in uw SQL-query, laat u uw database open voor SQL-injectie, wat niet noodzakelijkerwijs het doel heeft om gegevens te vernietigen. Het kan ook zijn om gegevens te stelen of ongeautoriseerde toegang te krijgen.

Overweeg een zeer beperkt account waar het alleen SELECT is . U schrijft een vraag voor authenticatie:

$sql = "SELECT COUNT(*) AS count
          FROM users 
         WHERE user_id='{$_POST['user']}' AND pass='{$_POST['password'}'";

// check if returns a count of 1, if yes, log in

Bij normale invoer verwacht u dat de query er als volgt uitziet:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'username' AND pass='********'

Die 1 zou moeten retourneren als de telling als zowel gebruikersnaam als pass overeenkomen. Nu probeert een aanvaller in te loggen als beheerder. Omdat je je invoer niet hebt opgeschoond, sturen ze $_POST['user'] als:admin'; -- . De hele zoekopdracht wordt:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'admin'; -- AND pass='********'

Alles na -- is een opmerking, dus dit negeert de andere voorwaarde en retourneert hoe dan ook 1. Alsjeblieft, je hebt zojuist beheerderstoegang verleend aan een kwaadwillende gebruiker. Dat is hoe sommige echte aanvallen worden uitgevoerd. Je begint met een account met weinig privileges en door gaten in de beveiliging probeer je toegang te krijgen tot meer privileges.

Om een ​​lang verhaal kort te maken, een applicatie-breed account hebben met beperkte rechten (bijv.:geen DROP , ALTER , enz.) is goed. Geef nooit iemand of een applicatie meer privileges dan ze nodig hebben. Maar om SQL-injectie te voorkomen, gebruikt u voorbereide instructies .



  1. Hoe ik een installatieprogramma voor de website kan maken. PHP mysql

  2. Opgewaardeerd naar Ubuntu 16.04 nu MySQL-python-afhankelijkheden zijn verbroken

  3. MySQL-verbinding werkt niet

  4. MySQL-groep per weeknummer met kolom met meerdere datums