Bonjour à tous,

Je souhaiterais sécuriser mon code de manière efficace en le protégeant contre les failles XSS et les injections SQL mais je ne sais pas trop comment m'y prendre. Disons j'aimerais savoir quel est le moyen le plus abouti pour protéger au mieux mon code.
De plus je voulais savoir comment optimiser mon code car beaucoup de choses se répètent sous une forme assez semblable (comme par exemple les fonctions de vérification des champs du formulaire dans le fichier traitement.php).
Enfin je souhaiterais que soit le formulaire s'affiche pour y rentrer les données à saisir soit il ne soit plus visible et que seuls les messages d'échec (champs à corriger) ou de succès (envoi à la bdd) s'affichent.


Voici le fichier formulaire.php

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
 
 
<?php include 'traitement.php'; ?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Formulaire</title>
</head>
<body>
 
<form method="post" action="formulaire.php">
 
	<fieldset style="margin:50px">
	<legend><b>Vos coordonn&eacute;es</b></legend>
	<table>
		<tr>
			<td width="220"><label for="nom">Nom :</label></td>
			<td><input type="text" name="nom" value=""/></td>
		</tr>
 
		<tr>
			<td width="220"><label for="prenom">Pr&eacute;nom :</label></td>
			<td><input type="text" name="prenom" value =""/></td>
		</tr>
 
		<tr>
			<td width="220"><label for="adresse">Adresse :</label></td>
			<td><input type="text" name="adresse" value =""/></td>
		</tr>
 
		<tr>
			<td width="220"><label for="code_postal">Code postal :</label></td>
			<td><input type="text" name="code_postal" value=""/></td>
		</tr>
 
		<tr>
			<td width="220"><label for="ville">Ville :</label></td>
			<td><input type="text" name="ville" value=""/></td>
		</tr>
 
		<tr>
			<td width="220"><label for="telephone">T&eacute;l&eacute;phone :</label></td>
			<td><input type="text" name="telephone" value=""/></td>
		</tr>
 
		<tr>
			<td width="220"><label for="fax">Fax :</label></td>
			<td><input type="text" name="fax" value=""/></td>
		</tr>
 
		<tr>
			<td width="220"><label for="email">Email :</label></td>
			<td><input type="text" name="email" value=""/></td>
		</tr>
 
	</table>
	</fieldset>
 
	<fieldset style="margin:50px">
	<legend><b>Vos informations</b></legend>
	<table>
 
		<tr>
			<td width="270"><label for="client">Souhaitez vous une demande de contact ?</label></td>
			<td>
			<input type="radio" name="client" id="client_oui" value="1"/> <label for="client_oui">Oui</label>
			<input type="radio" name="client" id="client_non" value="0"/> <label for="client_non">Non</label>
			</td>
		</tr>
 
			<tr>
			<td width="250"><label for="site[]">Comment avez vous connu le site ?</label></td>
			<td>
 
			<?php while($aData = mysql_fetch_assoc($qSite)){ ?>
				<input type="checkbox" name="site[]" value="<?php echo $aData['id']; ?>" /> <label><?php echo $aData['n_site']; ?></label>
			<?php } ?>
 
			</td>
		</tr>
 
		<tr>
			<td width="270"><label for="demande[]">Quelles sont vos demandes de site ?</label></td>
			<td>
 
			<?php while($aData = mysql_fetch_assoc($qDemande)){ ?>
				<input type="checkbox" name="demande[]" value="<?php echo $aData['id']; ?>" /> <label><?php echo $aData['n_demande']; ?></label>
			<?php } ?>
 
			</td>
		</tr>
 
	</table>
	</fieldset>
 
	<fieldset style="margin:50px">
	<legend><b>Vos options</b></legend>
	<table>
 
		<tr>
			<td width="220"><label for="devis">Demande de devis :</label></td>
			<td>
			<input type="radio" name="devis" id="devis_oui" value="1"/> <label for="devis_oui">Oui</label>
			<input type="radio" name="devis" id="devis_non" value="0"/> <label for="devis_non">Non</label>
			</td>
		</tr>
 
		<tr>
			<td width="220"><label for="contact">Demande de contact :</label></td>
			<td>
			<input type="radio" name="contact" id="contact_oui" value="1"/> <label for="contact_oui">Oui</label>
			<input type="radio" name="contact" id="contact_non" value="0"/> <label for="contact_non">Non</label>
			</td>
		</tr>
 
	</table>
	</fieldset>
 
	<fieldset style="margin:50px">
	<legend><b>Op&eacute;rations</b></legend>
	<table>
		<tr>
			<td width="250"><label for="valider"></label></td>
			<td><input type="submit" value="Valider" name="valider"/></td>
			<td><input type="reset" value="Effacer"></td>
		</tr>
	</table>
	</fieldset>
 
