Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: SQL Injection bug

Sivun loppuun

Turatzuro [26.05.2004 07:54:12]

#

Eli mikä mahtaa olla SQL Injection bug? Googlettamalla sain selville, että se liittyy lainausmerkkeihin kyselyssa, mutta mitäköhän se sitten varsinaisesti tekee?
Kyselen, kun yritän tässä opetella mysql:ää...

leftover [26.05.2004 09:08:37]

#

Oletetaan että käytössä on vanha php ja seuraavanlainen skripti:

<?php
$kantaan = $_POST['viesti'];
$result = mysql_query("INSERT INTO taulu SET viesti = '$kantaan'");
echo "kiitos";
?>

Nyt kantaan tuodaan dataa suoraan post-muuttujasta ilman käsittelyä. Jos PHP:n asetuksissa on vielä magic_quotes_gpc = off, voidaan MySQL injection suorittaa lähettämällä viestinä "'; DROP DATABASE 'db" jolloin query kokonaisuudessaan näyttää seuraavalta:

INSERT INTO taulu SET viesti = ''; DROP DATABASE 'db'

Eli pai pai tietokanta. Tämä voidaan välttää käyttämällä tarpeeksi uutta php-versiota (estää puolipilkut queryissa) sekä escapettamalla data (addslashes, mysql_escape_string tmv.) jolloin query näyttääkin seuraavalta:

INSERT INTO taulu SET viesti = '\'; DROP DATABASE \'db'

Jolloin viesti-kenttään ilmestyy siis "\'; DROP DATABASE \'db" eikä vahinkoa pääse syntymään.

NiKC [26.05.2004 11:21:17]

#

Tuon tietokannan droppaamisen voi myös estää tehokkaasti sillä ettei salli www-tunnuksen käsitellä tietokantaa muuten kuin select, insert ja update -käskyillä. Adminia varten voi sitten olla toiset tunnukset jolla on suurempia oikeuksia.

Tempfile [26.05.2004 16:08:59]

#

Eikös Microsoftin sivuja muuteltu tuota käyttäen?

TETRIS [26.05.2004 19:30:05]

#

Empäs tiedä... käväsin vaan kattomassa sitä häkkiä. Mutta kyllä varmaankin tuntien MS:n tietoturvan :P

kasetti [27.05.2004 13:21:41]

#

Eikös drop sanan voi korvata jollain muulla... eipähän ole ainakaan mahdollista "tiputtaa" mitään..

jotenki tyyliin...

str_replace(" drop", " drob", $string);

(pitäs varmaan huomioida isot kirjaimetkin..)

leftover [27.05.2004 13:33:34]

#

Siinähän ei ole mitään järkeä. Entä jos joku haluaisi käyttää viestissään sanaa drop? Kyllä se on parempi escapettaa ja tulostusvaiheessa käyttää stripslashes-funkkaria poistamaan kenot.

kasetti [27.05.2004 13:38:46]

#

leftover kirjoitti:

Siinähän ei ole mitään järkeä.

Totta. Eihän tossa mun esimerkissä mitään järkeä ollut, Mutta eikös esim. jos tietokantaan laitetaan matskua niin siltä sitten tulostusvaiheessa voida kääntää takaisin...

laitetaan vaikka korvaavaksi sanaksi sellainen mitä ei luulisi kenenkään kirjoittavan

str_replace(" drop", " gagattaagagattaa", $string);

no ei nyt enempää tästä aiheesta...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta