Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL tietoturva + php kysymys

dwarfer [03.07.2010 22:10:34]

#

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>") == "&ltb& gt"? (ilman tuota väliä)
ja miksi $text = str_replace("&ltb& gt", "<b>", $text); ei toimi?

Antti Laaksonen [03.07.2010 23:36:42]

#

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.php?tunnus=mysqlphp02

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 &lt; ja merkin > merkiksi &gt; 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>") == "&ltb& gt"?

Koodi:

<?php
echo htmlspecialchars("<b>");
?>

Tulos:

&lt;b&gt;

dwarfer [03.07.2010 23:58:55]

#

Jeps. Siinäpä se tulikin aika kattavasti, kiitän :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta