minulla ja harjoitusmielessä mysql-kanta ja siinä php-ohjelma, jolla voi lisätä kannan tauluun uusia tietueita. olen lueskellut netistä tietoturva-asioita ja (kuten on moneen kertaan mainittu) www-lomakkeelta tuleva data pitää aina tarkastaa ennen talletusta kantaan.
tähän liittyen kysyisinkin:
1) riittääkö se, että ennen talletusta kantaan ajetaan kaikki lomakkeelta tuleva data esimerkiksi preg_match("/^[a-oA-Z0-9]+$/", $_POST['merkki']) tarkastelun läpi.
Tuo tarkistushomma kannattaa tietty tehdä alustavasti jo clientin päässä vaikka javascriptillä
..ja tietty sitten tapauksesta riippuen varmistaa/estää PHP:ssä, jotten sinne voi postata mistä tahansa hakkerin formista.
2) pitäisikö funktioon lisätä vielä joitakin muita merkkejä kiellettäviksi jo olevien lisäksi?
Tämähän riippuu totaalisesti siitä mitä sinun tarvitsee tallentaa. Tietuekohtaisesti tietty katsot merkit mitä minnekin saa mennä jo siksi, että ehkäiset tietokantaongelmia sillä (esimerkiksi vain numeerisen datan osalta jne).
3) yllä olevilla määrityksillä välilyönti sanojen välissä aiheuttaa virheen ja siis estää datan talletuksen. millä määrityksellä välilyönnin saa luvalliseksi?
Laitat siihen pregiin välilyönnin mukaan: [a-oA-Z0-9] -> [ a-oA-Z0-9]
4) riittääkö yllä oleva preg_match-funktio yksin tietoturvaan vai pitääkö siihen vielä liittää mahdollisesti vaikka Mysql_real_escape_string-funktio?
Tapauskohtaista. En kuitenkaan alkaisi monessa eri layerissä noita tulkkaamaan vaan tekisin oman message-broker tyyppisen modulin, jonka läpi kaikki menee ja tapauskohtaisesti muokkautuu ja ohjautuu.
5) vai riittääkö Mysql_real_escape_string-funktio yksin turvaamaan kantaa.
Tämäkin on tapauskohtaista. Kannattaa speksata se ohjelma ja sen tarpeet kunnolla ja sitten tehdä se speksien mukaan eikä scrathistä heittämällä ja sitten spagettia parsimalla.
Kunnolliset ohjelmistokehitysprosessit käyttöön heti vaan alusta alkaen, niin siinä oppii sitten kunnioittamaan niitä varsinkin sitten siinä vaiheessa kun vuoden päästä pitäisi tehdä systeemiin muutos!!
kiitos neuvoista :-)
Edit: Lisäksi muuten huomasin, että käytät tuolla mallia $_POST['merkki'].
Tuossa ei ole teknisesti mitään väärin, mutta älä vaan ala koodaamaan _mitään_ suomeksi!
Muuttujien nimet, funktioiden nimet jne englanniksi, jotta sitä koodia voi muokata joku muukin tulevaisuudessa. Suomi kuuluu ohjelmistokehityksessä osastoon $lang = 'fi', jolla päätellään minkä kielinen ((X)HTML)template käyttäjän nenän eteen ladataan. Koodiin suomi ei kuulu lainkaan, eikä edes koodin kommentteihin tai mihinkään teknisiin spekseihin.