Fix: Les rapports de paiements sont sortis du htdocs.

Fix: Problme de scurit sur le wrapper document.php qui permettait de tlcharger un document sans droits dessus.
This commit is contained in:
Laurent Destailleur 2004-12-28 15:02:48 +00:00
parent 350ef9078a
commit caa59d43ee
3 changed files with 79 additions and 14 deletions

View File

@ -20,6 +20,13 @@
* $Source$
*
*/
/** \file htdocs/compta/paiement/fiche.php
\ingroup facture
\brief Onglet paiement d'un paiement
\version $Revision$
*/
require("./pre.inc.php");
@ -35,8 +42,12 @@ $year = $_GET["year"];
require("../../includes/modules/rapport/pdf_paiement.class.php");
$dir = DOL_DOCUMENT_ROOT."/document/rapport/";
$dir = $conf->compta->dir_output;
/*
* Action générer fichier rapport paiements
*/
if ($_POST["action"] == 'gen')
{
$rap = new pdf_paiement($db);
@ -49,10 +60,10 @@ llxHeader();
/*
*
* Affichage liste des paiements
*
*/
print_titre("Rapport paiements (EN COURS DE DEVELOPPEMENT)");
print_titre("Rapport paiements");
print '<form method="post" action="rapport.php?year='.$year.'">';
print '<input type="hidden" name="action" value="gen">';
@ -100,7 +111,7 @@ for ($formyear = $syear - 2; $formyear < $syear +1 ; $formyear++)
}
}
print "</select>\n";
print '<input type="submit" value="Générer">';
print '<input type="submit" value="'.$langs->trans("Create").'">';
print '</form>';
clearstatcache();
@ -118,15 +129,18 @@ while (($file = readdir($handle))!==false)
if ($year)
{
$handle=opendir($dir.'/'.$year);
print '<table width="100%" id="wiborder">';
print '<tr><td>Rapport</td><td align="right">Taille</td><td align="right">Date de génération</td></tr>';
print '<br>';
print '<table width="100%" class="noborder">';
print '<tr class="liste_titre"><td>Rapport</td><td align="right">'.$langs->trans("Size").'</td><td align="right">'.$langs->trans("Date").'</td></tr>';
$var=true;
while (($file = readdir($handle))!==false)
{
if (substr($file, 0, 8) == 'paiement')
{
$var=!$var;
$tfile = $dir . '/'.$year.'/'.$file;
print '<tr><td><a href="'.DOL_URL_ROOT.'/document/rapport/'.$year.'/'.$file.'">'.$file.'</a></td>';
$relativepath = $year.'/'.$file;
print "<tr $bc[$var]>".'<td><a href="/document.php?modulepart=facture_paiement&file='.urlencode($relativepath).'">'.img_pdf().' '.$file.'</a></td>';
print '<td align="right">'.filesize($tfile). ' bytes</td>';
print '<td align="right">'.strftime("%d %b %Y %H:%M:%S",filemtime($tfile)).'</td></tr>';
}

View File

@ -1,5 +1,6 @@
<?php
/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -21,22 +22,69 @@
*
*/
/**
\file htdocs/document.php
\brief Wrapper permettant le téléchargement de fichier de données Dolibarr
L'appel ancienne méthode (non sécurisée) est document.php?file=pathcompletdufichier
L'appel nouvelle méthode (sécurisée) est document.php?file=pathrelatifdufichier&type=typefichier
\version $Revision$
*/
require_once("main.inc.php");
// C'est un wrapper, donc header vierge
function llxHeader() { }
$original_file = urldecode($_GET["file"]);
$modulepart = urldecode($_GET["modulepart"]);
$type = urldecode($_GET["type"]);
$filename = basename ($original_file);
if ($_GET["type"])
$accessallowed=0;
if ($modulepart)
{
header('Content-type: '.$_GET["type"]);
// On fait une vérification des droits et on définit le répertoire concerné
if ($modulepart == 'facture_paiement')
{
$user->getrights('facture');
if ($user->rights->facture->lire)
{
$accessallowed=1;
}
$original_file=$conf->compta->dir_output.'/'.$original_file;
}
}
else
{
// A terme, on ne doit rien pouvoir télécharger via document.php sans fournir type
// car c'est grace au type qu'on vérifie que les droits et qu'on définit le répertoire racine des fichiers
// \todo Corriger ce trou de sécurité pour ne plus permettre l'utilisation via un nom de fichier complet et sans test de droits
// Pour l'instant, autorise la passage
$accessallowed=1;
}
// Limite accès si droits non corrects
if (! $accessallowed) { accessforbidden(); }
$filename = basename($original_file);
if (! file_exists($original_file)) { dolibarr_print_error(0,$langs->trans("FileDoesNotExist",$original_file)); exit; }
// Les drois sont ok et fichier trouvé
if ($type)
{
header('Content-type: '.$type);
}
else
{
header('Content-type: application/pdf');
}
header('Content-Disposition: attachment; filename="'.$filename.'"');
// The PDF source is in original.pdf
readfile($original_file);
?>

View File

@ -196,6 +196,9 @@ if (defined("MAIN_MODULE_COMMERCIAL"))
if (defined("MAIN_MODULE_COMPTABILITE"))
{
$conf->compta->enabled=MAIN_MODULE_COMPTABILITE;
$conf->compta->dir_output=DOL_DATA_ROOT."/rapport";
$conf->compta->dir_images=DOL_DOCUMENT_ROOT."/images/rapport";
$conf->compta->url_images=DOL_URL_ROOT."/images/rapport";
}
if (defined("MAIN_MODULE_BANQUE"))
{