Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Pyydetyn sivun nimen suodattamisesta

Sivun loppuun

lapm [09.07.2004 08:51:44]

#

Olen parhaillaan tekemässä sivuja uusiksi ja törmäsin heti pieneen ongelmaan.

Haluaisin varmistaa sen että käyttäjän pyytämä sivu on nimeltään oikeanlainen.

Tässä tapauksessa vaikkapa nimeltään ohjelmointi.

haluaisin varmistaa sen ettei käyttäjä pysty syöttämään sivun nimeksi vaikkapa /etc/passwd nimeä.

Pitäisi siis saada kaivettua puhdas stringi ilman viivoja mihnkään suuntaan, ilman pisteitä/tuplapisteitä, jne...

Joskos joku osaisi osoittaa oikeaan suuntaan.

Tosiaan unohtui mainita. Get metodilla olisi tarkokoitus tuota nimeä välittää. :) Helpottaa linkkien tekemistä.

ajv [09.07.2004 09:01:55]

#

Mitenköhän se käyttäjä sitä sivua pyytää? GETillä?

lapm [09.07.2004 15:32:04]

#

Kokeilen parhaillaan tuollaisella:

if (preg_match("/^([a-z]|[0-9])*/",$Sivu,$Temp))
{
    print "Match: $Temp[0]";
}
else
{
    print "No match";
}

Mutta tuntuu että tuo antaa Matchejä melkein joka asiasta mukaan lukien ../jotakin

Tempfile [09.07.2004 15:38:32]

#

Kaikkein turvallsin vaihtoehto lienee lukea ensin kaikki sallitut sivut vaikka glob:ia apuna käyttäen arrayhin, josta sitten haetaan käyttäjän valitsemaa sivua.

lapm [09.07.2004 15:59:23]

#

Toimiva tuokin taulukkoratkaisu, kallistunen siihen suuntaan jollen keksi parempaa preg_matcia kuin seuraava:

if (preg_match("/([a-zA-Z0-9]+)/",$Sivu,$Temp))
{
    print "Match: $Temp[0]";
}
else
{
    print "No match";
}

Tuo ainakin kaivaa annetun merkkiehtojen mukaisesti nimen syöttestä jättäen huomiotta pisteet, vinoviivat.

Yritän tässä samalla oppia vääntämään noita ehtoja tuolle preg_matchille. :) Ajatuksena kun on oppia tuota sen verran että käyttäjiltä saadun syötteen oppisi suodattamaan siten että halutun muotoinen tieto tulee oikeasti perille.

Edit:

Tulipas mieleen että tällaista sanitointia tarvitsee vaikka siinä että otetaan käyttäjältä syötettä vieraskirjaan, tuoteluetteloon päivitystä, yms...

Antti Laaksonen [09.07.2004 16:42:02]

#

Minusta helpointa olisi ihan vain poistaa /-merkit tiedoston nimestä.

$sivu = str_replace("/", "", $sivu);

Silloin muihin hakemistoihin tai toiselle palvelimelle siirtyminen ei ole mitenkään mahdollista.

lapm [09.07.2004 17:26:26]

#

Pitääpäs kokeilla tuota. Voisi olla melkoisesti nopeampi vain poistaa tosiaan ne viivat ja pistete tuolla kuin ajaa aina preg_match tuosta läpi. :)

Kiitos vinkistä.

renni [12.07.2004 23:47:07]

#

Oikea tapa tehdä asia: Laita pyyntöjen nimet (ja sitä vastaava todellinen sivu) taulukkoon. Jos pyydetty löytyy taulukosta niin ok, muuten näytetään virheilmoitus.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta