示例#1
0
文件: valider_xml.php 项目: spip/SPIP
/**
 * 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'));
        }
    }
}
示例#2
0
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);
        }
    }
}