Huomenta päivää!
Hei kun formilla lähetetään tietoa ja se tietty tallennetaan vaikka nyt mysqllään. niin minkä kaikkien läpi ajatte sen. että siellä ei varmasti ole mitään ikävää koodin pätkää mikä pääsisi sitten oman koodini sekaan. tällä hetkellä minä olen ajellu sen näiden läpi:
$teksti = $_POST['teksti']; $teksti = stripslashes($teksti); $teksti = strip_tags($teksti); $teksti = mysql_escape_string($teksti);
tuli vaan mieleen et vieläköhän se jonkun läpi kannattas heittää. siitos ja kumarrus!
EDIT: ja tarkistetaanpas nyt vielä et miten työ fiksummat tarkistatte sen että tiedot on varmasti lähetetty juuri siltä sivulta. eikös tämäkin pitäisi/kannattaisi tarkistaa?
tämmöinen riittänee:
$tieto = htmlspecialchars(stripslashes($_POST["tieto"]), ENT_QUOTES);
Tuo muokkaa merkit < ja > html-koodiksi, jolloin niitä ei voi käyttää ilkityöhön, mutta viestistä ei menetetä merkkejä, kuten strip_tags tekee. ENT_QUOTES vielä muuttaa heittomerkitkin html-koodiksi.
EDIT: typo
EDIT2: ai niin, edellistä sivua ei voi tarkistaa varmasti, koska jotkin selaimet eivät lähetä tätä tietoa. Kumminkin, mahdollinen edellisen sivun tieto löytyy täältä:
$edellinen = $_SERVER["HTTP_REFERER"];
mutta tarkistatteko jotenkin tai varmistatteko sen että se on oikealta sivulta? vai onko tämmöinen turhaa? niin noh tietty jos on passulla suojatut sivut ni voihan sen tarkistaa ekana et on regannu ihtesä sisään.. tavetta muihin toimen piteisiin?
MasaVista kirjoitti:
tämmöinen riittänee:
$tieto = htmlspecialchars(stripslashes($_POST["tieto"]), ENT_QUOTES);
Miksi pitää poistaa html-tagit? Ja entäs miksi pitää poistaa escapetukset (stripslashes())?
Kantaan vaan raaka data, niin haku kannastakin pysyy yksinkertaisena. Sitten tulostettaessa ajetaan tuo htmlspecialchars(), jos on tarvetta.
Jos esim. MySQL:ään tallennat tietoa, kannttaa ensinnäkin huomioida php:n asetus magiq_quotes_gpc, joka siis taitaa oletuksena olla päällä ja joka escapettaa nuo kannoille haitalliset hipsut pois.
Itse olen käyttänyt ihan seuraavan tyylistä:
<?php $teksti = get_magic_quotes_gpc() ? $_POST['teksti'] : mysql_escape_string($_POST['teksti']); ?>
Edit:"poistaa html-tagit", eli siis muuntaa ne html-entiteeteiksi.
Jos kannasta paljon tulostellaan tietoa niin kyllä se tagien poistaminen on välillä kannattavaa. Esimerkiksi itse tehdessäni palautejärjestelmää koululle(jossa oppilaat antoivat palautetta opettajien kursseista) kyllä käytin strip_tags:ia sillä ei niissä palautteissa mitään millään html-tageilla tehnyt. Mutta tuo nyt on aika tapauskohtaista.
Kiitoksia! Hyvä tietää! mutta vielä jäi kaivertamaan tuo että pitäisikö jokin kikka kehittää ja minkälaisia olette kehittänyt jolla tarkistaa että tieto tulee juuri siltä sivulta kun on tarkoitus? vai onko mitenkä helppoa lähettää tietoa jollekkin sivulle toiselta palvelimelta jopa. kertokaa mielipiteenne!
itse en ole sitä tarkistellut kun nuo tuollaiset tärkeämmät on yleensä kirjautumisen takana. mutta jos muut ovat viisaampia niin kertokoot toki.
mielestäni joskus oli puhetta tuosta tarkistamisesta aiemminkin, ei vaan muistu mieleen, että keksittiinkö silloin viisasta ratkaisua.
Itse mietin hieman ja tulin ajatukseen,
että lomake sivulla luodaan vaikkapa evästeen, jonka olemassa olo tarkistetaan käsittely sivulla. Tämänkin voi tietenkin kiertää jos lähdekoodi katoaa vääriin käsiin, nimittäin silloin voidaan luoda se samanlainen eväste, mutta auttanee jotain.. ?
Ja sen evästeen luomisen voi huomata ja tehdä moisen. Tuota edellistä sivua on melkein mahdoton tarkistaa, sen kun voi feikata. Kirjautumisen takana on itelläki.
Entäs kuinka mysql_real_escape_stringin manuskassa mainittu funkkari quote_smart, käyttääkö sitä joku?
Aihe on jo aika vanha, joten et voi enää vastata siihen.