problème de securité avec table/php

Eléphant du PHP | 91 Messages

26 août 2009, 08:34

Bonjour,

J'ai remarqué depuis quelques temps que des insertions vide dans les champs de mes tables avaient lieu.

Cependant j'ai eu la bonne idée d'insérer dans mes script avec formulaire, date, heure et addresse IP (au cas ou); Du coup j'ai relever que cela provenait de amazon.com, ebay, mais aussi d'addresse ip a bucarest.

J'ai l'impression que ce sont des robots qui passe par les formulaires/script php et qui déclenchent les insertions

Quoi qu'il en soit, cela vous est il déjà arriver? Et quelles solutions php préconisez-vous pour éviter ces insertions "sauvages"?

Administrateur PHPfrance
Administrateur PHPfrance | 977 Messages

26 août 2009, 08:56

Y a des robots qui postent sur les formulaires et souvent pour des sites x etc... un genre de span ! une solution consiste a ajouté au formulaire un captcha. Depuis que j'en ai mis un sur mon site, les faux formulaires de contact sont rares
pro : http://www.ohweb.fr -> studio de développement en PHP, expertise en e-commerce, certifié PrestaShop
perso : http://www.olecorre.com -> un dico de termes informatiques

J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

Mammouth du PHP | 985 Messages

26 août 2009, 09:18

J'ai remarqué depuis quelques temps que des insertions vide dans les champs de mes tables avaient lieu.
Sinon pour les champs vides, une vérification du champ au moment de l'envoie du formulaire:
Exemple:
if (empty($_POST['champ'])) {   //Si la valeur de champ est vide -> Bye
exit;
}
ou
if (!preg_match("/^[a-z0-9]{5,}$/", $_POST['champ'])) { // Si moins de 5 lettres et/ou chiffres -> Dehors
exit;
}
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 369 Messages

26 août 2009, 09:57

Salut,
Bonjour,
J'ai remarqué depuis quelques temps que des insertions vide dans les champs de mes tables avaient lieu.
Cependant j'ai eu la bonne idée d'insérer dans mes script avec formulaire, date, heure et addresse IP (au cas ou); Du coup j'ai relever que cela provenait de amazon.com, ebay, mais aussi d'addresse ip a bucarest.
J'ai l'impression que ce sont des robots qui passe par les formulaires/script php et qui déclenchent les insertions
Quoi qu'il en soit, cela vous est il déjà arriver? Et quelles solutions php préconisez-vous pour éviter ces insertions "sauvages"?
@Cobaye: +1 ;)

Petit ajout: Es-tu sur qu'il s'agisse des "vrais" sites sus-nommés? Beaucoup de petits malins s'amusent dans le monde
de la pèche (joke). Si ce sont les "vrais" sites envoie un mail de plainte-anti spams, avec IP:Date:Heure:Copy du mail.
Celle-ci (j'imagine) sera sans effet mais les énervera un brin... surtout que tu ne devrais pas être le seul à le faire ;)

@+ ;)

Eléphant du PHP | 91 Messages

26 août 2009, 15:16

J'ai remarqué depuis quelques temps que des insertions vide dans les champs de mes tables avaient lieu.
Sinon pour les champs vides, une vérification du champ au moment de l'envoie du formulaire:
Exemple:
if (empty($_POST['champ'])) {   //Si la valeur de champ est vide -> Bye
exit;
}
ou
if (!preg_match("/^[a-z0-9]{5,}$/", $_POST['champ'])) { // Si moins de 5 lettres et/ou chiffres -> Dehors
exit;
}
Donc lorsque ce code est placé, ça donne une page blanche? exacte?

Mammouth du PHP | 985 Messages

26 août 2009, 15:28

Donc lorsque ce code est placé, ça donne une page blanche? exacte?
Exactement, car la fonction exit() stoppe l'exécution du script, donc si exit() est en début de page, comme rien avant, et rien après car tout est stoppé -> Page blanche...
C'était juste un exemple...

En fait, c'est mieux comme ceci, exemple:
if (isset($_POST['champ']) && preg_match("/^[a-z0-9]{5,}$/", $_POST['champ'])) { 
// Si le formulaire est envoyé et que tu reçois la valeur champ et qu'il existe au moins 5 lettres et/ou chiffres -> Le script continue normalement et donc envoie le mail...

// Ici Ton Code

}
else { // Sinon Erreur et mail non envoyé
echo 'Veuillez remplir le champ correctement,svp'; 
}
OU
if (isset($_POST['champ']) && !empty($_POST['champ'])) { 
// Si le formulaire est envoyé et que tu reçois la valeur champ et qu'elle n'est pas vide -> Le script continue normalement et donc envoie le mail...

// Ici Ton Code

}
else { // Sinon Erreur et mail non envoyé
echo 'Veuillez remplir le champ correctement,svp'; 
}
PS:Ensuite il faut que tu adaptes et personnalises tout ceci avec ta page et ton code...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Mammouth du PHP | 985 Messages

31 août 2009, 08:33

Petit Up, histoire de compléter:

Additionnellement, tu peux utiliser une vérification supplémentaire:
Tu récupères l'heure à la génération du formulaire, ensuite tu la compares avec l'heure d'envoi du formulaire.
Si la différence de temps est inférieur à 1 seconde -> Bot...
En effet, il est difficile pour une personne de remplir un formulaire, dont le Captcha, en moins d'une seconde.
Évidemment, un bot personnalisé pourrait contourner cette vérification, mais pour la majorité -> non.
Mais, dans tous les cas, cela te permet aussi d'ajouter une fonction "anti-flood" à tes formulaires...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 91 Messages

31 août 2009, 12:29

Petit Up, histoire de compléter:

Additionnellement, tu peux utiliser une vérification supplémentaire:
Tu récupères l'heure à la génération du formulaire, ensuite tu la compares avec l'heure d'envoi du formulaire.
Si la différence de temps est inférieur à 1 seconde -> Bot...
En effet, il est difficile pour une personne de remplir un formulaire, dont le Captcha, en moins d'une seconde.
Évidemment, un bot personnalisé pourrait contourner cette vérification, mais pour la majorité -> non.
Mais, dans tous les cas, cela te permet aussi d'ajouter une fonction "anti-flood" à tes formulaires...
C'est génial Merci!!!