Bonjour à toutes et à tous,


Je viens vers vous pour vous présenter mon problème actuel sur la sécurisation de mon livre d'or.
historiquement parlant, j'ai ajouté stripslashes pour que mon texte soit lisible avec à ç é à et ' et non \' .
Ensuite j'ai donc ajouté htmlspecialchars pour éviter l'envoi de code html dans le message, voici mon code.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<!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 = "";
 
$newmail = $mail;
$newnom = $nom;
$newmessage = $message;
 
$page .= "&nbsp;<b>$newnom</b> &nbsp; ($newmail)$d<br> &nbsp;le:&nbsp; $d<br>&nbsp;$newmessage<br><hr>\n";
 
//On rajoute le message
 
fwrite($fp,"$page" ,strlen("$page"));
 
//fermeture du fichier
 
fclose($fp);
 
?>
 
<?php include("guestbook.php"); ?>
</body>
</html>
Mon problème vient du fait que mon module anti-insulte ne trouve qu'un seul mot et ne recherche pas les autres ( je parle de ceux qui sont renseignés évidement dans la liste ),

voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
j'ai testé avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$newmessage = 1;
echo $newmessage;
var_dump($newmessage);
et j'obtient sur mon test
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)string(288) "
Merci par avance à toutes celles ou tout ceux qui m'aideront
bonne journée à tous