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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Sécurisation de mon livre d'or avec htmlspecialchars et st

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

par moogli » 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 ?

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

par xTG » 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. ;)

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

par scoubi » 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 ?

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

par xTG » 26 août 2013, 17:14

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

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

par scoubi » 26 août 2013, 16:58

Après l'intégration du code dans ma page, voici le résultat.

texte de test, c'est bon pour les accents, le code html affiché est pas actif mais il n'y a qu'une seule insulte j'obtient bien dans la chaine ***** mais pas la deuxième insulte donc le livre d'or affiche que l'une des deux insultes masquée
petit test pour reprendre l'encodage de la fonction htmlspecialchars combinée avec la fonction stripslashes. petit test code html <a href="#top">top</a> test des caractères spéciaux : "'"'((__àç_é&=)àç, et des insultes **** et en plus tu es un xxxxstring(288) " petit test pour reprendre l'encodage de la fonction htmlspecialchars combinée avec la fonction stripslashes. petit test code html <a href="#top">top</a> test des caractères spéciaux : "'"'((__àç_é&=)àç, et des insultes **** et en plus tu es un ( modéré par moi )"
et voici dsans le livre d'or
ddd (ddddd)
le: 26/08/2013 17:16:38
petit test pour reprendre l'encodage de la fonction htmlspecialchars combinée avec la fonction stripslashes. petit test code html <a href="#top">top</a> test des caractères spéciaux : "'"'((__àç_é&=)àç, et des insultes **** et en plus tu es un ( modéré manuellement)

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

par xTG » 26 août 2013, 15:52

Pas de echo, var_dump est une fonction qui renvoie directement sur le buffer de sortie.
$var = 1;
echo $var;
var_dump($var);

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

par scoubi » 26 août 2013, 13:08

merci pour ta réponse,

je teste cela ce soir et je te dis, je vais donc rajouter en bas de mon code
echo {var_dump($newmessage));
        echo {var_dump($message));
un grand merci pour ton aide

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

par xTG » 26 août 2013, 11:57

C'est cela.

Pour ton problème de debug tu peux installer un serveur en local.
Sous windows tu as par exemple WAMP qui t'installe tous les outils nécessaires (PHP, Apache, MySQL, PhpMyAdmin, ect).

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

par scoubi » 26 août 2013, 08:57

Je suis débutant et j'ai pas encore installé un système me permettant de visualiser sans envoyer sur mon ftp, j'écris dans htmledit, par ailleurs si tu connais un logiciel pour cela qui m'éviterait d'uploader sans arrêt ou une méthode !!!

si j'ai bien compris tu veux que je rajoute
var_dump($message); 
var_dump($newmessage);
dans ma page pour voir ce qu'il y a dans la variable après traitement de cette dernière ?

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

par xTG » 26 août 2013, 07:33

Que te donnes un var_dump() de la variable après passage dans htmlspecialchars ?

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

par scoubi » 25 août 2013, 21:54

Toutes mes excuses moogli,

J'ai effectivement oublié de masquer la petite bibliothèque je vais corriger cela immédiatement, je renouvelle donc mes plus plates escuses
voici mon code:

Code : Tout sélectionner

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <head> <meta name="description" CONTENT=""> <meta HTTP-EQUIV="IMAGETOOLBAR" content="no" SCROLLING="yes" > <meta name="keywords" CONTENT=""> <head> <title></title> </head> <body> <?php //Ouverture du fichier en écriture $fp = fopen("/htdocs/livredor/guestbook.txt",a); //On convertit les caracteres html echo htmlspecialchars_decode(htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1')); $nom = htmlspecialchars(stripslashes($_POST['nom'])); $mail = htmlspecialchars(stripslashes($_POST['mail'])); $message = htmlspecialchars(stripslashes($_POST['message'])); $d = date ( "d/m/Y H:i:s" ); 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); $page = ""; $lemail = $mail; $page .= "&nbsp;<b>$nom</b> &nbsp; ($lemail)$d<br> &nbsp;le:&nbsp; $d<br>&nbsp;$message<br><hr>\n"; //On rajoute le message fwrite($fp,"$page" ,strlen("$page")); //fermeture du fichier fclose($fp); ?> <?php include("guestbook.php"); ?> </body> </html>
Je veux donc pour que mon texte soit lisible afficher à ç é à et ' et non \' donc j'ai utilisé stripslashes

