Minulla on pieni php skripti joka hakee tietoa MySQL tietokannasta käyttäjän antaman hakusanan perusteella.
Mitkä tietoturva-asiat pitäisi ottaa huomioon. Ettei vain käyttäjä antaisi jotain haitallista koodia hakukenttään.
Mitkä tietoturva-asiat pitäisi ottaa huomioon. Ettei vain käyttäjä antaisi jotain haitallista koodia hakukenttään.
Vastaukset 3
Vanhimmat
Eipä mitään ihmeellisiä asioita, muutama perus juttu vain
1) Syöte aina http://fi.php.net/manual/fi/function.mysql-real-escape-string.php tai vastaavan function läpi. Escapettaa (\) haitalliset merkit.
2) Sekä hakuehdot ' ' merkkien sisään ei " " merkkien. Esim WHERE teksti = 'pöö'
3) Ei liity varsinaisesti enään tähän, mutta jos esim tarttetaan vain numeroita, niin silloin katsotaan että ne on todellakin numeroita.
Jos mahollista, niin suorita haku tunnuksilla millä on mysliin vain lukuoikeudet, näin turvallisuus paranee huomattavasti. Haunhan ei tarvitse mysliin kirjoittaa mitään.
Sekä myslin tunnukset pois scriptistä ja includetetaan ne netin ulkopuolisesta hakemistosta. Näin tunnukset ei joudu ulkopuolisten käsiin jos php-tulkki sekoaa.
Sekä includettavien pääte kannattaa pitää php eikä inc, jos palvelimen asetuksista ei ole estetty inc päätteisten tiedostojen näyttöä. (Jos netin ulkopuoliseen hakemistoon, niin silloin päätteellä ei merkitystä)
Voin illal katsoa joskos kotikoneella on talles yks linkki jossa pölötetään näistä php jne... turvallisuudesta.
Vielä lopuksi, pidä kaikki virheet näkyvissä kun kehität scriptiä sekä pidä mielessä, että käyttäjä kirjoittaa kenttiin mitä ihmeellisimpiä juttuja.
http://shiflett.org/php-security.pdf
Tuossa on se opas mistä puhuin.
*Yksi tapa on myös poistaa hakustringistä kaikki muut merkit kuin aakkosnumeeriset.*
Onhan tämä ihan hyvä tapa joihinkin asioihin, mutta mielestäni ei kovinkaan hyvä hakujuttuihin, varsinkin jos on tietokanta käytössä. Noitten merkkien lisäksi sallisin ainaskin välilyönnin.
Kannattaa myös harkita oman function tekoa näille tarkasyuksille, jolloin asiaa on helpompa hallita.
Yksi tapa on myös poistaa hakustringistä kaikki muut merkit kuin aakkosnumeeriset. Tämä tosin toimii vain jos muu ohjelma on rakennettu noudattamaan plain-hakua esim. avainsanalistojen muodossa.