Näitä mysql tietoturva aiheisia viestejä nyt näyttääpi olevan vaikka muille jakaa, mutta en vieläkään ole saanut tarpeeksi tietoa.
Elikkäs siis olen kyhäillyt register/login tsydeemin sekä foorumin. Mitä kaikkea tulisi ottaa huomioon, jotta kukaan ylimääräinen ei pääsisi lukemaan tietokantaa tai muuten tuhoamaan sivua? Ilmeisesti mysql_real_escape_string() ja htmlspecialchars() komennoilla tulisi ainakin muuntaa tietokantaan syötetty ja sieltä luettu tavara jottei kukaan pääse syöttämään koodia tietokantaan?
Onko turvallista esimerkiksi tallentaa kirjautuneen henkilön id sessionissa ja käyttää pelkästään tätä id:tä ja sen avulla esittää id:n tietoja käyttäjälle? Eli siis kykeneekö käyttäjä itse muuntamaan tuota sessionissa olevaa id:tä?
Onko htmlspecialchars("<b>") == "<b& gt"? (ilman tuota väliä)
ja miksi $text = str_replace("<b& gt", "<b>", $text); ei toimi?
dwarfer kirjoitti:
Mitä kaikkea tulisi ottaa huomioon, jotta kukaan ylimääräinen ei pääsisi lukemaan tietokantaa tai muuten tuhoamaan sivua?
Olennaista on, että käyttäjän antama tieto liitetään kyselyyn turvallisesti. Helpoin ratkaisu on käyttää PDO:ta seuraavan oppaan mukaisesti, jolloin asiasta ei tarvitse huolehtia itse:
https://www.ohjelmointiputka.net/oppaat/opas.
Funktio mysql_real_escape_string lisää merkkijonoon tarvittaessa kenoviivoja, jotta merkkijono ei voi muuttaa kyselyn rakennetta. PDO tekee tämän automaattisesti.
Funktio htmlspecialchars on tarpeen, kun tietoa tulostetaan sivulle. Se muuttaa mm. merkin < merkiksi < ja merkin > merkiksi > ja estää näin HTML-tagien vaikutuksen.
dwarfer kirjoitti:
Onko turvallista esimerkiksi tallentaa kirjautuneen henkilön id sessionissa ja käyttää pelkästään tätä id:tä ja sen avulla esittää id:n tietoja käyttäjälle?
Istunnon muuttujat (taulukko $_SESSION) tallennetaan palvelimelle, joten käyttäjä ei voi nähdä eikä muuttaa niitä. Käyttäjän koneelle tallennetaan vain istunnon tunnus.
dwarfer kirjoitti:
Onko htmlspecialchars("<b>") == "<b& gt"?
Koodi:
<?php echo htmlspecialchars("<b>"); ?>
Tulos:
<b>
Jeps. Siinäpä se tulikin aika kattavasti, kiitän :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.