Easy Digital Downloads ha un sistema robusto in atto per mantenere sicuri i tuoi link di download dei file e impedirne l'abuso. Quando si fa clic su un link di download di un file, l'ordine dei parametri forniti è importante. Di tanto in tanto, determinate configurazioni di hosting, livelli di cache o provider CDN potrebbero riordinare i parametri della stringa di query al fine di consentire una certa cache di base. Il riordino di questi elementi farà fallire la validazione del token di Easy Digital Downloads per il link di download di un cliente.
Come posso capire se questo è il mio problema?
Se, quando un utente fa clic per scaricare i propri file, riceve l'errore "Non hai il permesso di scaricare questo file", verifica che l'URL abbia ancora il seguente formato, prestando particolare attenzione all'ordine dei parametri.
https://example.org/index.php?eddfile=...&ttl=...&file=...&token=...
Se i parametri della stringa di query non sono nell'ordine sopra indicato, allora stai riscontrando il problema sopra descritto. Abbiamo alcune soluzioni per aiutare a prevenire che ciò accada.
Se hai configurato un sistema di caching delle pagine, come Cloudflare o Varnish, potresti ancora riscontrare questo errore anche se i tuoi parametri sembrano essere nell'ordine corretto. Ciò è dovuto al fatto che il sistema di caching delle pagine ordina tali parametri prima di inviare la tua richiesta al server web per l'elaborazione da parte di PHP.
Come posso prevenire questo problema?
Modifiche alla configurazione dell'hosting
La situazione ideale è non far riordinare ai tuoi provider i parametri della stringa di query quando la richiesta è per il download di un file, impedendo che qualsiasi richiesta contenente il parametro di query eddfile venga elaborata dalle regole di riordino.
Se stai utilizzando Cloudflare e hai abilitato la loro funzione Ordinamento della stringa di query, dovresti essere in grado di disabilitare questa funzione per consentire agli utenti di scaricare i propri file senza errori.
Frammento di codice personalizzato
Riconosciamo che ciò potrebbe non essere sempre possibile con alcuni provider, quindi abbiamo scritto una piccola funzione che eseguirà una seconda volta qualsiasi validazione fallita, per verificare che abbiamo ricevuto gli elementi nell'ordine corretto.
function ck_custom_validate_url_token( $ret, $url, $query_args ) {
// If basic validation failed, let's make sure the URL prarms were in the right order and try again
if ( false === $ret ) {
$parts = parse_url( $url );
wp_parse_str( $parts['query'], $query_args );
$fix_arg_order = array(
'eddfile' => $query_args['eddfile'],
'ttl' => $query_args['ttl'],
'file' => $query_args['file'],
'token' => $query_args['token'],
);
$fixed_url = add_query_arg( $fix_arg_order, site_url() );
$fixed_token = edd_get_download_token( $fixed_url );
$ret = $query_args['token'] === $fixed_token;
}
return $ret;
}
add_filter( 'edd_validate_url_token', 'ck_custom_validate_url_token', 10, 3 );
La funzione sopra dovrebbe essere testata in un ambiente di staging prima di utilizzarla in un ambiente di produzione, per verificare che funzioni correttamente nella tua configurazione specifica.
