AMVA50,php ja mysql |
1. Yleistä | 2. Web toimintaympäristönä | 3. Yleistä tietokannoista | 4. SQL-kielen perusteet | 5. PHP ja MySQL |
6. Esimerkkisovellus | 7. Käyttäjien hallinta | 8. SQL-lauseiden turvallisuus | 9. Oppimistehtävät |
8. SQL-LAUSEIDEN TURVALLISUUS
8.1 SQL-injektioSQL-injektiolla tarkoitetaan sitä, että sql-kieltä osaava käyttäjä voi syöttää web-lomakkeelta kyselyyn lauseita, jotka saavat aikaan sen, että käyttäjä pääsee käsittelemään tietokannan tietoja ilman oikeuksia. PHP.netin dokumentaatioossa on sivulla http://fi.php.net/manual/fi/function.mysql-real-escape-string.php esimerkkinä skripti: <?php // etsikään käyttäjä-taulusta tunnusta ja salasanaa $query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'" mysql_query($query); // Lomakkeelta tulevaa syötettä ei käsitelty, joten käyttäjä voi syöttää mitä tahansa, esimerkiksi: $_POST'username' = 'aidan'; $_POST'password' = "' OR ''='"; $salasana= $_POST['salasana']; ; // Tällöin tietokantaan lähetettäisiin kysely: echo $query; ?> Esimerkin kysely olisi muotoa: SELECT * FROM users WHERE name='aidan' AND password='' OR ''='' Eli kuka tahansa voisi kirjautua järjestelmään ilman salasanaa. 8.2. mysql_real_escape_string()-funktioFunktiolla mysql_real_escape_string() voidaan eliminoida injektio. Funktio muokkaa erityismerkit kuten ('), ("), ja (\) sql-lauseesta. Lomakkeelta tulevat tiedot kannattaa siis muuttaa funktiolla turvalliseen muotoon ennen lauseiden suorittamista tietokannassa. Esimerkkisovelluksen kirjautuminen.php-tiedoston lomaketiedot voitaisiin käsitellä ko. funktiolla ennen kayttaja- tauluun syötettävän sql-lauseen suorittamista. $tunnus= mysql_real_escape_string( $_POST['tunnus']); $salasana= mysql_real_escape_string($_POST['salasana']); Huom! Palvelimen asetuksissa voidaan määritellä ominaisuus Magic Quotes olemaan joko päällä tai pois päältä. Jos asetus on päällä, niin em. erikoismerkit eliminoidaan automaattisesti. Sen onko asetus päällä, saa selville joko phpinfo()-funktiolla tai get_magic_quotes_gpc() -funktiolla. Funktio palauttaa arvon 0 (off) tai 1 (on). Asetus ei useinkaan ole päällä, mutta Students.osao.fi-palvelimella kyseinen asetus on päällä.
|