tietoturvallinen lomake

php-aloittelija

Jos teen nettisivulle tekstikentän ja sovelman käyttäjä kirjoittaa kenttään PHP-kooodia, niin se käsittääkseni suoritetaan jos sivu ladataan uudelleen. Miten voin luoda tarkistuksen, että koodia ei suoritettaisi? Ongelmana on se, että PHP-koodia voi syöttää niin monessa muodossa, tavallisena tekstinä, heksakoodena jne. Olisi kiva nähdä esimerkkikoodi, joka hyväksyisi vain syötteen "aa", mutta ei mitään muuta syötettä, ei edes aa:n heksakoodivastinetta. Ilmeisesti tämä tehdään jotenkin säännöllisten lausekkeiden avulla?

3

994

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • juhakorkeapudas

      Ongelma tulee silloin jos suoritat esimerkiksi tietokantakyselyitä ja käyttäjä syöttää hakukenttään sopivan merkkijonon, ja ellei hakukentän syötteestä ole poistettu kiellettyjä merkkejä, seuraukset voivat olla ikäviä. Pelkän hakutoiminnon avulla tietokantaan voi esim. syöttää ilkikurisen käyttäjän haluamaa tietoa. Tämä tieto voi olla esim. kirjautumiseen käytetyn tunnuksen salasanan vaihto yms.

      Tekstikenttään syötetty koodi ei aiheuta ongelmaa ellei taustalla ole jokin sellainen toiminto, jota pystyy hyväksikäyttämään koodin avulla.

      Helpoiten merkkijonosta karsii "kielletyt" merkit käyttämällä korvausfunktiota säännöllisen lausekkeen kanssa.

      $input = preg_replace("/[^a-zA-Z0-9@.]/", "", $input);

      Toinen hyvä funktio on otsikossa mainittu Strip_tags, joka poistaa merkkijonosta kaikki html ja php tagit.


      http://fi2.php.net/manual/en/function.preg-replace.php

      http://fi2.php.net/manual/en/function.strip-tags.php

      • ejjej

        Hyvä perussääntö on että data tallennetaan muuttumattomana, VAIN vaaralliset merkit tehdään vaarattomaksi EI poisteta. Käyttämällä http://php.net/pdo.prepare joka on suositus, niin PHP tekee tuon puolestasi.

        Jos ei ole mahdollista käyttää PDO:ta niin silloin käytetään functiota joka on suunniteltu sille tietokannalle jota käytetään, esim MySQL - http://php.net/mysql-real-escape-string


        "Helpoiten merkkijonosta karsii "kielletyt" merkit käyttämällä korvausfunktiota säännöllisen lausekkeen kanssa."

        Miksi karsia?
        Jos lomakkeessa ilmoitetaan esim pelkkiä kirjaimia ja käyttäjä kirjoittaa lisäksi numeroita, tällöin tulostetaan käyttäjälle lomake syötettyinä datoineen virheilmoitus jotta on mahdollista korjata virheensä.

        Joissain tapauksissa toimivin on, että poistetaan virheellinen data mutta ennen tallentamista näytetään kävijälle mimmoisena data tallennetaan ja haluaako hän sen tallentaa vielä, näin vältetään ihan vääränä tallentunut sisältö.


        "$input = preg_replace("/[^a-zA-Z0-9@.]/", "", $input);"

        Ilmeisesti emaileihin?
        Tuo muuttaa sallitut email-osoitteet toisenlaiseksi, jolloin joko viesti ei mene kenellekkään tai menee ihan väärälle. http://en.wikipedia.org/wiki/E-mail_address#RFC_Examples

        Käyttäkäämme http://php.net/book.filter (filter_var, FILTER_VALIDATE_EMAIL), muutenkin tuota filteria kannattaa käyttää tämmöisissä asioissa. Sekä tuo on nopeempakin kun omat toteutukset, kun on tehty PHP-tulkin koodiin.


        "Toinen hyvä funktio on otsikossa mainittu Strip_tags, joka poistaa merkkijonosta kaikki html ja php tagit."

        Data muuttumattomana kantaan, nettisivuille (XHTML) tulostaessa laitetaan htmlspecialchars-function éi htmlentities-function kautta. Tällöin datan saa helposti mihintahansa esitysmuotoon ja pystyy poistamaan/muuttamaan halutut merkit. Toki tällöin täytyy tuntea hieman merkistökoodauksista ettei aiheuta ongelmia.

        Ei tuo strip_tags-functio ole ongelmaton. Lähetän foorumille


      • toimii jossain
        ejjej kirjoitti:

        Hyvä perussääntö on että data tallennetaan muuttumattomana, VAIN vaaralliset merkit tehdään vaarattomaksi EI poisteta. Käyttämällä http://php.net/pdo.prepare joka on suositus, niin PHP tekee tuon puolestasi.

        Jos ei ole mahdollista käyttää PDO:ta niin silloin käytetään functiota joka on suunniteltu sille tietokannalle jota käytetään, esim MySQL - http://php.net/mysql-real-escape-string


        "Helpoiten merkkijonosta karsii "kielletyt" merkit käyttämällä korvausfunktiota säännöllisen lausekkeen kanssa."

        Miksi karsia?
        Jos lomakkeessa ilmoitetaan esim pelkkiä kirjaimia ja käyttäjä kirjoittaa lisäksi numeroita, tällöin tulostetaan käyttäjälle lomake syötettyinä datoineen virheilmoitus jotta on mahdollista korjata virheensä.

        Joissain tapauksissa toimivin on, että poistetaan virheellinen data mutta ennen tallentamista näytetään kävijälle mimmoisena data tallennetaan ja haluaako hän sen tallentaa vielä, näin vältetään ihan vääränä tallentunut sisältö.


        "$input = preg_replace("/[^a-zA-Z0-9@.]/", "", $input);"

        Ilmeisesti emaileihin?
        Tuo muuttaa sallitut email-osoitteet toisenlaiseksi, jolloin joko viesti ei mene kenellekkään tai menee ihan väärälle. http://en.wikipedia.org/wiki/E-mail_address#RFC_Examples

        Käyttäkäämme http://php.net/book.filter (filter_var, FILTER_VALIDATE_EMAIL), muutenkin tuota filteria kannattaa käyttää tämmöisissä asioissa. Sekä tuo on nopeempakin kun omat toteutukset, kun on tehty PHP-tulkin koodiin.


        "Toinen hyvä funktio on otsikossa mainittu Strip_tags, joka poistaa merkkijonosta kaikki html ja php tagit."

        Data muuttumattomana kantaan, nettisivuille (XHTML) tulostaessa laitetaan htmlspecialchars-function éi htmlentities-function kautta. Tällöin datan saa helposti mihintahansa esitysmuotoon ja pystyy poistamaan/muuttamaan halutut merkit. Toki tällöin täytyy tuntea hieman merkistökoodauksista ettei aiheuta ongelmia.

        Ei tuo strip_tags-functio ole ongelmaton. Lähetän foorumille

        Käytin erään lomakkeen tarkistamiseen sähköpostiosoitteen kohdalla tuota FILTER_VALIDATE_EMAIL-toimintoa. Jostain syystä se toimii omalla kotikoneellani vallan mainiosti, mutta ainakaan mbnet:in serverillä sama koodi ei enää toimikaan. Testailujeni perusteella koodin suoritus tökkää juuri tuohon validointiin, sen jälkeen ei tulosteta näytölle yhtään mitään. Onkohan tuo toiminto otettu joiltain servereiltä pois käytöstä, kun siinä taisi olla joku tietoturvaongelma? Entä tuleeko mieleen joku muu hyvä ja edes melko luotettava keino tarkistaa osoite?


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. 6 kW saunan lämmityksestä kohta 10 euron lisämaksu / kerta

      Kokoomuslainen sähköyhtiöiden hallitsema Energiavirasto ehdottaa 5 kW:n rajaa, jonka ylittämisestä tulee lisämaksu. Tark
      Maailman menoa
      87
      4683
    2. Kun väestö ikääntyy ja veronmaksajat vähenee, mitä sitten vasemmistolaiset?

      Maahanmuutto ei vaan ole ratkaisu väestön ikääntymiseen. Maahanmuutto lykkää ja hidastaa väestön ikääntymistä ja työv
      Maailman menoa
      203
      4608
    3. "Mitä sä nainen tuot sitten pöytään" ?

      Jos mies provaidaa ja suojelee... Pitääkö miesten kysyä tuollaisia?
      Ikävä
      106
      3066
    4. Ekologinen kommunismi tulee voittamaan fossiilikapitalismin

      Kiina on mahtitekijä uusiutuvien energialähteiden kehityksessä, ja Trump osoitus viimeisestä öljyn perään itkemisestä, m
      Maailman menoa
      22
      3057
    5. Minja jytkyttää vas.liiton kannatusta ylöspäin

      Alkaa raavaat duunarimiehetkin palaamaan vasemmistoliiton kannattajiksi. Eduskunnassahan on vain kaksi työntekijöiden p
      Maailman menoa
      96
      2980
    6. Mahonselän jäät - Saaristokunta Lieksa brutaalisti kriisin partaalla!

      Lieksan loppuvuoden hyvän kehityksen jälkeen ei olisi uskonut että palstan ahkerista kommentoijista huolimatta matkailu
      Lieksa
      138
      2268
    7. Oikeistopuolueiden kannatus vain 37,8 %, vasemmiston 43,0 %

      Keskustaan jää 17,4 prosenttia ja loput ovat sitten mitä ovat. Mutta selvästikin Suomen kansa on vasemmalle kallellaan.
      Maailman menoa
      33
      2167
    8. Laitetaan nyt kirjaimet kohdilleen

      kuka rakastaa ja ketä ?
      Ikävä
      89
      2143
    9. Tiedän ettei

      Meistä mitään tule. Toinen oli sinulle tärkeämpi
      Ikävä
      20
      2112
    10. Mies, kerro minulle vielä jotakin aivan uniikkia

      ja ainutlaatuista minkä vain me kaksi voisimme ymmärtää jos olemme sen kokeneet ja eläneet, jotta ihan varmasti tietäisi
      Tunteet
      37
      1909
    Aihe