</form>
 
 
</body>
</html>
Et voici le fichier traitement.php

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
 
 
<?php 
 
include ("configuration.php");// connexion à la base de données
 
//------------------------------------------------------
		//Déclaration des variables à poster dans le formulaire
 
		$id=$_POST['id'];
 
		$nom=$_POST['nom'];
			if(isset($nom)){htmlentities($nom, ENT_QUOTES);}
			$nom = mysql_escape_string(htmlspecialchars($nom));  
 
		$prenom=$_POST['prenom'];
			if(isset($prenom)){htmlentities($prenom, ENT_QUOTES);}
			$prenom = mysql_escape_string(htmlspecialchars($prenom));  
 
		$adresse=$_POST['adresse'];
			if(isset($adresse)){htmlentities($adresse, ENT_QUOTES);}
			$adresse = mysql_escape_string(htmlspecialchars($adresse));  
 
		$code_postal=$_POST['code_postal'];
			if(isset($code_postal)){htmlentities($code_postal, ENT_QUOTES);}
			$code_postal = mysql_escape_string(htmlspecialchars($code_postal));  
 
		$ville=$_POST['ville'];
			if(isset($ville)){htmlentities($ville, ENT_QUOTES);}
			$ville = mysql_escape_string(htmlspecialchars($ville));  
 
		$telephone=$_POST['telephone'];
			if(isset($telephone)){htmlentities($telephone, ENT_QUOTES);}
			$telephone = mysql_escape_string(htmlspecialchars($telephone));  
 
		$fax=$_POST['fax'];
			if(isset($fax)){htmlentities($fax, ENT_QUOTES);}
			$fax = mysql_escape_string(htmlspecialchars($fax));  
 
		$email=$_POST['email'];
			if(isset($email)){htmlentities($email, ENT_QUOTES);}
			$email = mysql_escape_string(htmlspecialchars($email));  
 
		$client=$_POST['client'];
			if(isset($client)){htmlentities($client, ENT_QUOTES);}
			$client = mysql_escape_string(htmlspecialchars($client));  
 
		$aSite=$_POST['site'];
		$aDemande=$_POST['demande'];
 
		$devis=$_POST['devis'];
			if(isset($devis)){htmlentities($devis, ENT_QUOTES);}
			$devis = mysql_escape_string(htmlspecialchars($devis));  
 
		$contact=$_POST['contact'];
			if(isset($contact)){htmlentities($contact, ENT_QUOTES);}
			$contact = mysql_escape_string(htmlspecialchars($contact));  
 
//------------------------------------------------------
		//Fonctions de vérification des champs
 
		function VerifierCodePostal($code_postal) 
			{ 
				$SyntaxeCodePostal='`[0-9]{5}`';
				if(preg_match($SyntaxeCodePostal,$code_postal))
			  	   return true; 
			   else 
			       return false; 
			}
 
 
		function VerifierTelephone($telephone) 
			{ 
				$SyntaxeTelephone='`[0-9]{10}`';
				if(preg_match($SyntaxeTelephone,$telephone))
			  	   return true; 
			   else 
			       return false; 
			}
 
 
		function VerifierFax($fax) 
			{ 
				$SyntaxeFax='`[0-9]{10}`';
				if(preg_match($SyntaxeFax,$fax))
			  	   return true; 
			   else 
			       return false; 
			}
 
 
		function VerifierMail($email) 
			{ 
			   $SyntaxeMail='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#'; 
			   if(preg_match($SyntaxeMail,$email)) 
			      return true; 
			   else 
			      return false; 
			}
 
