/** * Page d'affichage des résultats de validation XML selon une DTD * * - l'argument var_url peut indiquer un fichier ou un repertoire * - l'argument ext peut valoir "php" ou "html" * -- Si "php", le script est execute et la page valide * -- Si "html", on suppose que c'est un squelette dont on devine les args * en cherchant les occurrences de Pile[0]. * * @example * ``` * ecrire?exec=valider_xml&var_url=exec&ext=php pour tester l'espace prive * ecrire?exec=valider_xml&var_url=../squelettes-dist&ext=html pour le public * ``` * * @uses valider_xml_ok() **/ function exec_valider_xml_dist() { if (!autoriser('sauvegarder')) { include_spip('inc/minipres'); echo minipres(); } else { $erreur = ""; // verifier que les var de l'URL sont conformes avant d'appeler la fonction $url = trim(_request('var_url')); if (strncmp($url, '/', 1) == 0) { $erreur = 'Chemin absolu interdit pour var_url'; } // on a pas le droit de remonter plus de 1 fois dans le path (pas 2 occurences de ../) if (($p = strpos($url, '../')) !== false and strpos($url, '../', $p + 3) !== false) { $erreur = 'Interdit de remonter en dehors de la racine'; } $ext = trim(_request('ext')); $ext = ltrim($ext, '.'); // precaution if (preg_match('/\\W/', $ext)) { $erreur = 'Extension invalide'; } if ($erreur) { include_spip('inc/minipres'); echo minipres($erreur); } else { valider_xml_ok($url, $ext, intval(_request('limit')), _request('recur')); } } }
function exec_valider_xml_dist() { if (!autoriser('sauvegarder')) { include_spip('inc/minipres'); echo minipres(); } else valider_xml_ok(_request('var_url'), _request('ext'), intval(_request('limit')), _request('recur')); }
/** * Page d'affichage des résultats de validation XML selon une DTD * * - l'argument var_url peut indiquer un fichier ou un repertoire * - l'argument ext peut valoir "php" ou "html" * -- Si "php", le script est execute et la page valide * -- Si "html", on suppose que c'est un squelette dont on devine les args * en cherchant les occurrences de Pile[0]. * * @example * ``` * ecrire?exec=valider_xml&var_url=exec&ext=php pour tester l'espace prive * ecrire?exec=valider_xml&var_url=../squelettes-dist&ext=html pour le public * ``` * * @uses valider_xml_ok() **/ function exec_valider_xml_dist() { if (!autoriser('webmestre')) { include_spip('inc/minipres'); echo minipres(); } else { $erreur = ""; // verifier que les var de l'URL sont conformes avant d'appeler la fonction $url = trim(_request('var_url')); if (strncmp($url, '/', 1) == 0) { $erreur = 'Chemin absolu interdit pour var_url'; } // on a pas le droit de remonter plus de 1 fois dans le path (pas 2 occurences de ../ ou ..\ (win)) if (($p = strpos($url, '..')) !== false and strpos($url, '..', $p + 3) !== false) { $erreur = 'Interdit de remonter en dehors de la racine'; } if (strpos($url, '://') !== false or strpos($url, ':\\') !== false) { $erreur = 'URL absolue interdite pour var_url'; } $ext = trim(_request('ext')); $ext = ltrim($ext, '.'); // precaution if (preg_match('/\\W/', $ext)) { $erreur = 'Extension invalide'; } // en GET var_url doit etre signee, en POST seule l'action est signee // CSRF safe $process = true; if ($url) { include_spip('inc/securiser_action'); if ($_SERVER["REQUEST_METHOD"] == 'POST') { if (!($token = _request('var_token')) or !verifier_cle_action("valider_xml", $token)) { $process = false; } } if ($_SERVER["REQUEST_METHOD"] != 'POST') { if (!($token = _request('var_token')) or !verifier_cle_action("valider_xml&var_url={$url}", $token)) { $process = false; } } } if ($erreur) { include_spip('inc/minipres'); echo minipres($erreur); } else { valider_xml_ok($url, $ext, intval(_request('limit')), _request('recur'), $process); } } }