Livre d'or sql piraté

Résolu
LLorina Messages postés 347 Statut Membre -  
LLorina Messages postés 347 Statut Membre -
Bonjour,

J'ai réalisé un site pour une amie Kinésiologue. Pour la gestion des messages déposés sur le livre d'or, j'ai créé une base de données SQL mais je n'ai pas l'habitude des bases SQL, il se peut que des erreurs trainent d'où cette intrusion... ? Je m'étais aidé d'un code trouvé sur internet pour ça.

En passant par hasard aujourd'hui, je me rends compte que le livre d'or a été piraté (ou hacké).
J'ai tout vidé ma table livredor SQL car il y avait 30 000 messages dessus avec des liens, des phrases en anglais de tout type...

Voici le code, pourriez(vous m'aider à trouver mon erreur qui aurait provoqué cette intrusion ou qu'est-ce qui aurait été rajouté à mon insu ?

J'ai juste un gros doute sur
<SCRIPT language="javascript">
function popup(page,nom,option) {
window.open(page,nom,option); }
</SCRIPT>
car je ne me souviens pas de l'avoir mis...
Qu'en pensez-vous ?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<title>
			Kinésiologie - Relaxation 30 : Médecine Douce
		</title>

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

	<link rel="stylesheet" type="text/css" href="style.css" title="défaut">
<SCRIPT language="javascript">
function popup(page,nom,option) {
window.open(page,nom,option); }
</SCRIPT>


	</head>
	<body lang="fr">
	<div id="page">
		<div id="entete"><?php include("entete.php");?></div>
		<div id="contenu">
			<div id="menuGauche"><?php include("menuGauche2.php");?></div> 
			<div id="texte">
				<h1>Livre d'Or</h1>
					<form method="post" action="livredor.php">
						<p>Un avis sur mon site ? Exprimez-vous ici !</p>
						<p>
						Pseudo : <input name="pseudo" /><br />
						E-mail : <input name="email" /><br />
						Message :<br />
						<textarea name="message" rows="8" cols="35"></textarea><br />
						<input type="submit" value="Envoyer" />
						</p>
					</form>
 
					<p class="pages">
					<?php
						mysql_connect("base", "utilisateur", "mdp");
						mysql_select_db("utilisateur");
 
						// --------------- Étape 1 -----------------
						// Si un message est envoyé, on l'enregistre
						// -----------------------------------------
 
						if (isset($_POST['pseudo']) AND isset($_POST['message']))
						{
							$date=date("Y-m-d H:i");
							$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
							$email = mysql_real_escape_string(htmlspecialchars($_POST['email']));
							$message = mysql_real_escape_string(htmlspecialchars($_POST['message'])); // De même pour le message
							$message = nl2br($message); // Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br />
 
							// On peut enfin enregistrer :o)
							mysql_query("INSERT INTO livredor VALUES('', '" . $pseudo . "', '" . $message . "', '". $date . "', '" . $email . "')");
						}
 
						// --------------- Étape 2 -----------------
						// On écrit les liens vers chacune des pages
						// -----------------------------------------
 
						// On met dans une variable le nombre de messages qu'on veut par page
						$nombreDeMessagesParPage = 30; // Essayez de changer ce nombre pour voir :o)
						// On récupère le nombre total de messages
						$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livredor');
						$donnees = mysql_fetch_array($retour);
						$totalDesMessages = $donnees['nb_messages'];
						// On calcule le nombre de pages à créer
						$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
						// Puis on fait une boucle pour écrire les liens vers chacune des pages
						echo 'Page : ';
						for ($i = 1 ; $i <= $nombreDePages ; $i++)
						{
							echo '<a href="livredor.php?page=' . $i . '">' . $i . '</a> ';
						}
					?>
					</p>
 
					<?php
 
						// --------------- Étape 3 ---------------
						// Maintenant, on va afficher les messages
						// ---------------------------------------
 
						if (isset($_GET['page']))
						{
							$page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livredor.php?page=4)
						}
						else // La variable n'existe pas, c'est la première fois qu'on charge la page
						{
							$page = 1; // On se met sur la page 1 (par défaut)
						}
 
						// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
						$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
 
						$reponse = mysql_query('SELECT * FROM livredor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);

						while ($donnees = mysql_fetch_array($reponse))
						{
							echo '<p><strong>' . $donnees['pseudo'] . ' (<a href="mailto:' .$donnees['email'] . '">mail</a>) ' . $donnees['date'] . ' ' . $donnees['heure'] . '</strong> a écrit :<br />' . $donnees['message'] . '</p>';
						}

						mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ;o)
					?>
			</div>
		</div>
	</div>
	<div id="pied">
		<p>2012 © Kinésiologie - Relaxation</p>
		<p>Site web créé par NOM WEBMASTER</a></p>
	</div> 
