Se si vogliono proteggere i propri file dal download selvaggio da parte di altri siti, e soprattutto evitare che a voi non venga riconosciuto neanche il merito del  duro lavoro, vi resta una sola alternativa validaper impedire questo furto di banda, cioè quella di inserire un controllo del refer o meglio da dove è stata inviata la richiesta di download.... Così facendo il vostro sito controlla chi fa richiesta per effettuare il download e se è abilitato può procedere, altrimenti apparirà al posto del file un messaggio di errore impostato da noi oppure una pagina web che abbiamo preparato. Il codice puro è molto semplice, e inserito nel punto giusto fa la magia...
1
2
3
4
5
6
7
$domain = $_SERVER['SERVER_NAME'];
define('ALLOWED_REFERRER', $domain);
if (ALLOWED_REFERRER !== ''
&& (!isset($_SERVER['HTTP_REFERER']) || strpos(strtoupper($_SERVER['HTTP_REFERER']),strtoupper(ALLOWED_REFERRER)) === false)
)
{die("Internal server error. Please contact system administrator." );
}
oppure si può inserire al posto del messaggio di errore un redirect ad una pagina del sito:
6
{die(header("location: http://www.dominio.com") );

Ora però, dopo aver visto il codice, vediamo dove lo possiamo inserire. Gli esempi si basano su due sistemi di download manager che sono disponibili su Wordpress: Download Monitor e WP-downloadmanager Nel primo caso il codice andrà inserito nel file chiamato download.php alla linea 53 dove si legge //select a download:
50
51
52
53
54
55
56
57
mysql_real_escape_string( $id ));
break;
case ("Filename") :
// select a download
//$query_select_1 = sprintf("SELECT * FROM %s WHERE filename LIKE '%s' LIMIT 1;",
$query_select_1 = sprintf("SELECT * FROM %s WHERE filename LIKE '%s' ORDER BY LENGTH(filename) ASC LIMIT 1;",
mysql_real_escape_string( $wp_dlm_db ),
mysql_real_escape_string( "%".$id ));
Nel secondo caso il controllo della provenienza va inserito nel file wp-downloadmanager.php alla linea 160
155
156
157
158
159
160
161
162
163
164
165
166
add_action('template_redirect', 'download_file', 5);
function download_file() {
	global $wpdb, $user_ID;
	$id = intval(get_query_var('dl_id'));
	if($id > 0) {
$file_path = stripslashes(get_option('download_path'));
$file_url = stripslashes(get_option('download_path_url'));
$download_method = intval(get_option('download_method'));
$file = $wpdb->get_row("SELECT file, file_permission FROM $wpdb->downloads WHERE file_id = $id AND file_permission != -1");
		if(!$file) {
			header('HTTP/1.0 404 Not Found');
			die(__('Invalid File ID.', 'wp-downloadmanager'));
Questo metodo è adoperato su ScritchWorld.com e su Matsoftware.it (che si ringrazia per l'aiuto nei test eseguiti)
Condividi questo articolo:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • MySpace
  • Segnalo
  • StumbleUpon
  • Technorati
  • Live
  • Wikio IT
  • Yahoo! Buzz