Problem avec enregistrement d'un formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problem avec enregistrement d'un formulaire

par marcello2 » 19 juin 2008, 11:30

Voici mon script d'authentification :

i

Code : Tout sélectionner

f(isset($_POST['login'])) $login= utf8_decode($_POST['login']); else $login="inconnu"; if(isset($_POST['secret'])) $secret= utf8_decode($_POST['secret']); else $secret="inconnu"; $login=addslashes($login); $secret=addslashes($secret); //--------------FONCTIONS function envoi($var, $val){ echo "&".$var."=".utf8_encode($val); } //--------CONNEXION ET SELECT BASE ------------ require_once('Connections/connexionLogin.php'); mysql_select_db("maBase"); $query_rs = "SELECT * FROM utilisateurs WHERE login='$login' "; $rs = mysql_query($query_rs, $connexionLogin) or die(mysql_error()); if(($secret == $row_rs['secret'])&&($total_rs!=0)){ //test si le controle du mot de passe est ok $_SESSION['login']=$login; //mémorise le login de l'utilisateur en session envoi("retour","ok"); $idUtilisateur = $row_rs['idUtilisateur']; $_SESSION['idUtilisateur']=$idUtilisateur;
est-il à l'abri d'une injection SQL.
Si ce n'est pas le cas, comment le protéger ?
Merci de votre aide.

par Berzemus » 19 juin 2008, 10:23

En fait, je n'ai pas de / devant les apostrophes dans la base.
J'ai fait pas mal d'essais : ça fonctionne très bien.
L'aide du forum a été précieuse.

Autre chose que je devrait savoir pour éviter les problèmes avant de lancer l'application lundi ?
:shock:

je sais pas.. est-ce que le addslashes() protège contre tout type d'injection de requête ? Je n'oserais pas l'affirmer.

par marcello2 » 19 juin 2008, 09:42

En fait, je n'ai pas de / devant les apostrophes dans la base.
J'ai fait pas mal d'essais : ça fonctionne très bien.
L'aide du forum a été précieuse.

Autre chose que je devrait savoir pour éviter les problèmes avant de lancer l'application lundi ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par Volkow » 19 juin 2008, 09:18

Donc si je résume:

Dans les enregistrements de ta base tu as des \ devant chaque apostrophe, c'est ça?

Si c'est le cas, au moment de les sortir de la base, tu fais passer la variable au stripslashes(). Cela aura pour effet d'enlever les anti-slash.

:)

par marcello2 » 19 juin 2008, 05:00

J'ai réécris mon script ainsi :

f(isset($_POST['coeur'])) $nom= addslashes(utf8_decode($_POST['coeur'])); else $coeur="inconnu";
http://www.phpfrance.com/forums/posting ... t&p=252283
PHPFrance :: Editer le sujet
Les apostrophes passent bien dans la base.
Mais on ne voit pas de slashes dans les enregistrements

J'obtiens ceci dans la base sql pour le champ $coeur :

tu t'y crois vraiment o'bannion
et pas tu t/y crois vraiment o/bannion.

Mais ça semble être lu correctement par flash.
D'après mon bouquin php, je croyais qu'il fallait utiliser stripslashes() pour revenir vers flash.

par Volkow » 18 juin 2008, 23:26

Le addslashes() tu l'utilise comme cela, pour prendre exemple sur la réception d'un formulaire:

$titre = addslashes($_POST['titre']);

Ce qui mettra des anti-slash devant les apostrophes.

Exemple:

Le champ titre est égal à "l'oiseau de l'île de Paradis".

Après application du addslashes:

"l\'oiseau de l\'île de Paradis".

Voilà. :)

par marcello2 » 18 juin 2008, 19:28

Et je le mets où addslashes ?

Bon, je vais étudier la question de près avec mes bouquins et les tutorials.

C'est pas toujours marrant de débuter :lol:

Merci.

par Berzemus » 18 juin 2008, 18:57

je ne vois pas ou tu échappes tes valeurs.. il suffit d'un apostrophe pour faire flancher ta requête.

Regarde addslashes() .

par marcello2 » 18 juin 2008, 18:30

Tu veux dire mon code php ?

Est-que le problème ne peut pas venir du code ActionScript ?
Voici le code php
<?php
//require_once('blocageCache.php'); 
//récupération des variables envoyées par Flash
if(isset($_POST['idUtilisateur'])) $idUtilisateur= utf8_decode($_POST['idUtilisateur']); else $idUtilisateur="inconnu";
if(isset($_POST['semaine'])) $semaine= utf8_decode($_POST['semaine']); else $semaine="inconnu";
if(isset($_POST['jour'])) $jour= utf8_decode($_POST['jour']); else $jour="inconnu";
if(isset($_POST['numero'])) $numero= utf8_decode($_POST['numero']); else $numero="inconnu";
if(isset($_POST['type'])) $type= utf8_decode($_POST['type']); else $type="inconnu";
if(isset($_POST['nom'])) $nom= utf8_decode($_POST['nom']); else $nom="inconnu";
if(isset($_POST['coeur'])) $coeur= utf8_decode($_POST['coeur']); else $coeur="inconnu";
if(isset($_POST['couleur'])) $couleur= utf8_decode($_POST['couleur']); else $couleur="inconnu";


 //------------------------CONNEXION ET SELECTION DE LA BASE---------------------------
require_once('Connections/connexionLogin.php');
mysql_select_db("DB327152");

//--------------FONCTIONS 
function envoi($var, $val){
echo "&".$var."=".utf8_encode($val);
}
//------------------------RECUPERATION DES INFORMATIONS(depuis la table utilisateurs)
$sql = "INSERT INTO elements (idUtilisateur, semaine, jour, type, numero, nom, coeur, couleur) VALUES ('$idUtilisateur', '$semaine','$jour', '$type',
'$numero','$nom','$coeur', '$couleur')";
mysql_query($sql, $connexionLogin) or die(mysql_error());
envoi("retour","ok");
?>

par animithra » 18 juin 2008, 17:05

Bonjour.

Nous montrer ton code source serait un plus...

Sinon regarde si cela n'est pas lié à des caractères spéciaux non-encodés ou à l'utilisation de '.

Refais une série de tests et note dans chaque cas si ça fonctionne ou pas avec les éléments que tu as entré afin qu'on ait une idée de ce qui fonctionne ou pas.

Problem avec enregistrement d'un formulaire

par marcello2 » 18 juin 2008, 16:47

J'ai développé un formulaire avec flash.
J'utilise des scripts php et bien sur mysql sur le serveur.

Lors des beta tests, certains utilisateurs enregistrent parfaitement leur formulaire alors que pour d'autres, il n'y a rien dans la base.
Tous font la même chose et cliquent pour soumettre le formulaire.

Je ne comprends pas comment un script peut marcher pour certains et pas pour d'autres.

Merci de votre aide.

marcello :