tai Miten Suojata Käyttäjän Tietoja SQL-Injektio

xkcd

Hauskoja Faktoja:

SQL-injektio on ollut noin aika paljon siitä lähtien, kun sivustot on tallennettu tietoja tietokantoihin.

Open Web Application Security Project mitoitettu injektio-hyökkäyksiä, koska yksi top 10 uhat kohtaavat web-sovellukset vuonna 2017.,

SQL injection on edelleen vastuussa monista suurista tietovuodoista. Vuonna 2016, Illinois ja Arizona State Hallituksen Vaaleissa äänestäjien rekisteröintiä tietokantoihin on rikottu. Kun mitään tietoja ei varastettu, Arizonasta, Illinoisista hyökkääjät oli pääsy äänestäjän tiedot, mukaan lukien nimi, osoite, syntymäaika, sukupuoli ja osittainen sosiaaliturvatunnus, noin 80000 ihmistä.⁴

that ’ s kauhistuttava, What Is It?

SQL-injektio on eräänlainen hyökkäys, joka kohdistuu sovelluksen tietokantaan lisäämällä tahattomia koodi käyttäjän syötekenttiä., Käyttämällä hyväkseen SQL-syntaksia hyökkääjä voi käyttää syöttökenttiä tietojen tallentamiseen kyseisistä tietokannoista – mukaan lukien esimerkiksi salasanat ja luottokorttinumerot. Joku voisi jopa ottaa haltuunsa tietokantasi tai poistaa kaikki sen hallussa olevat tiedot.

Miten Se toimii?

SQL-Injektio toimii käyttämällä tiedot liitetään osaksi alalla manipuloida vastaava SQL osaksi suorittaa tahaton toiminta.,

Tässä on perus esimerkki:

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

tässä esimerkissä oletetaan, että muuttuja user_name luodaan suoraan käyttäjän syötteen verkkosivuilla. Tämä merkkijono lisätään yllä olevaan SQL-lausekkeeseen ja kaikki kyseiseen käyttäjänimeen liittyvät kentät palautetaan. Ei se mitään.

Mutta mitä tapahtuu, jos joku tyypit Steve” TAI 1=1; — niiden käyttäjä nimi on? sitten SQL syntyy näin:

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

Koska 1=1 on aina totta, tämä olisi palauttaa kaikki taulukon tiedot. Ei Hyvä!,

Let’s take one more look at that comic.

xkcd

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

No, voimme olettaa, että jos Pikku Bobby Taulukot oltiin lisätty koulun tietokantaan opiskelijoita, SQL näyttäisi jotain:

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

– ja kun me lisätä Bobby…

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

Koska Bobby nimi sisältää ); ARVOT argumentti on suljettu keskellä hänen nimensä ja teksti, joka seuraa DROP TABLE opiskelijat on uusi SQL-lause, joka poistaa koko taulukko. Lopuksi-lopussa Kommentit pois loput SQL, olennaisesti huomiotta loput alkuperäisen koodin ja varmista, että mitään virhettä tapahtuu.,

Joten, Mitä Sanot On Minun Tiedot Ole Koskaan Turvassa Uudelleen?

Ei! On todella paljon toimenpiteitä voit tehdä suojautua tällaista hyökkäystä. Katsotaan harvoja:

  1. puhdistaa dataa. Ensimmäinen askel on valvoa, mitä käyttäjä saa syöttää. Paras tapa tähän on rajoittaa tietyn kentän sallimia syöttötyyppejä., Esimerkiksi puhelinnumero kenttään voit vain antaa numeerinen syöttö, tai sähköposti-kenttä sallii vain merkkejä, jotka löytyvät voimassa oleva sähköpostiosoite. Ilmeisesti jotkut kentät vaativat merkkejä, joita voitaisiin käyttää hyökkäyksessä, joten tämä menetelmä ei ole lyömätön.
  2. Määritä Virheilmoitus. Usein oletuksena virhe raportointi Tietokannan hallintajärjestelmät on kehittäjä virheenkorjaus tietoa. Tämä voi palauttaa hyökkääjälle hyödyllisiä tietoja, kuten pöytänimiä tai palstanimiä., Varmista, että et näytä tämäntyyppisiä tietoja ulkopuolisille käyttäjille, koska se voisi helpottaa mahdollisen hyökkääjän elämää.
  3. käytä sidottuja parametreja. Sidottu parametrien avulla voidaan tallentaa käyttäjän tiedot, muuttuja ja aseta se osaksi SQL-käskyn, joka on luotu paikkamerkkejä. Koska SQL-lauseke ja muuttujan lähetetään palvelimelle erikseen, sidottu parametrit ovat hyviä suojaamaan injektion. Ota se pikku Bobby T!, Esimerkki sidottu parametrien päivitys menetelmä Ruby näyttää tältä:
def update sql = <<-SQL UPDATE students SET name = ?, grade = ? WHERE id = ? SQL DB.execute(sql, )end

Se on hullua ajatella, että jotain niin yksinkertaista ja hyvin ymmärretty on edelleen vastuussa niin monia suuria tietomurtoja., Jopa korkean profiilin tapauksia, kuten äänestäjien rekisteröinti hakata edellä ja viime Equifax rikkomisesta (joka ei ollut, koska SQL-injektio, mutta samanlainen haavoittuvuus, että yritys ei osoite), juuri haavoittuvuus tulee alas inhimillinen virhe ja puute huomiota yksityiskohtiin. Kun aikaa huolellisesti miettiä ongelma voi merkittävästi auttaa meitä suojaamaan käyttäjän tietoja yhteisiä tietoturvaloukkauksia, erityisesti SQL injektiot.