2017-03-01 2 views
0

Ich möchte den direkten Zugriff auf einige öffentliche Dateien aus meinem Verzeichnis blockieren. Zum Beispiel habe ich die Datei image.png und ich muss ein Captcha ausfüllen, um diese Datei herunterzuladen, wenn ich das Captcha fehlschlagen möchte ich nicht, dass der Benutzer auf die Datei zugreifen konnte. Gibt es eine Möglichkeit, das in Symfony zu tun?Direkte Downloads blockieren mit Symfony

+1

Ich würde wirklich vorschlagen, * diese Dateien * außerhalb des öffentlichen Verzeichnisses * zu verschieben und sie nur zu bedienen, indem sie einen Controller übergeben (siehe @ Jeets Antwort unten). – Gerry

Antwort

2

Erstellen Sie zunächst eine .htaccess Datei im Image-Verzeichnis, um den direkten Zugriff auf Dateien innerhalb des Verzeichnisses zu verhindern.

Deny from All 

Nun gibt maßgeschneiderten Weg durch controller die Datei herunterzuladen, wo man leicht ein captcha unter Verwendung einig Bündel wie Gregwar's CaptchaBundle integrieren kann.

Nach erfolgreicher Captcha-Validierung laden Sie die Datei unter Response herunter.

$filename = __DIR__ . "../path_to_file/image.png"; 

// Generate response 
$response = new Response(); 

// Set headers 
$response->headers->set('Cache-Control', 'private'); 
$response->headers->set('Content-type', mime_content_type($filename)); 
$response->headers->set('Content-Disposition', 'attachment; filename="' . basename($filename) . '";'); 
$response->headers->set('Content-length', filesize($filename)); 

// Send headers before outputting anything 
$response->sendHeaders(); 
$response->setContent(file_get_contents($filename)); 

Hinweis: Code nicht getestet!

Hoffe, das hilft!

+0

Danke für Ihre Antwort! Ich denke, dass es gut funktioniert, aber nur eine letzte Frage. Ich benutze Nginx als Server, ich habe die htaccess erstellt, aber es hat nicht funktioniert, ich weiß nicht, ob es an diesem Nginx-Server oder einem anderen Zeug ist –

+0

Sie müssen 'Nginx' Server-Konfigurationsdatei dafür ändern. Ich habe keine direkten Erfahrungen bei der Einrichtung eines 'Nginx'-Servers. Vielleicht möchten Sie diesen 2 Links folgen: [Conversion Tool] (https://winginx.com/de/htaccess), [Config] (http://serverfault.com/a/267510/401780) – Jeet