begin process at 2010 09 02 22:26:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

Débutants

 > 

Formulaire et sécurité


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Formulaire et sécurité

vendredi 16 septembre 2005 à 11:16:58 | Formulaire et sécurité

ivanmac

Bonjour,

Depuis quelques temps un petit malin s'amuse avec le formulaire d'inscription à la newsletter d'un site dont je m'occupe. N'étant pas un expert en php (j'utilise la fonction mail pour recevoir les  inscriptions), j'ai cherché à sécuriser un minimum le formulaire.

Voici son code avec le php qui traite les variables générées :

<form action="sommaire.php3" method="post" name="news" OnSubmit="return(VerifForm(this))">
<b>NEWSLETTER</b>, les nouvelles par mail. Je m'inscris :

<input type="text" name="monmail" size="17" maxlength="50" value="Votre e-mail" onclick="this.value=''">
&nbsp;
<INPUT name="choix" type="radio" value="oui">
Oui&nbsp;
<INPUT  name="choix" type="radio" value="non">
Non&nbsp;
<input name="bouton" type="submit" value="envoyer">
</form>
<?php //Envoi newsletter
if (!empty($_POST['choix']) && !empty($_POST['monmail'])) {
$email2="webmaster@mondomaine.com";
$headers="From: ".$_POST['monmail'];
$titre="NEWSLETTER : ".$_POST['choix'];
$message="Demande pour la newsletter :\n";
$message.="- Choix : ".$_POST['choix']."\n" ;
$message.="- Adresse email : ".$_POST['monmail']."\n";
$message.="\n - Message envoyé par le site http://www.mondomaine.com -\n";
mail($email2,$titre,$message,$headers);
echo "<font color='#FF0000'><b>&nbsp;-> envoyé !</b></font>";
}
?>

J'utilise $_POST comme il est recommandé, pour ne pouvoir récupérer que les variables générées par le formulaire, et bien que mon hébergeur ait laissé les variables globales à ON.
En oubliant la vérification de l'adresse mail via javascript, je devrais recevoir que "oui" ou "non pour la variable "choix". Or, le petit malin arrive à mettre un peu ce qu'il veut dans ces variables, ainsi qu'à faire du bcc vers une adresse aol. C'est pas bien méchant mais j'aime pas trop ça.

Des idées pour blinder tout ça ?
vendredi 16 septembre 2005 à 11:23:51 | Re : Formulaire et sécurité

FhX

Réponse acceptée !
Pourle bouton radio :
$choix = ( $_POST['choix'] === 'oui' ) ? 'oui' : 'non';
Ca force la variable à etre "oui" ou "non"... comme ca, pas de problème.

Pour le BCC, il faut que tu regardes au niveau de $_POST['monmail'].
Par exemple, utilise une expression régulière pour adresse e-mail, et tu verras, t'auras beaucoup moins de problème par la suite :)

vendredi 16 septembre 2005 à 12:11:54 | Re : Formulaire et sécurité

ivanmac

Tu veux dire que j'utilise
$choix = ( $_POST['choix'] === 'oui' ) ? 'oui' : 'non';
au début du traitement php pour forcer la variable à ne prendre que ces valeurs là ou bien à la place du "if" ?
vendredi 16 septembre 2005 à 12:29:45 | Re : Formulaire et sécurité

malalam

Administrateur CodeS-SourceS
Mets le dans le bloc de ton if () (donc dans le traitement php). Ainsi, en effet, si le choix est égal à autre chose que 'oui', il sera mis à non par défaut.
Tu peux aussi sortir du traitement, si le choix est différent de oui ou de non, et logger une erreur.


vendredi 16 septembre 2005 à 12:52:46 | Re : Formulaire et sécurité

ivanmac

Merci pour l'explication. Ce qui m'intéresse c'est qu'on ne puisse pas mettre autre chose que ce qui est prévu :
- Pour $choix : oui ou non.
- Pour $monmail : un email (dont je valide le @ et le . en javascript), donc ça peut être n'importe quoi dans la limite du champ (50 caractères).

Les logs que je récupère me prouve que ce n'est pas blindé car mon petit malin arrive également à faire passer du html (avec pas grand chose dedans jusqu'à présent) dans $monmail.

Un exemple de log que je récupère avec du php (mondomaine.com remplace le nom du site):

16/09/2005 02:40:32 ;
// la première parenthèse montre le contenu de $monmail)
(tduzwsqkxe@mondomaine.com
Content-Type: multipart/mixed; boundary="===============1629525477=="
MIME-Version: 1.0
Subject: bde4ce20
To: tduzwsqkxe@mondomaine.com
bcc: mhkoch321@aol.com
From: tduzwsqkxe@mondomaine.com

This is a multi-part message in MIME format.

--===============1629525477==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

mgplvm
--===============1629525477==--
);
// la deuxième parenthèse montre le contenu de $choix)
(tduzwsqkxe@mondomaine.com); 66.199.163.xxx(66.199.163.xxx) ;  ;  ; /

Je n'ai aucune info sur l'environnement (navigateur et plate-forme).
vendredi 16 septembre 2005 à 13:04:43 | Re : Formulaire et sécurité

malalam

Administrateur CodeS-SourceS
Normal...

