Probléme de sécurité

Bonjour,

Je bricolé un petit site web ou je peut ajouté des news. Je pensais l'avoir sécurisé mais des robot arrive a ajouté des news eu aussi. voici mon code.

Pouvez vous aidé SVP ????

Admin.php


<?php
	session_start();
		if(isset($_SESSION['pseudo']))
		{
	 		Echo '<a>Bonjour </a>';
			echo $_SESSION['pseudo'];
			echo '</br>';
			echo '<a href="../scripts/php/deco.php">Deconection</a>';
			echo '</br>';
			echo '<a href="home.html">Home</a>';
		
			echo '
			</br></br></br>
	
			<a>News</a>
			</br>
			<FORM method="POST" action="../scripts/php/ajoutnews.php">
 				<P>Titre:<br>
 					<INPUT type="text" name="titre" size=30>
 				</p>
 				<P>Numero:<br>
 					<INPUT type="text" name="nbnews" size=30>
 				</p>
 				<P>Contenu:<br>
 					<INPUT type="text" name="contenu" size=30>
 				</p>
 				<INPUT type="submit" value="Ajouter la News">
			</form>
		
			';	
		}
		
		else
			echo'			
				<a href="home.html">Home</a>
				</br>
				
				<FORM method="POST" action="../scripts/php/actionlog.php">
					
					<P>Login<br>
						<input type="text" name="login" value="" size="20" id="login"/>
					<br>
					</p>
					<P>Mot de passe<br>
					<input type="password" name="mdp" value="" size="20" MAXLENGTH="15" id="mdp"/>
						</p>	
				<INPUT type="submit" value="connection"/>
				</FORM>	
				';	
									
?>



ajoutnews.php


<?php
	include('logbd.php');
	
	$jour=date(d);
	$mois=date(m);
	$annee=date(Y);
	$heure=date(H);
	$minute=date(i);
	$titre=$_POST['titre'];
	$contenu=$_POST['contenu'];
	$nbnews=$_POST['nbnews'];


	mysql_query ("INSERT INTO news VALUES ('', '$jour', '$mois', '$annee', '$heure', '$minute', '$titre', '$contenu', '$nbnews')");

	echo '<a>La news a bien ete ajouter.</a>';
	echo '<meta http-equiv="refresh" content="2; URL=../../pages/admin.php">';

?> 


logdb.php


<?php
mysql_connect("adresse", "login", "mdp");
		mysql_select_db("mdp");
?>

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,

    Il faut aussi faire la vérification isset() dans le fichier ajoutnews.php (et aussi le session_start() )
    La pensée mène le monde.
    1. Comme tu le fais dans Admin.php :
      <?php
      session_start()
      
      if(isset($_SESSION['pseudo'])) {
          // Connecté
      } else {
          // Interdit
      }
      ?>
      1. Ha ok merci ?. Et après cela serra top en sécurité ou il y a d'autre problème ? Mon code te semble t'il bien pensé ?
        1. Il y a encore la faille CSRF.

          « Mon code te semble t'il bien pensé ? »
          Il y a moyen d'améliorer pas mal de point.
          Une liste non-exhaustive au premier regard :
          - Utiliser PDO à la place des fonctions mysql_...
          - Pour la date, utiliser un seul champ contenant le timestamp ou la date au format anglais. (cf. ici).
          - Utiliser une architecture MVC
          1. Surtout si tu n'es pas en charge de gérer les newsletters toi-même (système de droits)
        2. je vais regardé sa de prés, je suis encore novice en webmastering et le tu me parle un peut chinois.
          1. Bonjour,

            Une solution simple, vous rajoutez un champ qui sera invisible à l'affichage. Par exemple, l'age du contributeur:

            <INPUT type="text" name="age" class='monAge'>

            et le css associé à monAge:

            .monAge {
            display: none;
            }

            Résultat: ce champ ne s'affichera pas.

            Mais un crétin d'automate spammeur verra ce champ qui n'est pas de type hidden et le remplira.

            A la validation du message, si $_POST['age'] contient kékechose, hop => poubelle direct!

            Efficacité? Très très efficace... Mis en application sur de nombreux sites perso et pros et plus d'emmerdeurs....

            A+