2012-02-08 2 views
1

내 웹 사이트에서 mp3 파일을 재생할 수있는 플래시 플레이어가 있습니다.하지만 누군가가 "viewsource"또는 방화 광 등과 같은 브라우저 도구를 사용하면 매개 변수를 찾아서 실제 mp3 파일 URL. 내 백 엔드에서 PHP를 사용하고 있습니다. 이러한 매개 변수를 숨기려면 어딘가에 있어야하지만 방법을 파악할 수 없습니까?플래시 플레이어에서 MP3 파일 경로 보호하기

아이디어가 있으십니까?

+1

Sidenote하지만 플래시 파일 내부의 URL을 하드 코딩해도 사람들은 Fiddler와 같은 것을 사용하여 MP3에 대한 별도의 요청을 매우 쉽게 가로 채고 저장할 수 있습니다. –

답변

4

머리말 : 웹에 표시하면 훔칠 수 있습니다. 기간.

두 가지 일을 PHP 스크립트를 통과하여 파일의 URL을 마스킹하여 많은 어렵게 만들 수 있습니다 말했다 :

1 )의 유효성을 검사 할 수있는 암호화 된 GET 매개 변수를 변환 할 수 있습니다 한 번만 사용하십시오 (데이터베이스 또는 로그에 변수를 저장하십시오). 이 코드는 플레이어가로드 될 때 만들어지며 일단 버퍼링을 시작하면 파일을 다시 사용할 수 없습니다. 이렇게하면 매개 변수가 임의의 문자열 (해독 가능해야 함) 일 수 없으며 사용자는 동일한 URL을 사용할 수 없습니다.

사용자가 같은 것을 보일 것이다받을 수있는 HTML 페이지에서 PHP :

http://yoursite.com/mp3/file_fetcher.php?file_id=123&tolken=<?php echo $tolken;?> 

파일 : 다음

$key = 'My EnCyption Key'; 
$unique_string = "Generated at ".time().$_SERVER['REMOTE_ADDR']; //the time element changes the string each time and the IP address controls for multiple users simultaneously loading the same page 
$tolken = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); 

및 다음 플래시 플레이어는 MP3 파일을 사용하도록 설정 될 것이다

$fixed_string_part = "Generated at "; 
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($_GET['tolken']), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 
if (substr($decrypted,0,strlen($fixed_string_part))!=$fixed_string_part){ 
    die("Your tolken is invalid"); 
} 
//check that the tolken hasn't been used before: 
$check_query = mysql_query("select * from `mp3_tolken_log` where `tolken`='$decrypted';",[connection identifier]); //write this more cleanly 
if (mysql_num_rows($query)){ 
    die("You've already used that tolken!"); 
} else { 
    $log_it = mysql_query("insert into `mp3_tolken_log` (`tolken`,`dateadded`) VALUES ($decrypted,NOW())"); //make sure it's in there so it can't be used again 
} 

//now get the file if we haven't already died 
$contents = file_get_contents([path/to/mp3/file/specified/by/id/$_GET['file_id']]); 
header('Content-Type: audio/mpeg'); 
echo $contents; 
: file_fetcher.php는 (분명히이 일부 구체화 아웃 필요) 같은 것을 할 것이다 0

2) 참조 사이트가 직접 스크립트에 액세스하려는 것이 아니라 자신의 사이트인지 확인하십시오. 뭔가 같이 : 물론

if (!isset($_SERVER['HTTP_REFERER'])){die("Restricted Access!");}; 
$_u=parse_url($_SERVER['HTTP_REFERER']); 
$_u=preg_replace("/(www.)/i","",strtolower($_u['host'])); 
$_i=$_SERVER['HTTP_HOST']; 
$_i=preg_replace("/(www.)/i","",strtolower($_i)); 
($_u == $_i) or die("Restricted Access!"); 

이 정보는 위조 할 수 있지만 및 단일 액세스 패스 사이에 당신은 직접적인 다운로드에 대해 걱정할 필요가 없습니다. 즉, 스트림에서 파일을 가져 오는 데는 백만 가지 방법이 있으며이를 막을 방법이 없습니다.

관련 문제