//-----------------------------------------------------------
			// Traitement des données du formulaire
 
	/**
     * 
     * Si formulaire posté Alors
     * 		Si données valide Alors
     * 			enregistrer en base de donnée et dire que ça martche uniquement le message, le formulaire doit disparaitre ! 
     * 		Sinon
     * 			Afficher le formulaire avec les valeurs que l'utilisateurs a inscrites + message que tous les champs ne sont pas valides
     * 		Fin Si
     * Fin Si
     * 
     */
 
			if(isset($_POST['valider'])){
 
			if (isset($nom) && isset($prenom) && isset($adresse) && (VerifierCodePostal($code_postal) == true) && isset($ville) && (VerifierTelephone($telephone) == true) 
			&& (VerifierFax($fax) == true) && (VerifierMail($email) == true) && isset($client) && isset($aSite) && isset($aDemande) && isset($devis) && isset($contact)){
 
				$etat='envoi'; // envoi des données à la bdd avec message de validation
			}
			else{ // tous les champs n'ont pas été remplis donc on affiche un message pour chaque champs du formulaire à ressaisir
 
      // VOS COORDONNEES
 
			if (empty($nom)) {
				echo 'Veuillez saisir votre nom!'."</br>";
			}
			if (empty($prenom)) {
				echo 'Veuillez saisir votre prénom!'."</br>";
			}
			if (empty($adresse)) {
				echo 'Veuillez saisir votre adresse!'."</br>";
			}
 
			//code postal
 
			if (empty($code_postal)) {
				echo 'Veuillez saisir votre code postal!'."</br>";
			}
			else{
				if (VerifierCodePostal($code_postal)==false) 
				  	echo 'Votre code postal n\'est pas valide. Veuillez le resaisir '."</br>";
			}
 
			//ville
 
			if (empty($ville)) {
				echo 'Veuillez saisir votre ville!'."</br>";
			}
 
			//telephone
 
			if (empty($telephone)) {
				echo 'Veuillez saisir votre numéro de telephone!'."</br>";
			}
			else{
				if (VerifierTelephone($telephone)==false)
				  	echo 'Votre numéro de téléphone n\'est pas valide. Veuillez le resaisir '."</br>";
			}
 
			//fax
 
			if (empty($fax)) {
				echo 'Veuillez saisir votre fax!'."</br>";
			}
			else{
				if (VerifierFax($fax)==false)
				  	echo 'Votre numéro de fax n\'est pas valide. Veuillez le resaisir '."</br>";
			}
 
			//email
 
			if (empty($email)) {
				echo 'Veuillez saisir votre email!'."</br>";
			}
			else{
				if (VerifierMail($email)==false) 
				  	echo 'Votre email n\'est pas valide. Veuillez le resaisir '."</br>";
			}
 
	    // VOS INFORMATIONS
 
			//client
 
			if (empty($client)) {
				echo 'Veuillez préciser si vous êtes client de l\'entreprise!'."</br>";
			}
 
			//site
 
			if (empty($aSite)) {
				echo 'Veuillez préciser comment vous avez connu le site!'."</br>";
			}
 
			//demande
 
			if (empty($aDemande)) {
				echo 'Veuillez préciser votre demande de site!'."</br>";
			}
 
	  //VOS OPTIONS
 
    		//devis
 
			if (empty($devis)) {
				echo 'Veuillez préciser votre demande de devis!'."</br>";
			}
 
			//contact	
 
			if (empty($contact)) {
				echo 'Veuillez préciser votre demande de contact!'."</br>";
			}
		}
	}
 
//----------------------------------------------------------------------------
			// Gestion affichage des checkbox site et demande dans formulaire et dans bdd
 
				//site
 
	    	$sSQL = "SELECT n_site FROM site ORDER BY n_site" ;
			$qSite = mysql_query($sSQL);
 
 
			$sSQLSite = "SELECT * FROM site ORDER BY n_site";
			$qSite = mysql_query($sSQLSite);
 
 
				//demande
 
    		$sSQL = "SELECT n_demande FROM demande ORDER BY n_demande" ;
			$qDemande = mysql_query($sSQL);
 
			$sSQLDemande = "SELECT * FROM demande ORDER BY n_demande";
			$qDemande = mysql_query($sSQLDemande);
 
//----------------------------------------------------------------------------
			// Cas état envoi
	if($etat=='envoi'){ // si toutes les données sont remplies et valides, envoi des données dans la bdd 
 
 
		    $sql = "INSERT INTO formulaire(id, nom, prenom, adresse, code_postal, ville, telephone, fax, email, devis, contact) 
	    	VALUES('','$nom','$prenom','$adresse','$code_postal','$ville','$telephone','$fax','$email', '$devis', '$contact')";
 
	   		mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
 
		  	$id_formulaire = mysql_insert_id();// on récupère l'id_formulaire qui vient d'être généré
 
 
		if(isset($aSite)){
			foreach($aSite as $n_site){
 
	        $sql = "INSERT INTO siteformulaire(id_formulaire, id_site) VALUES ('$id_formulaire','$n_site')";
	        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
				}
			}
 
 
		if(isset($aDemande)){
			foreach($aDemande as $n_demande){
 
			$sql = "INSERT INTO demandeformulaire(id_formulaire, id_demande) VALUES ('$id_formulaire','$n_demande')";
	        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
				}
			}
 
	    	echo "les données sont enregistrées dans la base de données";
			}
 
?>
N'hésitez pas à me poser des questions sur mon code car je ne prétend pas avoir utilisé forcément les meilleures méthodes.

Merci