Hei, minulla on player_mp3.swf tiedosto joka toimii mp3-soittimena. Soittimelle siis annetaan mp3-tiedoston polku muuttujalla (flashvar mp3, esim. player_mp3.swf?mp3=soita.mp3). Yritän tehdä php-skriptiä joka käyttäisi kyseistä soitinta toistamaan tietyn mp3-tiedoston.
Jostain syystä tuo player_mp3.swf ei kuitenkaan tunnista antamaani mp3-tiedostoa.
Miten saisin tuon mp3-tiedoston menemään perille? Tarkoituksena olisi kuitenki ettei se näkyisi käyttäjälle suoraan itse sivun lähdekoodista.
<?php // player.php $player = 'player_mp3.swf'; $url = 'http://osoite.com/' . $player; if( $_GET['f'] == 'asd' ) { $file = 'soita.mp3'; } if( !isset( $file ) ) $file = 'default.mp3'; header( 'Content-Type: application/x-shockwave-flash' ); header( 'Content-Length: ' . filesize( $player ) ); readfile( $url . '?mp3=mp3/' . $file ); ?>
Tuo tapa ei toimi, koska palvelin ei välitä mp3-muuttujasta mitään, vaan se antaa player_mp3.swf-tiedoston selaimelle sellaisenaan. Tietysti palvelimella voisi olla skripti, joka muuttaisi mp3-tiedoston lennosta swf-tiedostoksi, jossa olisi soittimen lisäksi media valmiina, mutta tietäsit varmasti, mikäli tällainen ratkasu olisi käytössä.
Nyt soitin toimii siten, että se pyytää mp3-tiedoston uudella sivupyynnöllä, ja siksi tiedoston osoite on myös jotenkin välitettävä selaimelle. Tässä ehkä hämää se, ettei muuttujia yleensä välitetä URL-paremetreinä, vaan esim. tällä tavalla:
<embed src="player_mp3.swf" flashvars="mp3=soita.mp3"></embed>
Jos tarkoituksenasi on estää mp3-tiedostojen lataaminen, unohda koko homma. Se on melko hyödytöntä, koska tiedoston oikean osoitteen saa todella helposti vaikka Operan Dragonflyllä.
Tavoitteena olis ihan vaan ettei mp3:en lataaminen olisi niin helppoa että avaa vain lähdekoodin. Eikö tuo skripti voisi muka välittää mp3-parametriä valmiiksi soittimelle ja sitten näyttää sen selaajalle?
Tietysti on mahdollista tehdä skripti, joka lennosta luo swf-tiedoston, jossa on mp3-tiedoston osoite valmiina, mutta ihan helppoa se ei ole. Yksinkertainen ratkaisu on käyttää numerokoodeja koodin ratkaisevissa osissa, jolloin lähdekoodista ei näe osoittetta ihan suoraan. Kuten sanoin, mitään monimutkaista on turha viritellä, koska sen mp3-tiedoston saa ladattua melko helposti joka tapauksessa
Jos kuvittelee, että pelkällä osoitteen sotkemisella luulee estävänsä mp3-tiedoston latailun, niin olet väärässä. Sinun pitää lisäksi asettaa tiedosto esim. jonkin sessio-kohtaisen tarkistuksen, ettei urlia voi vaan kopioida selaimen osoiteriville ja ladata sitä kautta.
Jokainen joka vähääkään on käyttänyt tietokonetta enemmän, tietää mitä yhteistä on flashipohjaisen mp3-playerin kohdalla olevan lähdekoodin riveillä:
player_mp3.swf?mp3=soita.mp3
ja
player_mp3.swf?foo=bar_4_xvvkjf
Kovin suurta vaivaa ei kannata lataamisen estämiseksi nähdä. Vaikka saisit osoitteen piilotettua käyttäjältä tai estettyä tiedoston osoitteen kopioimisen selaimen osoiteriville, saa tiedoston siitä huolimatta kaapattua vaikka Wiresharkilla melko helposti.
Vanha viisaus. Älä laita nettiin mitään, mitä et halua muiden kopioivan.
Eli jos haluat jakaa omaa musaa, niin laita vaikka biisistä 20 sekunnin pätkä, monoraitana, tai muuten vaan huonommalla äänenlaadulla.
Eikun paa suoraan linkki ämpäriin, käske lataamaan ja jakamaan eteenpäin ja (olettaen, että musa on hyvää) nauti suosiostas.
Aihe on jo aika vanha, joten et voi enää vastata siihen.