![]() |
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ä.
|