Kirjoittaja Aihe: MySql ja PHP sekä tietoturva  (Luettu 5059 kertaa)

$eppo

  • Käyttäjä
  • Viestejä: 190
    • Profiili
MySql ja PHP sekä tietoturva
« : 24.08.10 - klo:16.24 »
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.

2) pitäisikö funktioon lisätä vielä joitakin muita merkkejä kiellettäviksi jo olevien lisäksi?

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?

4) riittääkö yllä oleva preg_match-funktio yksin tietoturvaan vai pitääkö siihen vielä liittää mahdollisesti vaikka Mysql_real_escape_string-funktio?

5) vai riittääkö  Mysql_real_escape_string-funktio yksin turvaamaan kantaa.

kiitos neuvoista :-)

Ubuntu 14.04 LTS

Ilokaasu

  • Käyttäjä
  • Viestejä: 1547
    • Profiili
Vs: MySql ja PHP sekä tietoturva
« Vastaus #1 : 24.08.10 - klo:22.22 »
Lähdetään vaikka siitä, että sitä ei saa 100% turvalliseksi yhdelläkään funktiolla tai muulla tarkistuksella.

Kannattaa tutustua ainakin esimerkiksi PHP:n PDO rajapintaan joka tuo asioihin hieman enemmän turvaa kuin usein käytetyt escape stringit yms.

En halua vähätellä tältä sivustolta saatavaa koodausapua, mutta suosittelisin myös tutustumaan muihin suomalaisiin, erityisesti ohjelmointiin liittyviin foorumeihin.

odysseus

  • Vieras
Vs: MySql ja PHP sekä tietoturva
« Vastaus #2 : 25.08.10 - klo:11.28 »
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.
« Viimeksi muokattu: 25.08.10 - klo:11.39 kirjoittanut odysseus »

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: MySql ja PHP sekä tietoturva
« Vastaus #3 : 04.07.12 - klo:08.47 »
----
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ä
---



Mites tuollainen tarkistus tuupataan php:n sekaan (tarkistettava syöte textarea)?
Osannen katsoa jos merkkijonossa on nuo sallitut merkit mutta millainen kikka tarvitaan että varmistan onko muitakin.
Ja tosiaan, mielellään jo syötössä, ennen kuin kuponki lähtee palvelimella.
Joku OnChange -funktio ei kai ole ihan satavarma koska voihan textareaan myös pudottaa pastella?

mrl586

  • Käyttäjä
  • Viestejä: 4638
    • Profiili
Vs: MySql ja PHP sekä tietoturva
« Vastaus #4 : 04.07.12 - klo:21.21 »
PDO:n käyttö helpottanee syötteen tarkistusta.

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11481
    • Profiili
    • Tomin kotisivut
Vs: MySql ja PHP sekä tietoturva
« Vastaus #5 : 04.07.12 - klo:22.06 »
Mites tuollainen tarkistus tuupataan php:n sekaan (tarkistettava syöte textarea)?
Osannen katsoa jos merkkijonossa on nuo sallitut merkit mutta millainen kikka tarvitaan että varmistan onko muitakin.
Ja tosiaan, mielellään jo syötössä, ennen kuin kuponki lähtee palvelimella.
Joku OnChange -funktio ei kai ole ihan satavarma koska voihan textareaan myös pudottaa pastella?
Selainhan ei suorita PHP:tä, eikä POST tietoja lähetetä ennen kuin käyttäjä painaa lähetysnappia. Eli tähän käytetään sitä Javascriptiä. Itse olen tehnyt tälläisen: http://tomin.dy.fi/palaute
Sen javascriptistä voi ottaa oppia jos haluaa käyttää jQueryä (nopeuttaa kyllä paljon hommia), tosin tuon voisi varmasti tehdä paremminkin (koodi on jo vähän vanhaa): http://tomin.dy.fi/js/palaute.js
« Viimeksi muokattu: 04.07.12 - klo:22.08 kirjoittanut Tomin »
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.