</div>
</body>
</html>
 


Un énorme merci à vous. Le site en question est http://www.kinesiologie-relaxation.com/livredor.php

bon dimanche !



--
Lorina

5 réponses

  1. sdp.wifi-bar.com
     
    Bonjour,
    Il est probable qu'il ne soit piraté. mdr.
    Il est spammée, Il faut ajouter un code antispams ou une partie admin pour valider les messages

    Configuration: Windows XP / Safari 537.1
    2
  2. Utilisateur anonyme
     
    Salut,

    htmlspecialchars n'est pas suffisant. Comme le nom de la fonction l'indique, ça protège contre l'inclusion de balises HTML mais pas de fonctions SQL. Et même avec l'autre fonction avant ça reste possible à contourner.

    Une solution simple : Utiliser les requêtes préparées avec PDO.

    https://lmgtfy.app/?q=pdo+requ%C3%AAtes+pr%C3%A9par%C3%A9es+site+du+zero

    a+

    Edit : Sinon ça peut venir d'autre part. Vérifies, si tu en as, tes scripts d'upload. Si ils sont mal sécurisés les pirates peuvent envoyer ce qu'on appelle un Shell sur ton site et le contrôler presque entièrement.

    Et utilise atoi pour la variable page.

    Edit : Le popup c'est pour de la musique de fond apparemment.
    Musicalement,
    DJ Fire-Bl@ck.
    0
  3. LLorina Messages postés 347 Statut Membre 98
     
    Merci beaucoup de ta réponse aussi rapide.
    Par contre dans le tuto du site du zéro, il est noté de modifié le php.ini
    Saurais-tu me dire comment on y accède sur un serveur mutualisé ovh ?
    Merci par avance.
    0
    1. Utilisateur anonyme
       
      ça dépend. La majorité des hébergeurs français ont PDO d'installé donc pas besoin d'ajouter / modifier quoi que ce soit. A moins que ton site soit hébergé sur serveur dédié.
      0
  4. JooS Messages postés 2705 Statut Membre 228
     
    Salut ...

    Si tu disais ce que fait exactement ton livre d'or, on pourrais t'aider a en créer un !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nicodu65 Messages postés 54 Statut Membre
     
    Bonjour,
    j'ai le même problème, j'ai créé un livre d'or sur mon site, mais j'ai entre autre des spams qui viennent polluer le livre d'or avec par exemple nom auteur : dsqhbisdbhisbh, une adresse mail du même type et idem pour le message. Comment faire en sorte que ces spams ne puissent entrer sur le livre d'or sans que j'ai moi-même à les supprimer manuellement de la base de donnée?

    Merci d'avance.

    Cordialement.
    0
    1. JooS Messages postés 2705 Statut Membre 228
       
      1 - Système de captcha.
      2 - Avec les session, or, tu autorise chaque visiteur a poster (par exemple) 5 message par heure.
      0
    2. nicodu65 Messages postés 54 Statut Membre
       
      Merci
      0
    3. LLorina Messages postés 347 Statut Membre 98
       
      Ah bonne idee la limitation par passage par heure. Merci je n'y avais pas pense.
      Bon we.
      0