, vagy Hogyan védd meg A Felhasználói Adatokat az SQL Injekciós

xkcd

érdekességek:

SQL injekciós már körül, nagyjából azóta, hogy a honlapok az adatbázisokban tárolt.

Az Open Web Application Security projekt az injection attacks-t az egyik legjobb 10 fenyegetésnek minősítette a webes alkalmazásokkal szemben 2017-ben.,

az SQL injection továbbra is felelős sok nagy adatszivárgásért. 2016-ban megsértették az Illinois-i és az Arizonai Állami Választási Bizottság szavazói regisztrációs adatbázisát. Bár Arizonában nem loptak el adatokat, Illinois-ban a támadók mintegy 80 000 ember számára hozzáférhettek a választói adatokhoz, beleértve a nevet, a címet, a születési dátumot, a nemeket és a részleges társadalombiztosítási számokat.⁴

ez félelmetes, mi ez?

az SQL injection egy olyan típusú támadás, amely egy alkalmazás adatbázisát célozza meg a nem kívánt kód beillesztésével a felhasználói beviteli mezőkbe., Az SQL szintaxis kihasználásával a támadó beviteli mezőket használhat az adatbázisokból származó információk rögzítésére — ideértve a jelszavakat és a hitelkártya-számokat is. Valaki akár átveheti az adatbázis irányítását, vagy törölheti az összes tárolt információt.

hogyan működik?

az SQL Injection egy mezőbe beillesztett információk felhasználásával működik, hogy manipulálja a megfelelő SQL utasítást egy nem kívánt művelet végrehajtásában.,

itt van egy alapvető példa:

SELECT * FROM customers WHERE name = " + user_name + ";

ebben a példában tegyük fel, hogy a user_name változó közvetlenül a felhasználó weboldalának bemenetéből jön létre. Ez a karakterlánc a fenti SQL utasításba kerül, és az adott felhasználónévvel kapcsolatos összes mező visszakerül. Nem nagy ügy.

de mi történik, ha valaki írja Steve” vagy 1=1; – A felhasználónév? ezután az SQL generált lenne ez:

SELECT * FROM customers WHERE name = "Steve" OR 1=1;--";

mivel 1=1 mindig igaz, ez visszaadja az összes adatot a táblázatban. Nem Jó!,

Let’s take one more look at that comic.

xkcd

The son’s name is Robert’); DROP TABLE students; — What would that do exactly?,

Nos, feltételezhetjük, hogy ha a Kis Bobby Táblázatok volt, hogy ki, hogy az iskola adatbázis a diákok, az SQL-utasítás nézne ki:

INSERT INTO students (name) VALUES ('<Student Name>');

ha be Bobby…

INSERT INTO students (name) VALUES ('Robert'); DROP TABLE students;--');

Mivel a Bobby nevét tartalmazza ); az ÉRTÉKEK érv zárt közepén a nevét, s a szöveget az alábbiak szerint CSEPP TÁBLÁZAT a diákok az új SQL, hogy törli az egész asztal. Végül a-végén kommentálja a fennmaradó SQL-t, lényegében figyelmen kívül hagyva az eredeti kód többi részét, ügyelve arra, hogy ne történjen hiba.,

szóval, mi a mondás az adataim soha többé nem lesznek biztonságban?

Van valójában egy csomó lépést lehet tenni, hogy megvédje magát az ilyen típusú támadás. Nézzünk meg néhányat:

  1. Az adatok fertőtlenítése. Az első lépés annak ellenőrzése, hogy a felhasználó mit adhat be. Ennek legjobb módja az, hogy korlátozzuk az adott mező számára engedélyezett bemeneti típusokat., Például egy telefonszám mezőben csak numerikus bemenetet engedélyezhet, vagy egy e-mail mezőben csak olyan karaktereket engedélyezhet, amelyek egy érvényes e-mail címben találhatók. Nyilvánvaló, hogy egyes mezőknek olyan karakterekre van szükségük, amelyeket egy támadásban lehet használni, tehát ez a módszer nem verhetetlen.
  2. hibajelentés beállítása. Gyakran előfordul, hogy az adatbázis-kezelő rendszerekben az alapértelmezett hibajelentés fejlesztői hibakeresési információkat tartalmaz. Ez hasznos információkat adhat vissza a támadónak, például táblázatneveket vagy oszlopneveket., Győződjön meg róla, hogy nem mutatja az ilyen típusú információkat a külső felhasználók számára, mivel ez megkönnyítheti a potenciális támadó életét.
  3. kötött paraméterek használata. A kötött paraméterek lehetővé teszik a felhasználói adatok tárolását egy változóban, majd helyezze be egy helyőrzőkkel létrehozott SQL utasításba. Mivel az SQL utasítás és a változó külön kerül a szerverre, a kötött paraméterek jól védenek az injekciótól. Fogd azt a kis Bobby T-t!, Egy példa kötött paraméterek egy update módszer a Ruby fog kinézni:
def update sql = <<-SQL UPDATE students SET name = ?, grade = ? WHERE id = ? SQL DB.execute(sql, )end

Ez őrültség azt hinni, hogy valami olyan egyszerű, de jól értettem, még mindig felelős azért, hogy ilyen nagy adatok megsértésének., Még olyan nagy horderejű esetekben is, mint a fent említett szavazói regisztrációs hackek, valamint a legutóbbi Equifax jogsértés (amely nem az SQL befecskendezés miatt történt, hanem egy hasonló sebezhetőség miatt, amelyet a vállalat nem tudott kezelni), a sebezhetőség gyökere az emberi hibára és a részletekre való figyelem hiányára vezethető vissza. A probléma alapos átgondolása jelentősen segíthet megvédeni a felhasználói adatokat a gyakori megsértésektől, különösen az SQL injekcióktól.