Mitä minun pitäisi käytännössä tehdä, jotta tietoturva säilyisi hallinnoitaessa MySQL-tietokantoja PHP:n kautta?
Yritä optimoida koodi niin hyvin, ettei suuria pikku bugeja näkyisi käyttäjille, mutta yleensä PHP + MySql yhdistelmä on jo valmiiksi hyvin tietoturvallista.
remontti-reiska kirjoitti:
mutta yleensä PHP + MySql yhdistelmä on jo valmiiksi hyvin tietoturvallista.
Ja ****** marjat, muistan itse ainakin loggautuneeni johonkin palveluun kirjoittamalla tunnukseksi jonkun käyttäjän nimen ja salasanaksi "jotain' OR 1=1" ja yllätys yllätys, loggautu sisään.
ajv kirjoitti:
remontti-reiska kirjoitti:
mutta yleensä PHP + MySql yhdistelmä on jo valmiiksi hyvin tietoturvallista.
Ja ****** marjat, muistan itse ainakin loggautuneeni johonkin palveluun kirjoittamalla tunnukseksi jonkun käyttäjän nimen ja salasanaksi "jotain' OR 1=1" ja yllätys yllätys, loggautu sisään.
Mitenkäs tällainen estetään? Auttaako esim. addslashes()-funktio tässä?
Kyllä, addslashes()-funktio auttaa tässä.
Lisäksi kannattaa tutustua funktioihin mysql_escape_string() sekä
is_int(). Tietokannasta kun usein haetaan juuri id:n perusteella, niin tuo is_int()-funktio on erittäin hyödyllinen.
Lisäksi php.inin asetus magic_quotes_gpc:llä voi määrittää, että lomakkeelta lähetetyn datan hipsut ja lainausmerkit escapetetaan. En kuitenkaan lähtisi suunnittelemaan tietoturvaa tuon asetuksen pohjalle. Jossain vaiheessa kun vaihdatkin palveluntarjoajaa ja ko. asetus on uudella palvelimella kytketty pois, niin joudut kuitenkin varmistamaan koodisi.
Edit: Meikäläinen on kuitenkin vain harrastelija, olisi kiva kuulla jonkun ammattilaisen näkemys. Itse olen tyytynyt tarkastelemaan kaikki kriittiset arvot. Käsittääkseni jo hyvin suunniteltu taulu tietokannassa parantaa tietoturvaa.
Kannattaa tosiaan tarkistaa jollakin tavalla tietokantaan lisättävä tieto. Tosin ajv:n mainitseman asetuksen (joka on oletuksena päällä) ansiosta lomakkeen kautta lähetettyihin tietoihin tulee automaattisesti kenoviivat heittomerkkien eteen. Myöskään enää ei ole mahdollista liittää SQL-kyselyn perään puolipisteen avulla toista kyselyä, joka esimerkiksi poistaisi koko taulun tietokannasta.
Jos tietokannassa on salasanoja, älä tallenna niitä sellaisenaan vaan esimerkiksi md5-muodossa. Huonona puolena on se, että jos käyttäjä unohtaa salasanan, sitä ei saa enää mitenkään selville.
Jos skriptin kautta pystyy poistamaan tietoja tietokannasta, älä käytä suoraan DELETEä vaan lisää tauluun kenttä, jonka arvon muuttaminen vaikkapa ykköseksi estää tietojen näkymisen sivulla. Poistaminen tapahtuu sitten tätä kenttää muuttamalla. Tämän jälkeen vahingossa poistetut tiedot eivät katoa oikeasti ja ne pystyy palauttamaan helposti.
Offtopic:
Antti Laaksonen kirjoitti:
Jos skriptin kautta pystyy poistamaan tietoja tietokannasta, älä käytä suoraan DELETEä vaan lisää tauluun kenttä, jonka arvon muuttaminen vaikkapa ykköseksi estää tietojen näkymisen sivulla. Poistaminen tapahtuu sitten tätä kenttää muuttamalla. Tämän jälkeen vahingossa poistetut tiedot eivät katoa oikeasti ja ne pystyy palauttamaan helposti.
Liekö tämä syynä statistiikkasivun epätarkkuuksiin, lähinnä noiden pisimpien viestiketjujen vääriin lukuihin?
Syy on tosiaan siinä. Silloin, kun tein tuon sivun, viestejä ei vielä pystynyt poistamaan muuten kuin suoraan tietokannasta. Siksi vanhentunut skripti ottaa huomioon kaikki tietokannassa olevat viestit, niin näkyvät kuin poistetutkin.
Kannattaa myös laittaa se hallinnnointi toimimaan vain HTTPS:n kautta. Salaamaton yhteys = ei mitään tietoturvaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.