|
|
| Povezave |
|---|
|
Spletne strani Ključne besede Mali oglasi Mizarstvo Kuhinje |
|
|
| Povezave |
|---|
|
Spletne strani Ključne besede Mali oglasi Mizarstvo Kuhinje |
6. VARNOST
6.4 Varnost podatkovne zbirke | 6.4 Varnost podatkovne zbirke |
|
|
|
Pri uporabi podatkovne zbirke in pri sprejemanju vnosa za ustvarjanje dela zbirkine poizvedbe je zelo lahko podleči napadu SQL vbrizga. SQL vbrizg se zgodi, ko škodljiv uporabnik preizkuša obrazec, da pridobi podatke o podatkovni zbirki. Ko pridobi dovolj podatkov – običajno iz sporočil o napakah – je napadalec opremljen, da izkoristi obrazec za kakšne možne ranljivosti tako da vbrizga SQL v obrazčeva polja. Pogost primer je preprost obrazec za prijavo uporabnika: <form method="prijava.php" action="POST"> Uporabniško ime: <input type="text" name="uporabniskoIme" /><br /> Geslo: <input type="password" name="geslo" /><br /> <input type="submit" value="Prijavi se" /> </form> Ranljiva koda uporabljena za obdelavo obrazca lahko izgleda takole: $uporabniskoIme = $_POST[’uporabniskoIme’]; $geslo = md5($_POST[’geslo’]); $sql = "SELECT * FROM uporabniki WHERE uporabniskoIme='{$uporabniskoIme} AND geslo = '{geslo}'"; /* koda za povezovanje in poizvedbo */ if (count($rezultati > 0) { // uspešen prijavni poskus } V tem primeru ni nobene kode za presejanje $_POST vnosa. Namesto tega je surov vnos shranjen neposredno v spremenljivko $uporabniskoIme. Ta surov vnos je nato uporabljen v SQL stavku – nič ni ubežanega. Napadalec se lahko poskuša prijaviti z uporabo naslednjega uporabniškega imena: uporabniskoIme' OR 1 = 1 - S tem uporabniškim imenom in praznim geslom izgleda SQL stavek tako: SELECT * FROM uporabniki WHERE uporabniskoIme = 'uporabniskoIme' OR 1 = 1 --' AND password='d6a65697b435c454534ec435543a' Ker je 1 = 1 vedno pravilno in - začne SQL komentar, SQL poizvedba prezre vse po znaku - in uspešno vrne vse zapise o uporabnikih. To zadostuje napadalcu, da se lahko prijavi. Poleg tega lahko napadalec, če pozna kakšno uporabniško ime, uporabi to ime v napadu in se lahko izdaja za tega uporabnika. SQL vbrizgi so možni zaradi pomanjkanja presejanja in ubežanja. Pravilno presejan vnos in ubežan izhod za SQL bo izločil možnost napada. Za ubežanje izhoda za SQL poizvedbo uporabiš funkcijo mysql_escape_string(). |