Code : Tout sélectionner

//On convertit les caracteres html echo htmlspecialchars_decode(htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1')); $nom = stripslashes ($_POST['nom']); $mail = stripslashes ($_POST['mail']); $message = stripslashes ($_POST['message']); $d = date ( "d/m/Y H:i:s" );
ensuite j'ai intégré un module pour éviter les insultes éventuelles postées dans le livre d'or

Code : Tout sélectionner

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);
Les deux combinés fonctionnent à merveille

En voulant optimiser la sécurité et les messages avec des scripts html... j'ai donc effectué une recherche et trouvé htmlspecialchars.

j'ai donc modifié mes déclarations nom, email, message comme ceci

Code : Tout sélectionner

echo htmlspecialchars_decode(htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1')); $nom = htmlspecialchars(stripslashes($_POST['nom'])); $mail = htmlspecialchars(stripslashes($_POST['mail'])); $message = htmlspecialchars(stripslashes($_POST['message']));
j'ai donc les caractères et le fait de ne plus rendre actif un script qui fonctionne, mais plus le remplacement des insultes !!!
y aurait-il une incompatibilité entre htmlspecialchars et la détection ?

Merci pour ta réponse par avance

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

par moogli » 25 août 2013, 20:42

Modération :
Merci de faire attention à ce que l'on poste sur le forum.
Tu a un système de censure c'est bien mais ce n'est pas la peine d'étaler la liste sur le forum.
Tu peux utiliser le liste http://fr.lipsum.com pour trouver du contenu.


Montre nous le code exact et complet de la partie quid tu test et indique le départ et le résultat ce sera plus simple.


@+

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

par scoubi » 25 août 2013, 20:02

Merci,

ça fonctionne parfaitement mais par contre ceci ne fonctionne plus !!!
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(
);
$newmail = censorWords($find,$mail);
$newnom = censorWords($find,$nom);
$newmessage = censorWords($find,$message);
afin d'éviter des insultes, le fait d'avoir rajouter htmlspecialchars peut-il faire cela ?

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

par xTG » 25 août 2013, 19:18

$nom = htmlspecialchars(stripslashes($_POST['nom']));
Voilà la syntaxe que j'utiliserai. :)

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

par scoubi » 25 août 2013, 17:03

non ce n'est pas un copier coller,
je n'arrive pas à combiner les deux j'ai une erreur sur la ligne concernée ( Parse error: syntax error, unexpected ';' in /htdocs/livredor/writeguest.php on line 36 ),
comment combiner htmlspecialchars (pour éviter des scripts dans le message ) et conserver stripslashes ( pour éviter \' à la place des accents ) et trim pour Supprimer les espaces (ou d'autres caractères) en début et fin de chaîne ?
voici une partie de mon code afin de te prouver que ce n'est pas un copier coller !!!
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<head>

<meta name="description" CONTENT="">
<meta HTTP-EQUIV="IMAGETOOLBAR" content="no" SCROLLING="yes" >
<meta name="keywords" CONTENT="">
<head>

  <title></title>

</head>
<body>


<?php

//Ouverture du fichier en écriture

$fp = fopen("/htdocs/livredor/guestbook.txt",a);






//On convertit les caracteres html

echo htmlspecialchars_decode(htmlentities($chaine, ENT_NOQUOTES, 'ISO-8859-1'));

$nom = stripslashes ($_POST['nom']);

$mail = stripslashes ($_POST['mail']);

$message = stripslashes ($_POST['message']);
$file = 'guestbook.txt';
je te remercie par avance de ta réponse