diff --git a/.gitattributes b/.gitattributes
index a0a83a623a3033246eaac3edacb50b39e9c18e04..d7ef5cd7a63632cd3c6d42747c3e0618fa6b0e0f 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2,6 +2,7 @@
 action/dupliquer_formulaire.php -text
 action/editer_formulaire.php -text
 action/exporter_formulaire.php -text
+action/formidable_recuperer_fichier.php -text
 action/supprimer_formulaire.php -text
 action/supprimer_formulaires_reponse.php -text
 action/vider_formulaire.php -text
diff --git a/action/formidable_recuperer_fichier.php b/action/formidable_recuperer_fichier.php
new file mode 100644
index 0000000000000000000000000000000000000000..a688259018f71ce5cd2b8f213831f1920074d009
--- /dev/null
+++ b/action/formidable_recuperer_fichier.php
@@ -0,0 +1,37 @@
+<?php
+if (!defined("_ECRIRE_INC_VERSION")) return;
+include_spip('inc/autoriser');
+include_spip('inc/formidable_fichiers');
+/**
+ * Récupère, si on est autorisé à voir la réponse du formulaire, 
+ * un fichier 
+ * et l'envoi en http
+ **/
+function action_formidable_recuperer_fichier() {
+	$securiser_action = charger_fonction('securiser_action', 'inc');
+	$arg = $securiser_action();
+
+	$arg = unserialize($arg);
+	if (autoriser('voir', 'formulaires_reponse', $arg['formulaire'])) {
+		$chemin_fichier = _DIR_FICHIERS_FORMIDABLE
+			."formulaire_".$arg['formulaire'] 
+			."/reponse_".$arg['reponse']
+			."/".$arg['saisie']
+			."/".$arg['fichier'];
+		if (@file_exists($chemin_fichier)){
+			$f = $arg['fichier'];
+			formidable_retourner_fichier($chemin_fichier, $f);
+		}
+		else {
+			include_spip('inc/minipres');
+			echo minipres(_T("formidable:erreur_fichier_introuvable"));
+		}
+	} else {
+		include_spip('inc/minipres');
+    echo minipres();
+	}
+
+	exit;	
+
+}
+
diff --git a/formidable_fonctions.php b/formidable_fonctions.php
index 843e952b85c463f4a23ff978e5e02ba0ad67cdd3..2ab10a095493f62e8c5fd26933ad672007a23ad2 100644
--- a/formidable_fonctions.php
+++ b/formidable_fonctions.php
@@ -11,7 +11,6 @@ if (!defined('_ECRIRE_INC_VERSION')) {
 }
 
 include_spip('inc/formidable');
-include_spip('inc/utils');
 include_spip('public/formidable_criteres');
 
 /**
@@ -164,14 +163,16 @@ function formidable_ajouter_action_vue_saisie_fichiers($saisie_a_modifier, $nom_
 	$id_formulaire = strval($id_formulaire);
 	$id_formulaires_reponse = strval($id_formulaires_reponse);
 	$vignette_par_defaut = charger_fonction('vignette', 'inc/');
-
+	$securiser_action = charger_fonction('securiser_action','inc');
 	if (array_key_exists($nom_saisie, saisies_lister_avec_type($saisies_du_formulaire, 'fichiers'))) { //saisies SPIP
 		foreach ($saisie_a_modifier as $i => $valeur){
-			$param = 'id_formulaire='.$id_formulaire
-				. '&id_formulaires_reponse='.$id_formulaires_reponse
-				. '&fichier='.$valeur['nom'] 
-				. '&saisie='.$nom_saisie;
-			$url = generer_url_action('formidable_recuperer_fichier',$param,true,false);
+			$param = serialize(array(
+				'formulaire' => $id_formulaire,
+				'reponse' => $id_formulaires_reponse,
+				'fichier' => $valeur['nom'],
+				'saisie' => $nom_saisie
+			));
+			$url = $securiser_action('formidable_recuperer_fichier',$param,'',false);
 			$saisie_a_modifier[$i]['url'] = $url;
 			$saisie_a_modifier[$i]['vignette'] = $vignette_par_defaut($valeur['extension'],false);
 		}
diff --git a/inc/formidable_fichiers.php b/inc/formidable_fichiers.php
index 4d110aee971cadae2d2727138a19578332e86280..8766befc438b29dc6b30a009d2457a5490208988 100644
--- a/inc/formidable_fichiers.php
+++ b/inc/formidable_fichiers.php
@@ -114,3 +114,27 @@ function formidable_deplacer_fichier_emplacement_definitif($fichier, $nom, $id_f
 	}
 
 }
+
+/** 
+ * Fournit à l'utilisateur·trice un fichier qui se trouve normalement dans un endroit inaccessible, par exemple dans config. 
+ * La fonction ne vérifie ni l'existence effective du fichier, 
+ * ni le droit effectif de l'utilisateur.
+ * Ceci doit être fait dans l'action qui appelle cette fonction
+ * @param string $chemin le chemin du fichier
+ * @param string $f le nom du fichier qui sera envoyé à l'utilisateur·trice.
+ *
+**/
+function formidable_retourner_fichier($chemin, $f) {
+			header('Content-Type: '.mime_content_type($chemin));
+			header("Content-Disposition: attachment; filename=\"$f\";");
+			header("Content-Transfer-Encoding: binary");
+			// fix for IE catching or PHP bug issue (inspiré de plugins-dist/dump/action/telecharger_dump.php
+			header("Pragma: public");
+			header("Expires: 0"); // set expiration time
+			header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
+			if ($cl = filesize($chemin)) {
+				header("Content-Length: " . $cl);
+			}
+			readfile($chemin);
+			exit;
+}
diff --git a/lang/formidable_fr.php b/lang/formidable_fr.php
index f7d18f08b524a8d0698647dbe34b42d1ca39839f..445b91a0088d0338048698bebe0d75e5ed76379c 100644
--- a/lang/formidable_fr.php
+++ b/lang/formidable_fr.php
@@ -78,6 +78,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
 	'editer_unicite_label' => 'Vérifier l’unicité d’un champ',
 	'erreur_autorisation' => 'Vous n’avez pas le droit d’éditer les formulaires du site.',
 	'erreur_base' => 'Une erreur technique est survenue durant l’enregistrement.',
+	'erreur_fichier_introuvable' => 'Le fichier demandé est introuvable.', 
 	'erreur_generique' => 'Il y a des erreurs dans les champs ci-dessous, veuillez vérifier votre envoi.',
 	'erreur_identifiant' => 'Cet identifiant est déjà utilisé.',
 	'erreur_identifiant_format' => 'L’identifiant ne peut contenir que des chiffres, lettres et le caractère "_"',