bizarreries avec preg_match

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 : bizarreries avec preg_match

par matmamat » 20 oct. 2007, 14:56

Merci, mais en fait le problème qui me faisait peur c que l'utilisateur mal intentionné puisse incruster du javascript dans le champ étant donné que le +est le signe de la concaténation. Cependant grâce à ta remarque j'ai trouver une fonction javascript replace, qui me permet de supprimer les signes +avant meme de traiter l'objet, en tout cas merci à vous.

par momox » 20 oct. 2007, 09:55

Dans ce cas la ce que je te conseille, c'est de remplacer tous les + par des espaces dans ton script php de traitement ;)

par matmamat » 20 oct. 2007, 06:03

Tout d'abord merci d'avoir répondu si vite.

J'ai éssayé tout ce que tu m'as dit, mais rien ne marches.

Cependant je pense avoir cerné le problème.
Il s'agit en fait d'AJAX, j'ai donc ceci :

Code : Tout sélectionner

xhr.open("POST", "mon_fichier_de_verif.php", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); send = 'champ=adr&value='+obj.value; xhr.send(send);
où obj est l'input de mon formulaire.
Du coup en mettant un & dans la chaine, cela est interprété comme un paramètre supplémentaire, j'ai réussi à empecher ça en faisant un escape() sur obj.value, cependant le "+" est toujours autorisé, mais je ne pense pas que cela permette un exploit, cependant si vous avez une solution pour pallier à ça je suis malgrés tout preneur.

par Berzemus » 19 oct. 2007, 20:16

je me demande s'il ne faut pas alors mettre deux brackets:

Code : Tout sélectionner

[[:space:]]
Sinon, utilise \s, ça marche pour tous les espaces blancs.

bizarreries avec preg_match

par matmamat » 19 oct. 2007, 19:50

Alors voila, je veux tester une adresse postal, pour cela je veux que ma chaine soit composée de caractères alpha numériques, ou apostrophe, et bien sur les espaces, j'ai donc ce regex :

Code : Tout sélectionner

preg_match('#^[\'0-9a-z[:space:]]*$#i', $adresse);
je l'ai testé sur http://www.lumadis.be/regex/test_regex.php,et ça fonctionne apparement bien, cependant sur easyphp ou sur mon compte free, dés que j'ajoute le

Code : Tout sélectionner

[:space:]
des caractères comme "+" ou "&" ou encore "#" passent au travers du filtre.

Alors j'aurai tendance à penser que ç vient d'easyphp (version 2.0b1) et de free mais dans le doute je préfère vous demander votre avis.

Petite précision mon adresse arrive d'un formulaire, et il semblerait que certains caractères soit automatiquement remplacés.