plusieurs choses :
- dans ton if (), teste aussi le submit de ton formulaire
- le principe de sécurisation n'est pas tant d'empêcher un utilisateur malveillant d'essayer de te hacker...mais d'empêcher que ses tentatives soient couronnées de succès. Il enverra toujours ce qu'il veut dans tes $_POST...ton but à toi est de vérifier que tes $_POST contiennent bien les valeurs que tu attends, et pas d'autres. Là, il est bloqué. ON se fiche qu'il ait réussi à t'envoyer toto ou tata...toi, tu n'acceptes que oui ou non.
- ne teste pas tes emails en javascript...pour 2 raisons : c'est moins efficace qu'une expression régulière côté serveur, et ...il suffit de désactiver le javascript au moment de la saisie pour que ta "sécurité" soit anéantie. Le javascript doit rester un confort optionnel! Il doit se cantonner à ça. Jamais, Ô grand jamais, il ne faut l'utiliser dans une optique de sécurisation. C'est voué à l'échec. Et c'est le B-A BA de tout hacker que d'éviter les sécurisations javascript.
- mettre, toujours, toutes les vérifications possibles et imaginables. Enfin, un maximum, en tous cas. Teste le domaine du mail. Passe l'email aux expressions régulières. Pense aux addslashes. Pense à tout... ;-)

vendredi 16 septembre 2005 à 13:12:23 | Re : Formulaire et sécurité

ivanmac

En fait je mentionnais juste le javascript comme option de confort, tout à fait, pour les utilisateurs distraits, pas dans un but de sécurisation.

Ce site est très modeste ; je souhaite juste éviter que le serveur envoie des mails à tout va pour rien. Mais bon, comme mes connaissances sont limitées en php, j'apprends petit à petit.

- Pour tester la saisie d'une adresse mail en php, je vais trouver ça.
- Pour tester le submit, on fait comment en gros (cad tester qu'il a bien cliqué sur le bouton ?)
vendredi 16 septembre 2005 à 13:21:19 | Re : Formulaire et sécurité

FhX

if (!empty($_POST['choix']) && !empty($_POST['monmail'])) {
Bah comme ca par exemple. Quand tu cliques sur ton bouton "envoyer", tu as une variable superglobal qui contient toute ta liste de champs ainsi que les valeurs que l'utilisateur a rentrées dedand.

Donc tu testes via un if ( isset($_POST['un_champ_au_hasard']) ) pour savoir si le formulaire a été soumis où non :)
vendredi 16 septembre 2005 à 16:12:28 | Re : Formulaire et sécurité

ivanmac

Si je comprends bien la fonction isset teste si la variable testée est renseignée par le bouton de validation. Ça ne garantie pas que le champ est renseigné, juste qu'il est renseigné par le bouton de validation ?
Donc je pourrais faire quelque chose comme ça ?

$choix=( $_POST['choix']==='oui' )?'oui' : 'non';
$monmail=$_POST['monmail'];
if (isset($monmail) && !empty($choix) && !empty($monmail)) {
vendredi 16 septembre 2005 à 19:41:56 | Re : Formulaire et sécurité

Anthomicro

Réponse acceptée !
Salut,

if(!eregi("([a-z]|[0-9]|\-\.)@([a-z]|[0-9]|\-\.)",$_POST['email']))
{
         //email invalide
}

c'est une vérification basique, y'en a de bien plus élaborées, mais ça évitera les failles de ce côté au moins :-)



    1 2 3

    Cette discussion est classée dans : mail, variables, formulaire, sécurité, malin


    Répondre à ce message

    Sujets en rapport avec ce message

    passer un nombre de variables non-définis dans un formulaire [ par hacko ] voila, pour un site, je dois afficher un nombre non-définis de check-box dans un formulaire, ceci est généré en php comme ceci : for ($cpt=0;$cpt<=$l formulaire mail [ par arnaud ] quand je recoit un formulaire mail je trouve le fichier postdata.att ... comment fair pour l'avoir sans les 20% et les "+"merciarnaud envoyer un mail avec concatenation d'un message et de l'url [ par philcode ] Bonjour,Comment ajouter au corps du message l'url qui envois la popup de mail concatenné à un petit message du type "vas voir ce site il est super: ur des salsh dans les variables issues de formulaire -> grrrrr [ par skrol29 ] Bonjour,Je viens de m'aperçevoir que PHP (ou bien le protocole HTTP) ajoute des slashes (/) devant certains caractères commes le guillement simple (') Récupérer données formulaire + envoi par e-mail [ par kronprinz ] Quelqu'un peut-il m'aider ?Je cherche comment récupérer des données dans un formulaire et me les envoyer par e-mail avec PHP. Pouvez-vous m'expliquer formulaire [ par cba ] cbaj'ai créé un formualire en HTML dont les données des variables sont envoyées dans un fichier.txt.criq.php traite les données des variables et écrit Recuperation les donnée d'un formulaire envoyer par mail [ par demos ] Voila mon probleme je me suis envoyer un formulaire par mail. J'arrive à récuppérer mon mail et à l'afficher (tout le formulaire se trouve dans la mêm SVP : Aide pour mon premier formulaire. [ par davggy ] Salut à tous.Je suis tout tout débutant et très intrigué par les capacités du PHP.Mon premier souhait est de récupérer par mail les informations fourn formulaire feedback FLASH sur FREE.FR [ par phpiste ] Hello ;)J'ai un formulaire .SWF qui récupère les détails des visiteurs de mon site "tout en flash" (=feedback, quoi). (variables du genre nom, company Mail et formulaire [ par Jackboy ] J'aimerai créer un formulaire, assez complexe (pas seulement email, nom, message,...) et j'aimerai avoir ce formulaire envoyer dans un email et format


    Nos sponsors


    Sondage...

    CalendriCode

    Septembre 2010
    LMMJVSD
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   

    Consulter la suite du CalendriCode

     
    Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
    CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
    CodeS-SourceS.com© est une marque déposée tous droits réservés

    Google Coop CodeS-SourceS Google Coop CodeS-SourceS
    Temps d'éxécution de la page : 0,515 sec (4)

    Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales