Olen nyt päässyt alkuun php rekistöröintiskriptinin kanssa jossa lisään tunnuksen
ja muut tiedot tietokantaan.
$tunnus = $_POST['tunnus'];
Onko turvallista antaa käyttäjän käyttää kaikenlaisia merkkejä tunnuksessa, vai
pitääkö karsia jotain vaarallisia merkkejä ennen tietokantaan lisäämistä?
En ole joutunut ennen tietokantaan lisäämään mitään tietoa joten valaiskaahan vähäsen.
Tietokantaan tallennettavassa merkkijonossa voi olla mitä tahansa merkkejä, mutta muutama asia täytyy ottaa huomioon.
Ensinnäkin heittomerkkejä sisältävää merkkijonoa ei voi yhdistää suoraan SQL-lauseeseen. Muuten tietokanta kuvittelee merkkijonossa olevan heittomerkin tarkoittavan merkkijonon loppumista.
MySQL-tietokannassa heittomerkkien eteen täytyy lisätä kenoviivoja. Tämä onnistuu esim. PHP:n funktiolla mysql_escape_string.
Lisäksi jos tunnuksessa voi olla mitä tahansa merkkejä, tulostusvaiheessa täytyy huolehtia, että merkkejä ei tulkita HTML-komennoksi. Tähän soveltuu esim. PHP:n funktio htmlspecialchars, joka muuttaa mm. merkin < muotoon < ja merkin > muotoon >.
mysql_real_escape_string
. Ja aina voi (ja olisi suotavaa?) käyttää preparoituja lausekkeita. Onko niin, että mikäli kantaan hyväksytään mitä tahansa (ja tulostetaan prosessoimattomana [poislukien nyt normaalit htmlspecialit]), sekaan voi ujuttaa hauskan hauskoja kontrollimerkkejä, joilla saadaan esimerkiksi käännettyä teksti ylösalaisin / päinvastaiseksi? Auttaisikohan tuohon sitten Filter-lisäosa...
Aihe on jo aika vanha, joten et voi enää vastata siihen.