Email & URL tarkistus

Miten pitäisi käsitellä käyttäjän antamat sähköpostiosoite ja url-osoite, ennen kuin uskaltaa tallentaa ne tietokantaan?

Joku esimerkkikoodi olisi kivi :)
10719
Äänestä

Muut lukivat myös

Vastaukset 10

Vanhimmat

esim.
$email = get_magic_quotes_gpc ? $_POST['email'] : mysql_real_escape_string($_POST['email']);

Tällä tavoin käsittelet kaiken kantaan siirtyvän datan niin ei pitäisi olla ongelmia.

Äänestä
  • Ennemmin tuosta kannattaa tehdä functio kuin käyttää tuolleen. Sekä get_magic_quotes_gpc ei ole sama kuin mysql_real_escape_string vaikka osittain samoja merkkejä escapettavatkin.

    Äänestä

  • Jereeee kirjoitti:

    Ennemmin tuosta kannattaa tehdä functio kuin käyttää tuolleen. Sekä get_magic_quotes_gpc ei ole sama kuin mysql_real_escape_string vaikka osittain samoja merkkejä escapettavatkin.

    Kyllä mulla ainakin toimii ihan hyvin omalla tavallani tehtynä. Kantaan ei pysty tuolla tavalla tekemään kovinkaan haitallista.

    Mutta olen tokia voin kaikenlaiselle uudelle, joten olisiko heittä jotain koodia juttusi tueksi?

    Äänestä

  • teuro kirjoitti:

    Kyllä mulla ainakin toimii ihan hyvin omalla tavallani tehtynä. Kantaan ei pysty tuolla tavalla tekemään kovinkaan haitallista.

    Mutta olen tokia voin kaikenlaiselle uudelle, joten olisiko heittä jotain koodia juttusi tueksi?

    Toki tuo sinun tapasi toimii nyt, mutta ongelmia tulee myöhemmin. Tuo sinun tapasi on hyviä koodaustapoja vastaan, voi toki käyttää pikkujutuissa, mutta kannattaa opetella functioiden/luokkien käyttö jo nyt niin ei tule myöhemminkään ongelmia.

    Ajatteleppas asiaa hieman laajemmin, päätät joskus tulevaisuudessa ettei tuo magic_quotes riitäkkään tai se ei toimi enään tulevissa PHP versioissa jne.., jolloin joudutkin muuttamaan tuon asian monelta sivulta useasta kohti. Huomattavasti helpompa olisi muuttaa functiota vain yhdestä includetettavasta tiedostosta. Sekä koodi olisi myös silloin helppo lukuisempaakin mielestäni.


    Vaikkapa näin

    functiot.php
    fuction escape($syöte)
    {
    $syöte = get_magic_quotes_gpc ? $syöte : mysql_real_escape_string($syöte);

    return $syöte;
    }
    muitakin functiota jos tarvis.


    itse sivulla sit näin polku riippuu mihkä tuon laitat.


    include('../functiot.php');


    $email = escape($_POST['email']);
    $tunnus = escape($_POST['tunnus']);

    On sama kuin

    $email = get_magic_quotes_gpc ? $_POST['email'] : mysql_real_escape_string($_POST['email']);

    $tunnus = get_magic_quotes_gpc ? $_POST['tunnus'] : mysql_real_escape_string($_POST['tunnus']);


    Toki get_magic_quotes_gpc tekee syötteestä ihan turvallisen, mutta turvallisempa on käyttää aina tietokannan omaa escape-functiota mikäli semmoinen on saatavissa.


    Ja ellen ihan puutaheinää höpäjä niin tuo get_magic_quotes_gpc ja vastaavat on poistumassa jo PHP 6:ssa. Tuommosista jutuista kun on enempi haittaa koodaajalle kuin hyötyä. PHP6:den kehitys on jo kovassa vauhdissa ja alfa versioita on saatavilla ja tuntuvat toimivan ihan mallikkaasti kokeilun perusteella. http://snaps.php.net/

    Äänestä

  • Jereeee kirjoitti:

    Toki tuo sinun tapasi toimii nyt, mutta ongelmia tulee myöhemmin. Tuo sinun tapasi on hyviä koodaustapoja vastaan, voi toki käyttää pikkujutuissa, mutta kannattaa opetella functioiden/luokkien käyttö jo nyt niin ei tule myöhemminkään ongelmia.

    Ajatteleppas asiaa hieman laajemmin, päätät joskus tulevaisuudessa ettei tuo magic_quotes riitäkkään tai se ei toimi enään tulevissa PHP versioissa jne.., jolloin joudutkin muuttamaan tuon asian monelta sivulta useasta kohti. Huomattavasti helpompa olisi muuttaa functiota vain yhdestä includetettavasta tiedostosta. Sekä koodi olisi myös silloin helppo lukuisempaakin mielestäni.


    Vaikkapa näin

    functiot.php
    fuction escape($syöte)
    {
    $syöte = get_magic_quotes_gpc ? $syöte : mysql_real_escape_string($syöte);

    return $syöte;
    }
    muitakin functiota jos tarvis.


    itse sivulla sit näin polku riippuu mihkä tuon laitat.


    include('../functiot.php');


    $email = escape($_POST['email']);
    $tunnus = escape($_POST['tunnus']);

    On sama kuin

    $email = get_magic_quotes_gpc ? $_POST['email'] : mysql_real_escape_string($_POST['email']);

    $tunnus = get_magic_quotes_gpc ? $_POST['tunnus'] : mysql_real_escape_string($_POST['tunnus']);


    Toki get_magic_quotes_gpc tekee syötteestä ihan turvallisen, mutta turvallisempa on käyttää aina tietokannan omaa escape-functiota mikäli semmoinen on saatavissa.


    Ja ellen ihan puutaheinää höpäjä niin tuo get_magic_quotes_gpc ja vastaavat on poistumassa jo PHP 6:ssa. Tuommosista jutuista kun on enempi haittaa koodaajalle kuin hyötyä. PHP6:den kehitys on jo kovassa vauhdissa ja alfa versioita on saatavilla ja tuntuvat toimivan ihan mallikkaasti kokeilun perusteella. http://snaps.php.net/

    Jos tuo on poistumassa ja hommat pitäisi tehdä eri tavalla, niin voisitteko näyttää miten ammattilainen nyt ja tulevaisuutta ajatelleen tekisi URL-osoitteiden ja sähköpostiosoitteiden puhdistuksen koska uskon että aika moni käyttäjä törmää tähän samaan ongelman, joten hyvästä esimerkistä olisi kaikille hyötyä.

    Äänestä

  • nooooob kirjoitti:

    Jos tuo on poistumassa ja hommat pitäisi tehdä eri tavalla, niin voisitteko näyttää miten ammattilainen nyt ja tulevaisuutta ajatelleen tekisi URL-osoitteiden ja sähköpostiosoitteiden puhdistuksen koska uskon että aika moni käyttäjä törmää tähän samaan ongelman, joten hyvästä esimerkistä olisi kaikille hyötyä.

    On tuo poistumassa testasin PHP 6 sanoopi get_magic_quotes_gpc() käytettäessä
    Strict Standards: Function get_magic_quotes_gpc() is deprecated in xxxxx.

    Se on todellakin get_magic_quotes_gpc() eikä get_magic_quotes_gpc kuten virheellisesti tuossa aikasemmassa esimerkissäni sanoin, sen siitä saa kun kopioi suoraan function toisen(teuron) esimerkistä. Jos sitä käyttää suoraan kuten teuron esimerkissä niin se ei toimi halutulla tavalla


    No juu ammattilainen ;)

    Itse ottaisin magic_quotesit pois päältä mikäli ne on päällä http://fi.php.net/manual/fi/ini.php#ini.list sieltä magic_quotes_gpc ja magic_quotes_runtime jolloin ongelmasta pääsisi helpolla.

    Jos ei noin halua tehdä niin voi käyttää vaikkapa tämmöistä functiota. Toimii tulevaisuudessa PHP 6, mutta sitten kun jaksaa niin tuosta kannattaa poistaa $syöte = .... juttu koska sitä ei enään tarvita PHP 6 kanssa näin scriptit nopeutuu muutaman nanosekunnin.

    function escape($syöte)
    {
       $syöte = @get_magic_quotes_gpc() ? stripslashes($syöte) : $syöte;
       
       mysql_real_escape_string($syöte);
    }



    @ merkki piilottaa errorit get_ma... functiosta, tämä siltä varalta jos PHP:n asetukset on niin että errorit näkyy käyttäjälle. Toisaaltaan @ käyttö ilman virheenkäsittelyä ei ole hyvä, mut sallittakoon se täs.

    Tuon mysql_real_escape_string-function tilalle sitten se mitä tietokantaa käyttät. Tuo mysql_real_escape_string on MySQL joskin kannattaa käyttää mysqli laajennosta jos on käytössä PHP 5 ja se on asennettu. http://fi.php.net/manual/fi/ref.mysqli.php

    Iltalukemista PHP 6 http://php.net/~derick/meeting-notes.html

    Äänestä

  • Jereeee kirjoitti:

    On tuo poistumassa testasin PHP 6 sanoopi get_magic_quotes_gpc() käytettäessä
    Strict Standards: Function get_magic_quotes_gpc() is deprecated in xxxxx.

    Se on todellakin get_magic_quotes_gpc() eikä get_magic_quotes_gpc kuten virheellisesti tuossa aikasemmassa esimerkissäni sanoin, sen siitä saa kun kopioi suoraan function toisen(teuron) esimerkistä. Jos sitä käyttää suoraan kuten teuron esimerkissä niin se ei toimi halutulla tavalla


    No juu ammattilainen ;)

    Itse ottaisin magic_quotesit pois päältä mikäli ne on päällä http://fi.php.net/manual/fi/ini.php#ini.list sieltä magic_quotes_gpc ja magic_quotes_runtime jolloin ongelmasta pääsisi helpolla.

    Jos ei noin halua tehdä niin voi käyttää vaikkapa tämmöistä functiota. Toimii tulevaisuudessa PHP 6, mutta sitten kun jaksaa niin tuosta kannattaa poistaa $syöte = .... juttu koska sitä ei enään tarvita PHP 6 kanssa näin scriptit nopeutuu muutaman nanosekunnin.

    function escape($syöte)
    {
       $syöte = @get_magic_quotes_gpc() ? stripslashes($syöte) : $syöte;
       
       mysql_real_escape_string($syöte);
    }



    @ merkki piilottaa errorit get_ma... functiosta, tämä siltä varalta jos PHP:n asetukset on niin että errorit näkyy käyttäjälle. Toisaaltaan @ käyttö ilman virheenkäsittelyä ei ole hyvä, mut sallittakoon se täs.

    Tuon mysql_real_escape_string-function tilalle sitten se mitä tietokantaa käyttät. Tuo mysql_real_escape_string on MySQL joskin kannattaa käyttää mysqli laajennosta jos on käytössä PHP 5 ja se on asennettu. http://fi.php.net/manual/fi/ref.mysqli.php

    Iltalukemista PHP 6 http://php.net/~derick/meeting-notes.html

    Eikö kannattaisi poistaa kaikki ei sallitut merkit vaikka preg_replace:lla ja jos osoite on eri kuin uusi puhdistettu merkkijono, niin antaa virheilmoitus.

    Jos vielä tietäisi mitkä verkit ovat sallittuja URL:osoitteissa ja sähköpostiosoitteissa.

    Äänestä

  • enemmän... kirjoitti:

    Eikö kannattaisi poistaa kaikki ei sallitut merkit vaikka preg_replace:lla ja jos osoite on eri kuin uusi puhdistettu merkkijono, niin antaa virheilmoitus.

    Jos vielä tietäisi mitkä verkit ovat sallittuja URL:osoitteissa ja sähköpostiosoitteissa.

    *Eikö kannattaisi poistaa kaikki ei sallitut merkit vaikka preg_replace:lla ja jos osoite on eri kuin uusi puhdistettu merkkijono, niin antaa virheilmoitus.'

    Ei noin. Jos tuon haluaa tehdä niin ennemmin katsoo löytyykö merkkijonosta kiellettyjä merkkejä jos niin silloin error. Jos error juttuun päädyt niin kerro ainakin mikä meni pieleen etkä vain totea tiedot puutteelisia jne... epämääräistä.

    Tähän vaikuttaa täysin mihkä tarkoitukseen tämä juttu tulee. Se että emailissa ja/tai URL osoitteessa ei ole kiellettyjä merkkejä ei todellakaan tarkoita että osoitteet olisi käyttäjän omia saatika edes olemassa. Usein näkee tuommosia scriptejä jotka ei toimi oikein vaan antaa ihan kelvellisesta email osoitteesta erroria sepäs vasta mukavaa käyttäjän kannalt.

    Jos email tai URL osoite on oikeellisuus on tärkeä juttu palvelun kannalta niin mielestäni järkevintä on silloin pyytää osoite uudestaan ja verrata niitä keskenään tämä vähentää kirjoitusvirheen mahollisuutta. Ja/tai pyytää sitten vastaamaan emailiin tai likata emailissa olevaa linkkiä.

    Itseäni ainakin ärsyttää kaikki pakko email jutut jossain vähäpätöisessä palvelussa. Usein niihin [email protected] tai vastaavaa.


    *Jos vielä tietäisi mitkä verkit ovat sallittuja URL:osoitteissa ja sähköpostiosoitteissa.*

    Vilkaseppas
    http://www.ilovejackdaniels.com/php/email-address-validation/
    http://www.zend.com/zend/spotlight/ev12apr.php
    http://www.zend.com/zend/spotlight/php-link-validation2.php

    Nuo äkkiseltään löysin en tiedä sit toimivuudesta. Onhan tuosta asiasta olemas ihan virallinenkin dokumentti kunhan muistas vain missä.

    Äänestä

  • Jereeee kirjoitti:

    *Eikö kannattaisi poistaa kaikki ei sallitut merkit vaikka preg_replace:lla ja jos osoite on eri kuin uusi puhdistettu merkkijono, niin antaa virheilmoitus.'

    Ei noin. Jos tuon haluaa tehdä niin ennemmin katsoo löytyykö merkkijonosta kiellettyjä merkkejä jos niin silloin error. Jos error juttuun päädyt niin kerro ainakin mikä meni pieleen etkä vain totea tiedot puutteelisia jne... epämääräistä.

    Tähän vaikuttaa täysin mihkä tarkoitukseen tämä juttu tulee. Se että emailissa ja/tai URL osoitteessa ei ole kiellettyjä merkkejä ei todellakaan tarkoita että osoitteet olisi käyttäjän omia saatika edes olemassa. Usein näkee tuommosia scriptejä jotka ei toimi oikein vaan antaa ihan kelvellisesta email osoitteesta erroria sepäs vasta mukavaa käyttäjän kannalt.

    Jos email tai URL osoite on oikeellisuus on tärkeä juttu palvelun kannalta niin mielestäni järkevintä on silloin pyytää osoite uudestaan ja verrata niitä keskenään tämä vähentää kirjoitusvirheen mahollisuutta. Ja/tai pyytää sitten vastaamaan emailiin tai likata emailissa olevaa linkkiä.

    Itseäni ainakin ärsyttää kaikki pakko email jutut jossain vähäpätöisessä palvelussa. Usein niihin [email protected] tai vastaavaa.


    *Jos vielä tietäisi mitkä verkit ovat sallittuja URL:osoitteissa ja sähköpostiosoitteissa.*

    Vilkaseppas
    http://www.ilovejackdaniels.com/php/email-address-validation/
    http://www.zend.com/zend/spotlight/ev12apr.php
    http://www.zend.com/zend/spotlight/php-link-validation2.php

    Nuo äkkiseltään löysin en tiedä sit toimivuudesta. Onhan tuosta asiasta olemas ihan virallinenkin dokumentti kunhan muistas vain missä.

    >Jos tuon haluaa tehdä niin ennemmin katsoo löytyykö merkkijonosta kiellettyjä merkkejä jos niin silloin error.

    Tuskin tuo edes teoriassa mahdollista, ja jos on niin tosi tyhmää!

    Paljon helpompaa on luetella kaikki sallitut merkit kuin kaikki ei sallitut, koska erilaisia merkkejä on satoja ellei tuhansia.

    Jos on sallittu vain a-zA-Z merkit niin niin niiden luettelemiseen tarvitaan 6-merkkia, entäs kaikkien ne jotka eivät ole a-z? Kaikki erikoismerkit, kaikki venäläiset aakkoset, kaikki kiinalaiset, kaikki japanilaiset, jne... Hohhoijaa...

    Äänestä

  • oikeast ???? kirjoitti:

    >Jos tuon haluaa tehdä niin ennemmin katsoo löytyykö merkkijonosta kiellettyjä merkkejä jos niin silloin error.

    Tuskin tuo edes teoriassa mahdollista, ja jos on niin tosi tyhmää!

    Paljon helpompaa on luetella kaikki sallitut merkit kuin kaikki ei sallitut, koska erilaisia merkkejä on satoja ellei tuhansia.

    Jos on sallittu vain a-zA-Z merkit niin niin niiden luettelemiseen tarvitaan 6-merkkia, entäs kaikkien ne jotka eivät ole a-z? Kaikki erikoismerkit, kaikki venäläiset aakkoset, kaikki kiinalaiset, kaikki japanilaiset, jne... Hohhoijaa...

    *>Jos tuon haluaa tehdä niin ennemmin katsoo löytyykö merkkijonosta kiellettyjä merkkejä jos niin silloin error.

    Tuskin tuo edes teoriassa mahdollista, ja jos on niin tosi tyhmää!*

    Myönnän että tuo oli hieman epäselvästi sanottu.


    *Paljon helpompaa on luetella kaikki sallitut merkit kuin kaikki ei sallitut, koska erilaisia merkkejä on satoja ellei tuhansia.*

    Aivan. En tarkoittanutkaan että luotellaan ei sallitut merkit vaan sallitut, ja sitten kun merkeissä on ei sallittuja niin error. Näinhän tulee katottua onko kiellettyjä merkkejä.

    Äänestä

Kommentoi aloitusta


phpsecure kirjoitti:

Miten pitäisi käsitellä käyttäjän antamat sähköpostiosoite ja url-osoite, ennen kuin uskaltaa tallentaa ne tietokantaan?

Joku esimerkkikoodi olisi kivi :)

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu