conseil pour un formulaire avec pièce jointe
Posté : 23 sept. 2010, 12:57
Bonjour à tous,
je me tourne vers vous pour la réalisation d'un formulaire avec pièce jointe , si vous pouviez m'indiquer en matière de sécurité les différents point à prendre en compte et m'aider à comprendre mes erreurs .
A l'heure actuel je n'ai pas encore fais de vérification de ce formulaire car j'hésite sur un vérif tout en php ou avec du javascript ...
Quand je teste à l'état actuel j'ai ces erreurs ci :
Warning: fread(): supplied argument is not a valid stream resource et Warning: fclose(): supplied argument is not a valid stream resource qui serait dû à des droits d'écriture sur le fichier du serveur de mon hébergeur donc j'ai mis les droits d'écriture sur ce dernier mais rien y faire je reçois toujours la même erreur
le formulaire
je me tourne vers vous pour la réalisation d'un formulaire avec pièce jointe , si vous pouviez m'indiquer en matière de sécurité les différents point à prendre en compte et m'aider à comprendre mes erreurs .
A l'heure actuel je n'ai pas encore fais de vérification de ce formulaire car j'hésite sur un vérif tout en php ou avec du javascript ...
Quand je teste à l'état actuel j'ai ces erreurs ci :
Warning: fread(): supplied argument is not a valid stream resource et Warning: fclose(): supplied argument is not a valid stream resource qui serait dû à des droits d'écriture sur le fichier du serveur de mon hébergeur donc j'ai mis les droits d'écriture sur ce dernier mais rien y faire je reçois toujours la même erreur
le formulaire
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>contact</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="chargement.php">
<fieldset>
<legend>Contact</legend>
<hr/>
<label for="nom">Nom :</label><br/>
<input type="text" name="nom" tabindex="1"/>
<br />
<label for="prenom">Prenom : </label><br />
<input type="text" name="prenom" size="30" tabindex="2"/>
<br />
<label>email : </label><br />
<input type="text" name="email"size="30" tabindex="3"/>
<br /><br />
<label>Service à contacter : </label><br />
<select name="service">
<option value="information">Information</option>
<option value="sav">Service apres vente </option>
<option value="daf">Finances</option>
<option value="test">Test</option>
</select>
<br /><br />
<label>Dossier client:</label><br />
oui<input type="radio" name="dossier[] " value="oui" onClick="document.getElementById('div_client').style.display='none'; document.getElementById('div_client').style.display='block';"/>
non<input type="radio" name="dossier[] " value="non" onClick="document.getElementById('div_client').style.display='block'; document.getElementById('div_client').style.display='none';"/>
<br/><br/>
<div id="div_client" style="display:none;">
<label> numero de dossier </label> <br/>
<input type="text" name="client" />
</div>
<br />
<label>sujet : </label><br />
<input type="text" name="sujet"size="30" tabindex="4"/>
<br />
<br />
<label>Commentaire</label><br/>
<textarea name="message" cols="60" rows="8"/>
</textarea>
<input type="hidden" name="MAX_FILE_SIZE" value="30000"/>
<br/><br/>
<label>Fichier à envoyer </label><br/>
<input type="file" name="fichier_utilisateur" size="60"/>
<br/>
<br /><br />
<input type="submit" name="transfert" value="Envoyer"/>
</fieldset>
</form>
</body>
</html>
le fichier de chargement <?php
//declaration variable
$nom = stripslashes ($_POST['nom']);
$prenom = stripslashes( $_POST['prenom']);
$email = stripslashes ($_POST['email']);
//verification des adresse mail
if(!in_array($serviceMail,array("information","juriste","association","test"))){$serviceMail="information";}
$serviceMail= array("information","juriste","association","test");
foreach($serviceMail as $var)
{
$array[$var] = $_POST['Array'][$var];
}
$dossier=$_POST['dossier[]'];
$client=stripslashes ($_POST['client']);
$sujet=stripslashes ($_POST['sujet']);
$commentaire=stripslashes ($_POST['commentaire']);
$fichier=$_POST['fichier'];
$upload=$_POST['upload'];
$to="[email protected]";
if( isset($_POST['upload']) ) // si formulaire soumis
{
$content_dir = 'upload/'; // dossier où sera déplacé le fichier
$tmp_file = $_FILES['fichier_utilisateur']['tmp_name'];
if( !is_uploaded_file($tmp_file) )
{
exit("Le fichier est introuvable");
}
// on vérifie maintenant l'extension
$extensions_ok = array('pdf', 'doc', 'jpg', 'jpeg');
$type_file = $_FILES['fichier']['type'];
if( !in_array( substr(strrchr($_FILES['fichier_utilisateur']['name'], '.'), 1), $extensions_ok ) )
{
$erreur = 'Veuillez sélectionner un fichier de type pdf, doc, jpeg ou jpg !';
}
// on copie le fichier dans le dossier de destination
$name_file = $_FILES['fichier_utilisateur']['name'];
if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
}
echo "Le fichier a bien été uploadé";
}
//=====Lecture et mise en forme de la pièce jointe
$fichier1 = fopen($fichier, "r+" );
$attachement = fread($fichier1, filesize($fichier));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========
//=====Création de la boundary
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========
//=====Création du header de l'e-mail
$header = "From: $email\n";
$header.= "Reply-to: $emai\n";
$header.= "MIME-Version: 1.0\n";
$header.= "Content-Type: multipart/mixed;\n boundary=\"$boundary\"\n";
//==========
//=====Création du message
$message = "\n--".$boundary."\n";
$message = "--" . $boundary . "\n";
$message .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";
$message .= "<html><body>
<h3 style='font-family: Maiandra GD; color:red;text-decoration:underline;text-indent:30px;' >".$client." </h3>
<p style='font-family: Maiandra GD;text-align:justify;' >" .$commentaire. "</p>
</body></html>";
$message .= "\n";
$message.= "Content-Type: multipart/alternative;\n boundary=\"$boundary_alt\"\n";
$message.= "\n--".$boundary_alt."\n";
//=====On ferme la boundary alternative
$message.= "\n--".$boundary_alt."--\n";
//==========
$message.= "\n--".$boundary."\n";
//=====Ajout de la pièce jointe
$message.= "Content-Type: application/pdf;\n name=\"$fichier\"\n";
$message.= "Content-Transfer-Encoding: base64\n";
$message.= "Content-Disposition: attachment;\n filename=\"$fichier\"\n";
$message.= "\n".$attachement."\n\n";
$message.= "\n--".$boundary."--\n";
//==========
//=====Envoi de l'e-mail
mail($to,$sujet,$message,$header);
?>
Merci par avance pour vos réponses apportés