Sécurisation de mon livre d'or avec htmlspecialchars et st

ViPHP
xTG
ViPHP | 7331 Messages

26 août 2013, 17:14

$newmessage = censorWords($find,$message);
Mais dans $page tu concatènes $message. ;)

Eléphanteau du PHP | 40 Messages

26 août 2013, 18:37

Oui mais non, je me suis trompé de copier coller avec une ancienne version j'ai bien dans le fichier de test
$page .= "&nbsp;<b>$newnom</b> &nbsp; ($newmail)<br> &nbsp;le:&nbsp; $d<br>&nbsp;$newmessage<br><hr>\r\n";]
je pense à une chose, cela peut-il venir du code de repérage des insultes qui s'arrêterait en ayant trouvé une réponse ?
en visual basic excel je ferais une boucle je suis pas encore assez calé pour en juger en php voici le code
function censorWords($find=array(),$text=null){
$replace = ' **** ';
return preg_replace($find,$replace,$text);
}

/*liste des mots a filtrer ou expression */
$file = 'guestbook.txt';
$find = array(
'/ggggggg gg gggggg\s/i',
'/ggg\s/i',
'/ggggggg\s/i',
'/gg ggggggg\s/i',
'/ggggggggggggggggggg\s/i',
);
$newmail = censorWords($find,$mail);
$newnom = censorWords($find,$nom);
$newmessage = censorWords($find,$message);

qu'en penses tu ?

ViPHP
xTG
ViPHP | 7331 Messages

26 août 2013, 20:01

Je ne suis pas très à l'aise avec les PRCE donc je n'avais pas répondu en espérant que Moogli ou autre te réponde. ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 août 2013, 14:28

=> prce : aucun interet ici str_replace peux largement faire l'affaire (voir str_ireplace pour faire bien :)

quel est l’intérêt de faire un htmlspecialchars_decode juste après un htmlentities ? => aucun :)

je ferais un truc dans le genre (a tester)
<?php
/**
 * censure
 * @param array $bl
 * @param string $text
 * @return mixed
 */
function censorWords($bl, $text) {
    if (!is_array($bl)) {
        trigger_error('La liste des mots à censurer doit être un tableau!', E_USER_WARNING);
        return false;
    }
    $replace = ' **** ';
    return str_ireplace($bl, $replace, $text);
}

/**
 * nettoie un tableau
 * @param array $array
 */
function sanitizeArray($array) {
    if (!is_array($array)) {
        trigger_error('Tableau obligatoire en entrée !', E_USER_WARNING);
        return false;
    }

    $final = [];
    foreach ($array as $key => $value) {
        // si magic_quote activée stripslashes
        if (get_magic_quotes_gpc() === true) {
            $value = htmlspecialchars(stripslashes($value));
        }
        // remplacement caractères spéciaux par entité html. 
        $value = htmlspecialchars($value);

        $final[$key] = censorWords([], $value);
    }
    return $final;
}
// Nettoyage des données
$data = sanitizeArray($_POST);

$d = date("d/m/Y H:i:s");

$page = '&nbsp;<span style="font-weight:bold;">'.$data['nom'].'</span>&nbsp; ('.$data['email'].') <br/>&nbsp;le:&nbsp;'
    .$d.'<br/>&nbsp;'.$data['message'].'<br/><hr/>'.PHP_EOL;

//On rajoute le message dans le fichier
file_put_contents("/htdocs/livredor/guestbook.txt", $page, FILE_APPEND | LOCK_E);
include("guestbook.php");// pour ?
Il en faut peu pour être heureux ......