Zaloguj się
Rozpocznij

Dokumentacja Easy Digital Downloads

Dokumentacja, materiały referencyjne i samouczki dla Easy Digital Downloads 

Nieprawidłowe linki do pobrania z powodu modyfikacji kolejności parametrów zapytania

Easy Digital Downloads posiada solidny system zapewniający bezpieczeństwo linków do pobierania plików i zapobiegający ich nadużywaniu. Po kliknięciu linku do pobrania pliku, kolejność podanych parametrów ma znaczenie. Od czasu do czasu niektóre konfiguracje hostingu, warstwy buforowania lub dostawcy CDN mogą zmieniać kolejność parametrów ciągu zapytania, aby umożliwić pewne buforowanie na poziomie bazowym. Zmiana kolejności tych elementów spowoduje, że Easy Digital Downloads nie przejdzie walidacji tokenu dla linku do pobrania klienta.

Skąd mam wiedzieć, czy to mój problem?

Jeśli po kliknięciu przez użytkownika w celu pobrania plików pojawi się komunikat o błędzie „Nie masz uprawnień do pobrania tego pliku”, sprawdź, czy adres URL nadal ma następujący format, zwracając szczególną uwagę na kolejność parametrów. 

https://example.org/index.php?eddfile=...&ttl=...&file=...&token=...

Jeśli parametry ciągu zapytania nie są w powyższej kolejności, to doświadczasz opisanego powyżej problemu. Mamy kilka rozwiązań, które pomogą zapobiec jego wystąpieniu.

Jeśli masz skonfigurowany system buforowania stron, taki jak Cloudflare lub Varnish, możesz nadal widzieć ten błąd, nawet jeśli Twoje parametry wydają się być w prawidłowej kolejności. Dzieje się tak, ponieważ system buforowania stron sortuje te parametry przed wysłaniem żądania do serwera WWW w celu przetworzenia przez PHP.

Jak mogę zapobiec temu problemowi?

Zmiany konfiguracji hostingu

Idealną sytuacją jest niedopuszczenie do zmiany kolejności parametrów ciągu zapytania przez dostawców, gdy żądanie dotyczy pobrania pliku, poprzez zapobieganie przekazywaniu jakichkolwiek żądań zawierających parametr ciągu zapytania eddfile przez zasady zmiany kolejności.

Jeśli korzystasz z Cloudflare i włączyłeś ich funkcję Sortowanie ciągu zapytania, powinieneś być w stanie wyłączyć tę funkcję, aby umożliwić użytkownikom pobieranie plików bez błędów.

Niestandardowy fragment kodu

Zdajemy sobie sprawę, że nie zawsze jest to możliwe u niektórych dostawców, dlatego napisaliśmy małą funkcję, która uruchomi każdą nieudaną walidację po raz drugi, aby sprawdzić, czy otrzymaliśmy elementy w odpowiedniej kolejności.

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 );

Powyższa funkcja powinna zostać przetestowana w środowisku stagingowym przed użyciem jej w środowisku produkcyjnym, aby sprawdzić, czy działa poprawnie w Twojej konkretnej konfiguracji.

Czy ten artykuł był pomocny?

Zacznij sprzedawać już dziś!

Dołącz do ponad 50 000 sprytnych właścicieli sklepów i zacznij korzystać z najłatwiejszego sposobu sprzedaży produktów cyfrowych za pomocą WordPress.

Copyright © 2025 Sandhills Development, LLC

[universally_switcher]