Skip to content
Extraits de code Groupes Projets
Valider c96d5509 rédigé par maieul@maieul.net's avatar maieul@maieul.net
Parcourir les fichiers

création du repertoire pour stocker les fichiers, et vérification de sa sécurité

parent 72547e0d
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -62,6 +62,7 @@ images/formulaire-reponses-exporter-24.png -text ...@@ -62,6 +62,7 @@ images/formulaire-reponses-exporter-24.png -text
images/formulaire-reponses-supprimer-24.png -text images/formulaire-reponses-supprimer-24.png -text
images/formulaire-supprimer-24.png -text images/formulaire-supprimer-24.png -text
inc/formidable.php -text inc/formidable.php -text
inc/formidable_fichiers.php -text
inc/rechercher_joints_formulaires_reponse_formulaires_reponses_champ.php -text inc/rechercher_joints_formulaires_reponse_formulaires_reponses_champ.php -text
lang/formidable.xml -text lang/formidable.xml -text
lang/formidable_ar.php -text lang/formidable_ar.php -text
......
...@@ -6,6 +6,7 @@ if (!defined('_ECRIRE_INC_VERSION')) { ...@@ -6,6 +6,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
} }
include_spip('inc/formidable'); include_spip('inc/formidable');
include_spip('inc/formidable_fichiers');
function formulaires_editer_formulaire_traitements_charger($id_formulaire) { function formulaires_editer_formulaire_traitements_charger($id_formulaire) {
$contexte = array(); $contexte = array();
...@@ -97,7 +98,13 @@ function formulaires_editer_formulaire_traitements_traiter($id_formulaire) { ...@@ -97,7 +98,13 @@ function formulaires_editer_formulaire_traitements_traiter($id_formulaire) {
} }
$traitements_choisis = array_flip($traitements_choisis); $traitements_choisis = array_flip($traitements_choisis);
$traitements = array_intersect_key($traitements, $traitements_choisis); $traitements = array_intersect_key($traitements, $traitements_choisis);
// Si besoin, on créeun dossier pour stocker les fichiers
$erreur_creation_dossier = formidable_creer_dossier_formulaire($id_formulaire);
if ($erreur_creation_dossier) {
$retours['message_erreur'] = $erreur_creation_dossier;
}
// Et on l'enregistre tel quel // Et on l'enregistre tel quel
$ok = sql_updateq( $ok = sql_updateq(
'spip_formulaires', 'spip_formulaires',
......
<?php
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/flock');
if (!defined('_DIR_FICHIERS')) { // En attendant que ce soit natif spip
define ('_DIR_FICHIERS', _DIR_ETC . 'fichiers/');
}
if (!defined('_DIR_FICHIERS_FORMIDABLE')) {
define ('_DIR_FICHIERS_FORMIDABLE', _DIR_FICHIERS . 'formidable/');
}
/**
* Créer, si le formulaire contient des saisies de type fichiers, un dossier pour stocker les fichiers.
* Vérifier que ce dossier soit accessible en écriture.
* Vérifier qu'on ne puisse pas y accéder de l'exterieur.
*
* @param $id_formulaire
* @return $erreur
**/
function formidable_creer_dossier_formulaire($id_formulaire) {
include_spip('formulaires/formidable');
$saisies_fichiers = formulaires_formidable_fichiers($id_formulaire); // Récuperer la liste des saisies de type fichier
if (!is_array($saisies_fichiers) or $saisies_fichiers == array ()) {//pas de saisie fichiers?
return '';
}
$nom_dossier = "formulaire_$id_formulaire";
// On crée le dossier
sous_repertoire(_DIR_FICHIERS,'',true,true);
sous_repertoire(_DIR_FICHIERS_FORMIDABLE,'',true,true);
$dossier = sous_repertoire(_DIR_FICHIERS_FORMIDABLE, $nom_dossier, false, true);
if (strpos($dossier, "$nom_dossier/") === False) {
return _T('formidable:creer_dossier_formulaire_erreur_impossible_creer',
array('dossier'=>_DIR_FICHIERS_FORMIDABLE . $nom_dossier)
);
}
// on créer un fichier de test, pour s'assurer 1. Qu'on puisse écrire dans le rep 2. Qu'on ne puisse pas accéder à ce fichier depuis l'exterieur.
$fichier = $dossier."test.txt";
$ecriture_ok = ecrire_fichier($fichier, "Ce fichier n'est normalement pas lisible de l'extérieur. Si tel est le cas, il y a un souci de confidentialité.",false);
if ($ecriture_ok == False) {
return _T('formidable:creer_dossier_formulaire_erreur_impossible_ecrire',
array('dossier'=>_DIR_FICHIERS_FORMIDABLE . $nom_dossier)
);
}
include_spip('inc/distant');
$url = url_absolue($fichier);
if (recuperer_page ($url)) { // si on peut récuperer la page avec un statut http 200, c'est qu'il y a un problème. recuperer_page() est obsolète en 3.1, mais recuperer_url() n'existe pas en 3.0
return _T('formidable:creer_dossier_formulaire_erreur_possible_lire_exterieur',
array('dossier'=>_DIR_FICHIERS_FORMIDABLE . $nom_dossier)
);
}
// Et si tout va bien
return '';
}
...@@ -40,7 +40,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( ...@@ -40,7 +40,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'cfg_titre_parametrages_analyse' => 'Paramétrages de l’analyse des réponses', 'cfg_titre_parametrages_analyse' => 'Paramétrages de l’analyse des réponses',
'champs' => 'Champs', 'champs' => 'Champs',
'changer_statut' => 'Ce formulaire est :', 'changer_statut' => 'Ce formulaire est :',
'creer_dossier_formulaire_erreur_impossible_creer' => 'Impossible de créer le dossier @dossier@, nécessaire pour stocker les fichiers. Vérifier les droits d\'accès.',
'creer_dossier_formulaire_erreur_impossible_ecrire' => 'Impossible d\'écrire dans le @dossier@, nécessaire pour stocker les fichiers. Vérifier les droits d\'accès.',
'creer_dossier_formulaire_erreur_possible_lire_exterieur' => 'Il est possible de lire à distance le contenu du dossier @dossier@. Ceci est problématique en terme de confidentialité des données.',
// E // E
'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)', 'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)', 'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter