tous les éléments à gérer... (addslashes etc...)

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 : tous les éléments à gérer... (addslashes etc...)

par RinaBK » 29 sept. 2006, 17:06

oui, comme simplement être certain qu'un champ a bien été renseigné comme ceci :
if ($_POST) {
	extract($_POST);
	if ( (!$action) || (!$adress) || (!$sujet) || (!$message) || (!$entete) {
		echo '< class="error">Des champs sont restés vides !</p>';
	}
	else {
		mail($adress, $sujet, $message, "From: [email protected]\r\n"."Reply-To: [email protected]\r\n"."X-Mailer: Mauvais e-mail dans la base !", "[email protected]");
		echo '<p class="error">Message envoyé !</p>';
	}
}

par Ryle » 29 sept. 2006, 16:25

En contrôle, tu peux tester si les données sont bien présentes dans $_POST et qu'elles ne sont pas vides ou retourner un message d'erreur en spécifiant ce qui ne va pas... Personnellement je fais en javascript ces contrôles "mineurs" ("mineur" dans le sens ou si les données ne sont pas correctes, ça ne plante en rien mon code, ça empêche juste l'utilisateur de faire ce qu'il veut... je l'ai prévenu sur le formulaire en js, s'il essaye de trifouiller malgré tout, ca ne gènera que lui :))

En revanche derrière, je ferais un test sur le retour de la fonction mail, afin de savoir s'il a été correctement envoyé ou non et agir en conséquence (éventuellement en informer l'utilisateur).

L'avantage (non négligeable), c'est que je ne me prend pas la tête ;)
L'inconvénient, c'est qu'en cas d'erreur, je ne sais pas pourquoi le mail n'est pas parti (adresse mail saisie par l'utilisateur incorrecte ? serveur smtp hs ? etc.). Mais en partant du principe que j'ai fait un script qui fonctionne, c'est soit un problème au niveau du serveur et j'y peux rien.. soit c'est l'utilisateur qui a fait n'importe quoi et il n'a qu'à corriger lui même :)

Dans ton cas, tu te contentes de transmettre les données saisies, leur format, leur présence, etc. n'ont aucun impact sur le résultat, à moins d'en avoir un besoin absolu dans le mail. Tu peux donc ajouter quelques contrôles sur les champs obligatoires, mais ce n'est pas la peine de surcharger inutilement ton code de contrôles non plus :)

par RinaBK » 29 sept. 2006, 15:57

Ok, tu veux un exemple... Donc, je n'ai fait AUCUN contrôle sur les champs envoyé par le sois-disant formulaire qui n'est pas visible mais qui contient les noms des variables dans l'atribut name="". De plus, Si l'utilisateur oublie de remplir un champ de saisie, ce code enverra une erreur d'envois de mail... Donc, à ce code il faudrait encore ajouter le code de contrôle pour chaque champs de saisie :)
<?
//	Initialisations des variables
$action = '';
$adress = '';
$sujet = '';
$message = '';
$entete = '';

//	extractions des variables $_POST
if ($_POST) { extract($_POST); }


//	Envois des données
if ($action == 'btEnvoyer') { 
    mail($adress, $sujet, $message, $entete);
    echo 'Merci pour votre message !'; 
} 
?>

par Invité » 29 sept. 2006, 15:45

non mais l'objet de mon post n'est pas de faire faire le travail par un autre mais de comparer les façons de programmer, sécuriser... enfin bref... je vais plutot regarder des projet références en terme de programmation et analyser la façon dont il programme. Je mettrais certainement plus de temps et cela ne profitera qu'à moi.

Merci tout de même d'avoir consacrer un peu de votre temps sur ce post.

par Invité » 29 sept. 2006, 15:19

Si bien sûr mais pour celà il aurait fallut que tu commence par essayer de faire les vérifications toi même, içi on ne donne pas du tout fait, en attendant:
tu doits lire ça: http://www.phpfrance.com/forums/voir_sujet-12858.php il y a tout pour la vérification des données utilisateurs

par Invité » 29 sept. 2006, 14:55

donc aucune vérification de l'envoi du mail ? aucune vérification des saisis utilisateurs ? :?

par jojolapine » 29 sept. 2006, 14:03

Je ne voi pas trop les vérifications qu'il y a à faire içi :roll:
mais sinon, je n'aurai pas fait comme ça au niveau du code:
<?php
if($_POST['action'] == 'btEnvoyer')
{
    $adress = '[email protected]';
    $sujet = 'Le sujet est le formulaire';
    $message = 'Nom: '.$_POST['nom'].'\n'.
               'E-mail: '.$_POST['email'].'\n'.
               'Adresse: '.$_POST['adresse'].'\n'.
               'Message: '.$_POST['message'].'\n'.
               'Téléphone: '.$_POST['tel'].'\n';
    $entete = "From: [email protected]\n";
    mail($adress, $sujet, $message, $entete);
        echo "Merci pour votre message !";
}
?>
mais c'est simplement une question de lisibilité, içi il n'y a rien de compliquer à concevoir

par Invité » 29 sept. 2006, 13:43

salut !

ok je vois ou vous voulez en venir :)

alors par exemple ceci, c'est un formulaire pour récupérer les informations saisis dans un formulaire pour envoyer un mail :

l'auriez-vous programmé comme ça ?
<?php
if($_POST['action'] == 'btEnvoyer')
{
	$adress = "[email protected]";
	$sujet = "Le sujet est le formulaire";
	$message = "Nom: {$_POST['nom']}\nE-mail: {$_POST['email']}\nadresse: {$_POST['adresse']}\n";
	$message .= "Message: {$_POST['message']}\nTéléphone: {$_POST['tel']}\n";
	$entete = "From: [email protected]\n";
	mail($adress, $sujet, $message, $entete);
        echo "Merci pour votre message !";
}
?>
:D

par Ryle » 29 sept. 2006, 12:51

Le problème c'est que les exemples "précis" que tu proposes n'ont rien à voir les uns avec les autres... en gros cela revient à "Comment vous programmez ?"

Mine de rien, la programmation se fait énormément au feeling : Je vais faire ça comme ça parce que sur le coup ça me parait une bonne idée... et puis demain je vais corriger parce que j'ai trouvé une meilleure solution. Dans un mois je tomberais sur une fonction que je ne connaissais pas et qui optimise mon traitement et dans deux ans je vais revenir sur mon code en me traitant de tous les noms parce que mes 30 lignes pouvaient se résumer en 10 si j'y avais songé un jour de plus ou si j'avais eu mes connaissances actuelles à l'époque...

Il y a naturellement des choses à ne pas faire, ou plus exactement à éviter, mais chacun est libre de faire à sa guise et y a pas vraiment de meilleure solution, au mieux il y en aura des plus optimisées et elles ne seront pas "meilleures" pour autant. Certains vont écrire un if/else sur 8 lignes avec des retours à la ligne à chaque accolades, d'autres le réduiront à 4 sans les accolades, d'autres encore à 1 avec l'opérateur ternaire.. toutes ces solutions sont vallables, c'est juste une question d'appréciation.

A mon sens on ne peut pas dire "comment on développe", on peut juste te dire "comment on réaliserait ce point précis". Je t'invite à suivre le conseil de RinaBK : prend un exemple précis (et un seul à la fois ;)), dis nous comment tu l'as réalisé (ou envisage de le réaliser) et tu verras que les commentaires arriveront de toute part sur "moi j'aurais fais comme ça...", "tu peux aussi changer ça", "tiens je connaissais pas" ... :)

Ps : bon je m'suis fait griller par Cyrano, mais maintenant que c'est tapé hein ! ;)

par Cyrano » 29 sept. 2006, 12:48

Je "plussoie" RinaBK, on ne peut comparer que ce qui est comparable. En fait tu ne poses pas une question mais lances un genre de débat pour en retirer ce qui serait le plus pratique/utile/efficace/sécuritaire/etc... (rayer la/les mention(s) inutiles(s)).

J'aurais tendance à dire : si ton développement fonctionne, alors tu as des raisons d'être satisfait. Maintenant, qu'il existe une méthode pour obtenir un meilleur résultat, meilleur au plan de l'un des critères nommés plus haut, c'est toujours envisageable, mais dis-toi bien que ce ne sera probablement pas un problème de code mais de méthodologie et ça, c'est propre à chaque développeur, ça dépend également en partie de ton sens de la logique et de ton niveau de formation et de pratique de la programmation.

Le choix de telle ou telle fonction dépend du besoin et pour faire le bon choix, il faut t'en remettre à la documentation : d'abord elle est là pour ça, ensuite, mais en second recours, tu as les forums de discussion spécialisés comme ici où des gens qui auront de la pratique de ladite fonction pourront te donner un avis (éclairé ou non, reste prudent, il y a de tout sur un forum, des bons comme des moins bons) Mais ça reste un choix de fonction, le plus important n'est pas là : ce qui est le plus important, c'est la logique du déroulement de ton application. Si tu n'es pas logique d'un bout à l'autre, ton application présentera à terme des vices de fonctionnement.

par RinaBK » 29 sept. 2006, 12:17

Tu ne peux comparer ce genre de contrôle... Car comme je le disais dans mon message précédent, chacun doit réaliser son programme suivant les résultats désirés... Le mieux serait de présenter tes codes et de demander conseil. Là, les personnes pourront t'exposer leurs codes s'ils correspondent au tien. :)

par Invité » 28 sept. 2006, 22:43

non mais je ne compte sur personne...

Je veux juste comparer les façons de programmer c'est tout !

par RinaBK » 28 sept. 2006, 16:31

lol
Tu me fais rire avec tes exemples lol
Chaque programmeur réalise son programme suivant ce qu'il doit contrôler et ce n'est pas pareil pour chaque programme, car chaque programme est d'une certaine manière unique et suit les demande qui doivent être contrôlée... Je te conseil d'une part de te faire un plan d'execution et de t'aider avec la doc. Ensuite, lorsque tu sera en train de réaliser ton programme et que tu as une question, venir la poser ici.. Il faut savoir se documenter et chercher ce que l'on a vraiment besoin et pas attandre sur les autres..

par Invité » 28 sept. 2006, 14:47

personne ? :shock:

par Invité » 24 sept. 2006, 17:53

Des exemples précis :

un formulaire d'upload de photos, fichiers...
- vos techniques pour vérifier les extention, taille, etc pour ne pas pouvoir tricher.

un formulaire d'inscription classique
- quelles fonctions utilisez vous pourquoi celle-ci et pas une autre ?

un formulaire de log
- quelles vérifications effectuez-vous ? (expressions régulières, autres, ...) pourquoi ?

- la protection de vos variables sessions... comment vérifiez-vous que c'est le bon utilisateur par exemple...

voici quelques exemples :D