SQL injection - Biblioteka.sk

Upozornenie: Prezeranie týchto stránok je určené len pre návštevníkov nad 18 rokov!
Zásady ochrany osobných údajov.
Používaním tohto webu súhlasíte s uchovávaním cookies, ktoré slúžia na poskytovanie služieb, nastavenie reklám a analýzu návštevnosti. OK, súhlasím


Panta Rhei Doprava Zadarmo
...
...


A | B | C | D | E | F | G | H | CH | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

SQL injection

SQL injection je technika napadnutia databázovej vrstvy aplikácie, spočívajúca vo vsunutí (odtiaľ „injection“) kódu prostredníctvom neošetreného alebo nesprávne ošetreného vstupu a vykonaní vlastného SQL príkazu. Týka sa tak webových ako aj všetkých ostatných aplikácií pracujúcich s databázami. Zneužitie môže viesť k získaniu citlivých údajov, ako napr. prihlasovacie údaje, osobné údaje (čísla bankových účtov, rodné čísla...); pozmeneniu, doplneniu alebo odstráneniu údajov, prípadne aj k ovládnutiu celého serveru.[1][2]

Popis jazyka SQL

SQL je skratka pre Structured Query Language, teda štrukturovaný jazyk používaný v databázach pre prácu s dátami. SQL príkazy sú používané pre vykonanie príkazov, ktoré menia databázu. Môžu napr. aktualizovať, získavať alebo pridávať dáta do databázy. Medzi rôzne databázové systémy patria: Oracle, Sybase, Microsoft SQL Server, Access, Ingres atď. Väčšina SQL príkazov sa skladá zo štandardných príkazov SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER a DROP, ktoré môžu byť použité na každom z vyššie uvedených systémov.[3]

Zneužitie prihlasovacieho formulára

Prihlasovacie formuláre väčšinou využívajú databázu pre overenie alebo pridanie odosielaných dát. Klasický príklad na príkaz ktorý pri prihlasovaní overí či je daný užívateľ v databáze by mohol vyzerať v php napr. takto:

SELECT * FROM uzivatelia WHERE meno = '$zadaneMeno' AND heslo='$zadaneHeslo';

Pri vložení do zadaneMeno apostrofu ' vznikne SQL príkaz ktorý skončí chybou. Pokiaľ však je vložený do zadaneMeno SQL komentár spolu s apostrofom a účtom za ktorý chce byť útočník prihlásený („admin'--“) vznikne príkaz, ktorý neoveruje správnosť zadaného hesla a útočník sa môže týmto spôsobom napr. prihlásiť do systému bez toho, že by vedel heslo.

SELECT * FROM uzivatelia WHERE meno = 'admin'--' AND heslo='';

Podobný výsledok sa dá dosiahnuť použitím operátorov OR a AND zadaním za heslo „' OR 1=1--“:

SELECT * FROM uzivatelia WHERE meno = '$zadaneMeno' AND heslo='' OR 1=1--';

Keďže 1=1 je pravda vždy tak môže útočník zadať akékoľvek heslo a vždy bude prihlásený do systému.

Ochrana na strane aplikácie

Priamočiary prístup, ako zabrániť SQL injection, je takzvané „escapovanie“ znakov, ktoré majú špeciálny význam v SQL. Napríklad každý výskyt apostrofu (') môže byť nahradený dvoma úvodzovkami pre vytvorenie valídneho reťazca. Napr. v php sa pre takéto escapovanie používa funkcia mysql_real_escape_string() ešte pred odoslaním príkazu do databázy.[2]

Príklad v jazyku Perl

 $query = $sql->prepare("SELECT * FROM uzivatelia WHERE meno = ". $sql->quote($zadaneMeno));

Príklad v jazyku PHP a MySQLi [4]4">upraviť | upraviť zdroj

$mysqli = @mysqli_connect(db_hostname, db_username, db_password, db_name); //otvorenie nového spojenia do MySQL

$val1 = mysqli_real_escape_string($mysqli, $_POST"va1"); //escapuje nepovolené znaky zo superglobálnej premennej
$val2 = mysqli_real_escape_string($mysqli, $_GET"va1"); //escapuje nepovolené znaky zo superglobálnej premennej

$query = sprintf("SELECT * FROM `uzivatelia` WHERE value1='%s' AND value2='%s'", $val1, $val2); //vytvorí dopyt s už overenými hodnotami

$result = mysqli_query($mysqli, $query); //vracia výsledok dopytu

Takto môže vyzerať ošetrený kód proti sql injection útoku. Vstupné premenné sú ošetrené pomocou funkcie mysqli_real_escape_string(mysqli $mysqli, string $escapestr), ktorá pridá spätnú lomku znakom \x00, \r, \n, \, ',, a \x1a. Táto funkcia by mala byť použitá pri každom dopyte do databázy, avšak občas je zbytočná – napr. pri premennej ktorá ma dátový typ (int).

Príklad v jazyku PHP a Oracleupraviť | upraviť zdroj

$stmt = oci_parse($connOci, 'SELECT * FROM LOGIN WHERE jmeno = :login');
oci_bind_by_name($stmt, ':login', $_POST'login');
oci_execute($stmt);

Existuje veľa ďalších rôznych funkcií v PHP pre ochranu proti SQLi špecifických pre rôzne databázy, napr. pg_escape_string() pre PostgreSQL.

 Pozri ajupraviť | upraviť zdroj

 Referencieupraviť | upraviť zdroj

  1. SQL Injection online. w3schools.com, cit. 2020-05-29. Dostupné online.
  2. a b SQL Injection online. Microsoft, cit. 2020-05-29. Dostupné online.
  3. . Dostupné online.
  4. . Dostupné online.

Externé odkazyupraviť | upraviť zdroj

Zdroj:
Text je dostupný za podmienok Creative Commons Attribution/Share-Alike License 3.0 Unported; prípadne za ďalších podmienok. Podrobnejšie informácie nájdete na stránke Podmienky použitia.
Zdroj: Wikipedia.org - čítajte viac o SQL injection

Podporte znalostnú spoločnosť na Slovensku...
čítajte viac na tomto odkaze: Informatika





Text je dostupný za podmienok Creative Commons Attribution/Share-Alike License 3.0 Unported; prípadne za ďalších podmienok.
Podrobnejšie informácie nájdete na stránke Podmienky použitia.

Your browser doesn’t support the object tag.

www.astronomia.sk | www.biologia.sk | www.botanika.sk | www.dejiny.sk | www.economy.sk | www.elektrotechnika.sk | www.estetika.sk | www.farmakologia.sk | www.filozofia.sk | Fyzika | www.futurologia.sk | www.genetika.sk | www.chemia.sk | www.lingvistika.sk | www.politologia.sk | www.psychologia.sk | www.sexuologia.sk | www.sociologia.sk | www.veda.sk I www.zoologia.sk