riroil Skrevet 4. november 2006 Del Skrevet 4. november 2006 *Denne ligger også under html, men fikk et tips om at den bør ligge her.* Hei. Jeg har ikke så veldig mye erfaring, men har puslet litt med php og sql. Det jeg er på jakt etter er et script eller et tips til hvordan jeg kan få en link til å virke kun engang. Nærmere forklart: Jeg skal legge ut et filmklipp på min server. Linken til dette filmklippet skal jeg sende til en bekjent. Han skal kunne klikke på linken, se filmen og så skal linken ikke være gyldig mer. Det skal heller ikke gå å laste ned denne filmen. Jeg vet ikke om det er mulig, men er det noen der ute som har en løsning? Lenke til kommentar
PHPdude Skrevet 4. november 2006 Del Skrevet 4. november 2006 Gjør sånn: - Log IP'n til alle som har brukt linken og putt det i en database - Sjekk om IP'n ligger i database før man tillater nedlasting av filmen Noe sånt: <php $res = $db->query("SELECT * FROM log WHERE ip = '%s'", $_SERVER['REMOTE_ADDR'])); if($res->num_rows > 0) { die('No access!'); } $db->query("INSERT INTO log ('%s')", $_SERVER['REMOTE_ADDR'])); echo file_get_contents('movie.mpeg'); ?> Lenke til kommentar
Peter Skrevet 4. november 2006 Del Skrevet 4. november 2006 Og sleng en .htaccess-fil som hindrer http-tilgang til mappen der filmene ligger. Systemet vil aldri være 100% sikkert, ettersom IP'er forandrer seg (dog sjeldnere enn før), eller man kan bruke proxyer, men det hindrer nok en del mindre tekniske brukere. Lenke til kommentar
riroil Skrevet 4. november 2006 Forfatter Del Skrevet 4. november 2006 Det er nok ikke så ofte dette skal brukes mot avanserte brukere, så sikkerheten kan vi sette til side til å begynne med. Lenke til kommentar
PHPdude Skrevet 4. november 2006 Del Skrevet 4. november 2006 Her snakker vi ikke om avansert sikkerthet, for da er ikke IP nok. Vis jeg vil så har jeg nye IP på et minutt så det hjelper deg ikke mye mot de som virkelig vil ha filmen 2 ganger. Men de vel isåfall lagre filmen Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 4. november 2006 Del Skrevet 4. november 2006 Dropp IP. Bruk heller en unik ID. Linken man sender ut inneholder denne ID'en, og når lenken blir åpnet, registrerer du at video x med ID y er åpnet, og setter denne som vist i en database (og eventuellt sletter filen i tillegg). I det samme scriptet legger du til logikk for å sjekke om en video allerede er vist eller ikke. Dette krever altså tilgang til en database... det kan sikkert gjøres med tekstfiler/flatfiler også, men database er det som er best egnet. Lenke til kommentar
Jonhoo Skrevet 4. november 2006 Del Skrevet 4. november 2006 (endret) Hmm... Du kan jo gjoere foelgende: Naar en person sender linke til en annen genereres det en hash av noe slag som lagres i en database med en column som gir filnavnet. Denne hashen legges til paa slutten av linken som sendes. Personen klikker paa linken, siden han kommer inn paa sjekker gjennom databasen etter en entry med hashstringen. Scriptet aapner filen som hashstringen viser til, og sletter deretter entrien.. Hvis siden ikke finner noen entry med hashkeyen som brukeren oppgir faar han ikke se noen video... EDIT: Aaargh, slaatt paa maalstreken... Jaja, her kommer ihvertfall en begynnelse paa kode send_link.php PHP <?php $mailto = addslashes(htmlentities($_POST['mottaker'])); $fil = addslashes(htmlentities($_POST['fil'])); $hash = md5(crypt(md5('LH73hLIUH398y9'), md5('ai5128746gjsv'))); mysql_connect($dbaddr, $dbuser, $dbpass); mysql_query(sprintf("INSERT INTO validhashes (hash, file) VALUES ('%s', '%s')", $hash, $fil)); mail ($mailto, "Anbefalt fil", 'En venn av deg har foreslaatt foelgende fil! <a href="http://www.yourpage.com/showfile.php?hash='.$hash.'">Klikk her</a>' ); ?> showfile.php PHP <?php mysql_connect($dbaddr, $dbuser, $dbpass); $backer = mysql_query("SELECT * FROM validhashes WHERE hash='".mysql_real_escape_string($_GET['hash'])."'"); $fileinfo = mysql_fetch_array($backer); $filnavn = $fileinfo['fil']; //Her skriver du ut koden som embedder videoen... Filnavnet er lagret i variablen $filnavn ?> Endret 4. november 2006 av Jonhoo Lenke til kommentar
Jonhoo Skrevet 4. november 2006 Del Skrevet 4. november 2006 Aesj, faar ikke redigert PHP koden over... Merkelig forum... Uansett, etter linjen: PHP $backer = .... skal det staa: PHP mysql_query("DELETE FROM validhashes WHERE hash='".mysql_real_escape_string($_GET['hash'])."'"); Jeg vet at koden ikke er perfekt, men den gir deg ihvertfall en ide om hvordan du kan gjoere det Lenke til kommentar
riroil Skrevet 5. november 2006 Forfatter Del Skrevet 5. november 2006 Jeg synes dette hørtes ut som en grei løsning. Men jeg skjønner at jeg kan alt for lite programmering. Er det noen som har enormt lyst til å hjelpe? Lenke til kommentar
Jonhoo Skrevet 5. november 2006 Del Skrevet 5. november 2006 Har jo nettopp skrevet mange linjer kode over jo ^^ Det skal vaere akkurat det du trenger... Hvis du gir oss lit mer informasjon saa kan vi sikkert hjelpe deg aa skreddersy noe kode som er paste-n-run... Lenke til kommentar
riroil Skrevet 5. november 2006 Forfatter Del Skrevet 5. november 2006 Vel, skal forsøke. Jeg har webhotell via one.com. Jeg skal sende en link (pr mail) til en film som jeg legger ut via ftp. For moro skyld kan vi kalle filmen donald.avi Fortell meg mer hva du trenger. Lenke til kommentar
Jonhoo Skrevet 6. november 2006 Del Skrevet 6. november 2006 Altsaa, alt du trenger aa gjoere er aa copy-paste koden over, legge inn mysql brukernavn og passord og legge inn html koden for aa embede video etter linjen //Her skriver du ut koden som embedder videoen... Filnavnet er lagret i variablen $filnavn Lenke til kommentar
riroil Skrevet 6. november 2006 Forfatter Del Skrevet 6. november 2006 Men når jeg forsøker så er siden helt blank. Dette gjelder både send_link.php og showfile.php Har selvfølgelig forandret adresse og lagt inn db informasjonen. Lenke til kommentar
ZoRaC Skrevet 6. november 2006 Del Skrevet 6. november 2006 (endret) Kan være en feil i skriptet som fører til det, prøv å sett dette øverst etter <?php: ini_set("display_errors", 1); Men, hva hindrer brukeren i å linke direkte til donald.avi i ettertid da? Har selv slitt med samme problem, altså unngå at videoer inkluderes direkte på andre nettsider.... For har han først åpnet siden, så kan han jo se i kilden hva filen heter... Jeg har løst problemet med å rename filen til f.eks "donald_md5-hash-her.avi" og md5-hashen er en sammensetning av verdier fra "date" og et salt. Pr i dag vil det si at den første til å åpne siden med videoen hver uke trigger en renaming av video-filen. Den finner videofilen ved at jeg spesifiserer at den starter med "donald_" og den returnerer da hele filnavnet til den filen som matcher. Kan poste scriptet om interesse, dere kan forøvrig se det i bruk her: http://hjelpekorps.steinkjer-rk.no/video/ Endret 6. november 2006 av ZoRaC Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 6. november 2006 Del Skrevet 6. november 2006 (endret) Men, hva hindrer brukeren i å linke direkte til donald.avi i ettertid da? Har selv slitt med samme problem, altså unngå at videoer inkluderes direkte på andre nettsider.... For har han først åpnet siden, så kan han jo se i kilden hva filen heter... Jeg har løst problemet med å rename filen til f.eks "donald_md5-hash-her.avi" og md5-hashen er en sammensetning av verdier fra "date" og et salt. Pr i dag vil det si at den første til å åpne siden med videoen hver uke trigger en renaming av video-filen. Den finner videofilen ved at jeg spesifiserer at den starter med "donald_" og den returnerer da hele filnavnet til den filen som matcher. Et forslag som er noe ryddigere (altså med tanke på filnavn) er å ikke laste opp filen rett i eller under html-roten. F.eks.: La oss si at html-roten er /home/users/superduperuser/www/, isteden for å laste opp hit, laster man opp filmene til /home/users/superduperuser/filmer/ Man legger så til at scriptet, f.eks. hentfil.php i /www/ som leser filene fra ../filmer/ og streamer det ut til nettleseren. I denne legger man selvsagt inn sjekken på at det finnes en gyldig hash før man streamer filen. Finnes den ikke, så sender man enkelt og greit en 404 header. I scriptet som skal vise videoen/lenken til videoen, så lager man link til hentfil.php?hash=blablabla På denne måten slipper man at noen kan linke direkte til donald.avi. Funksjoner/lenker for å få dette til: http://no.php.net/readfile http://no.php.net/header http://www.faqs.org/rfcs/rfc2183 http://www.utoronto.ca/ian/books/html4ed/appb/mimetype.html Endret 6. november 2006 av Slettet-rXRozPkg Lenke til kommentar
ZoRaC Skrevet 6. november 2006 Del Skrevet 6. november 2006 *snip* Prøvde noe slikt selv også, men måtte tilslutt gi opp. Vet ikke helt hvorfor, men den ene videofilen er nesten 50MB, så mistenker at filen ble for stor til at det kunne løses slik... Om noen får til dette vil jeg gjerne se koden Lenke til kommentar
riroil Skrevet 6. november 2006 Forfatter Del Skrevet 6. november 2006 Skulle gjerne fått til noe av det som Jonhoo skriver ovenfor. Men når jeg kjører de så blir det bare blank skjerm. Kommer ingen feilmld heller. Lenke til kommentar
Jonhoo Skrevet 7. november 2006 Del Skrevet 7. november 2006 har du MySQL installert? har du fylt inn brukernavn/passord til databasen? har du skrevet koden for aa embedde videoen paa siden? Lenke til kommentar
trrunde Skrevet 7. november 2006 Del Skrevet 7. november 2006 litt ot men hva er det som hindrer personen i å lagre filmen den ene gangen han får se den? Da kan han jo se filmen så mange ganger han vil Lenke til kommentar
riroil Skrevet 7. november 2006 Forfatter Del Skrevet 7. november 2006 Slik ser filene mine ut nå. <?php ini_set("display_errors", 1); $dbaddr = localhost $dbuser = ****** $dbpass = ****** $mailto = addslashes(htmlentities($_POST['[email protected]'])); $fil = addslashes(htmlentities($_POST['donald.avi'])); $hash = md5(crypt(md5('LH73hLIUH398y9'), md5('ai5128746gjsv'))); mysql_connect($dbaddr, $dbuser, $dbpass); mysql_query(sprintf("INSERT INTO validhashes (hash, file) VALUES ('%s', '%s')", $hash, $fil)); mail ($mailto, "Anbefalt fil", 'En venn av deg har foreslaatt foelgende fil! <a href="http://www.mittdomene/showfile.php?hash='.$hash.'">Klikk her</a>' ); ?> Og sendfile.php ser slik ut: <?php ini_set("display_errors", 1); $dbaddr = localhost $dbuser = ****** $dbpass = ***** mysql_connect($dbaddr, $dbuser, $dbpass); $backer = mysql_query("SELECT * FROM validhashes WHERE hash='".mysql_real_escape_string($_GET['hash'])."'"); mysql_query("DELETE FROM validhashes WHERE hash='".mysql_real_escape_string($_GET['hash'])."'") $fileinfo = mysql_fetch_array($backer); $filnavn = $fileinfo['donald.avi']; //Her skriver du ut koden som embedder videoen... Filnavnet er lagret i variablen $filnavn ?> Det er ikke store forandringene jeg har gjort. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå