Minulla on sellainen ongelma, että koodini ei "muista" muuttujia. Eli koodi en seuraavanlainen :
index.php
<?php include('imurointi_key.php'); ?> <a href="imuroi.php?id=0&?key=<?php echo $jh_dl_key; ?>">Imuroi filu</a> (~ 900kt) <input type="hidden" name="key" value="<?php echo $jh_dl_key; ?>"> <input type="hidden" name="jh_dl_key" value="<?php echo $jh_dl_key; ?>">
imurointi_key.php
<?php // generoidaan uniikki imurointi avain list($usec, $sec) = explode(" ",microtime()); $jh_dl_key = ($sec . substr($usec, 2, 3)); ?>
imuroi.php
<?php // Varmistetaan muuttujat $jh_dl_key = $_GET['jh_dl_key']; $key = $_GET['key']; // Ladataan tiedosto $id_filu = file("iideet.txt"); // Jos key on oikea ohjataaan selain imuroitavaan filuun if($key > "" and $jh_dl_key > "" and $key == $jh_dl_key and $jh_dl_key == $key){ $ohjaa_filu = $id_filu[$id]; header ("Location: ". $ohjaa_filu); }else{ // Muutoin muualle $ohjaa_dl = "http://www.osoite.net/index.php?sivu=dl_failure"; header ("Location: ". $ohjaa_dl); } ?>
ongelmana on siis, että muuttujat key ja jh_dl_key eivät pysy vaikka kuinka yrittäisi.
Sä et voi käyttää noita input-kenttiä ilman formia, ja niillä ei muutenkaan tee mitään ku annat noi muuttujat parametrina. Lisäksi tuossa linkin perässä olevassa querystringissä on yks kysymysmerkki liikaa.
<?php include('imurointi_key.php'); ?> <a href="imuroi.php?id=0&key=<?php echo $jh_dl_key;?>">Imuroi filu</a> (~ 900kt)
Ja nyt siis tuo key-muuttuja siirtyy osoiterivillä imuroi.php-tiedostolle.
edit: tuo on aika mielenkiintoinen tuo sun tarkistuslitania tuolla imuroi.php - tiedostossa :)
edit2: niin, siis selvennyksenä vielä että nythän tuo muuttuja jh_dl_key ei oo tuossa parametrina, mutta eihän sitä tarvikaan kun se on tuossa sun koodissa sama kun toi key.
edit3: ajv omaksunut nopsasti foorumin uudet tagit :) (kts. seuraava viesti --->)
Heeeetkonen! Nyt taitaa olla hieman getit ja postit sekasin...
Käytät piilokenttiä, vaikka formista ei ole tietoakaan, saatikka sitten formin lähettäjästä eteenpäin.
Edit: Vain nopsat elävät!
Edit2: Hienosti toimii nää uudet sydeemit!
Edit3: Paitsi hieman levittää sivua, kun on noi kooditagit vielä tuolla [lin]:in sisällä
Nyt tuli spedettyä pahemman kerran :P .... niin olisiko mahdollista saada tuo jh_dl_key muuttuja tulemaan imuroi.php:hen ilman, että se näkyy osoitteessa... ja ilman, että sitä tallennetaan cookieen, sessioon tai filuun.
Käytät lomaketta, hidden-kenttää ja post-metodia. Silloinkin se tosin näkyy lähdekoodissa. Miksei esimerkiksi sessiot kelpaa?
Miksei se saisi näkyä osoiterivillä?
Muuta se osoitteeseen menevä tieto muotoon joka on turvallinen. Jos sen takia sitä ei saa näkyä?
Sessiot eivät kelpaa koska ne eivät välttämättä toimi kaikilla (ilman säätämistä). Muuttuja ei saisi näkyä koska :
Koodin idea on toimia suoralinkki estona... (en kyllä tiedä miten tämä mahtaa toimia jos saan tämän edes toimimaan) eli siis jos joku copypastetaa linkin sivuilleen ja yrittää mennä linkkiin imuroiminen ei onnistu koska key muuttuja ei ole sama kuin jh_dl_key... joten jos jh_dl_key muuttuja olisi näkyvillä systeemi ei toimisi, koska muuttujan voisi helposti säätää niin, että esto ei toimi :(
http://www.pikseli.biz/blog/archive/2003/10/21/
No, vaikka saisitkin tuon eston toimimaan, ei se estä suoralinkitystä. Vaikka IE ei näytäkkään mistä hakemistosta tiedosto ladataan, niin Opera sen tekee. Eli kun kerran Operalla lataa kaikki filut, niin saa suorat linkit noihin tiedostoihin. Toisaalta, eihän tommosia kikkailuja nyt ihan tavallinen peelo välttämättä osaa käyttää, mutta mielestäni aivan turha systeemi. Jos haluat estää ulkoalinkityksen on ainut hyvä tapa sen toteuttamiseen uudelleen nimetä tiedostot joka kerta.
Edit: Ai niin!!! Unohdin tuon .htaccesin! Se on tietenkin paras keino!
Edit2: https://www.ohjelmointiputka.net/keskustelu/3812-tiedosto-koodi tuolla lisää aiheesta
aah!... no kiitoksia oikein paljon :P
Aihe on jo aika vanha, joten et voi enää vastata siihen.