示例#1
0
function safehtml($t)
{
    static $safehtml;
    if (!$t or !is_string($t)) {
        return $t;
    }
    # attention safehtml nettoie deux ou trois caracteres de plus. A voir
    if (strpos($t, '<') === false) {
        return str_replace("", '', $t);
    }
    $t = interdire_scripts($t);
    // jolifier le php
    $t = echappe_js($t);
    if (!isset($safehtml)) {
        $safehtml = charger_fonction('safehtml', 'inc', true);
    }
    if ($safehtml) {
        $t = $safehtml($t);
    }
    return interdire_scripts($t);
    // interdire le php (2 precautions)
}
示例#2
0
/**
 * Empêcher l'exécution de code PHP et JS
 *
 * Sécurité : empêcher l'exécution de code PHP, en le transformant en joli code
 * dans l'espace privé. Cette fonction est aussi appelée par propre et typo.
 *
 * De la même manière, la fonction empêche l'exécution de JS mais selon le mode
 * de protection déclaré par la globale filtrer_javascript :
 * - -1 : protection dans l'espace privé et public
 * - 0  : protection dans l'espace public
 * - 1  : aucune protection
 *
 * Il ne faut pas désactiver globalement la fonction dans l'espace privé car elle protège
 * aussi les balises des squelettes qui ne passent pas forcement par propre ou typo après
 * si elles sont appelées en direct
 *
 * @param string $arg
 *     Code à protéger
 * @return string
 *     Code protégé
 **/
function interdire_scripts($arg)
{
    // on memorise le resultat sur les arguments non triviaux
    static $dejavu = array();
    // Attention, si ce n'est pas une chaine, laisser intact
    if (!$arg or !is_string($arg) or !strstr($arg, '<')) {
        return $arg;
    }
    if (isset($dejavu[$GLOBALS['filtrer_javascript']][$arg])) {
        return $dejavu[$GLOBALS['filtrer_javascript']][$arg];
    }
    // echapper les tags asp/php
    $t = str_replace('<' . '%', '&lt;%', $arg);
    // echapper le php
    $t = str_replace('<' . '?', '&lt;?', $t);
    // echapper le < script language=php >
    $t = preg_replace(',<(script\\b[^>]+\\blanguage\\b[^\\w>]+php\\b),UimsS', '&lt;\\1', $t);
    // Pour le js, trois modes : parano (-1), prive (0), ok (1)
    switch ($GLOBALS['filtrer_javascript']) {
        case 0:
            if (!_DIR_RESTREINT) {
                $t = echappe_js($t);
            }
            break;
        case -1:
            $t = echappe_js($t);
            break;
    }
    // pas de <base href /> svp !
    $t = preg_replace(',<(base\\b),iS', '&lt;\\1', $t);
    // Reinserer les echappements des modeles
    if (defined('_PROTEGE_JS_MODELES')) {
        $t = echappe_retour($t, "javascript" . _PROTEGE_JS_MODELES);
    }
    if (defined('_PROTEGE_PHP_MODELES')) {
        $t = echappe_retour($t, "php" . _PROTEGE_PHP_MODELES);
    }
    return $dejavu[$GLOBALS['filtrer_javascript']][$arg] = $t;
}
示例#3
0
文件: texte.php 项目: rhertzog/lcs
function safehtml($t) {
	static $safehtml;

	# attention safehtml nettoie deux ou trois caracteres de plus. A voir
	if (strpos($t,'<')===false)
		return str_replace("\x00", '', $t);

	$t = interdire_scripts($t); // jolifier le php
	$t = echappe_js($t);

	if (!isset($safehtml))
		$safehtml = charger_fonction('safehtml', 'inc', true);
	if ($safehtml)
		$t = $safehtml($t);

	return interdire_scripts($t); // interdire le php (2 precautions)
}