Recherche et remplacement de mot interdit sur validation de formulaire

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 483 fois - Téléchargée 16 fois

Contenu du snippet

La sécurité sur serveur quand elle est activé ne permet pas l'envoi des données si celuis-ci inclu un mot interdit.

En effet les paramètres de sûreté de type SecFilterEngine et SecFilterScanPOST interdise certain mot, notamment le mot lynx.

D'autres mot sont aussi interdit mais celui-ci étant le plus couramment utilisé dans une conversation il peut être gênant à la longue de voir ses internautes se refusé l'envoi du formulaire ou l'arrivée sur une page d'erreur à cause de ce dernier. Voici donc une petite source toutes simples pour contourner ce problème.

Source / Exemple :


Dans la page de formulaire :
----------------------------
<?
// permet juste de voir le resultat
if($_POST){
echo $_POST['c1'].$_POST['c2'];
}
?>
<script LANGUAGE="JavaScript" SRC="submit.js"></script>
<form method="post" action="" onsubmit="return lynx(this)">
<textarea name="c1" cols="75" rows="7">Saisissez ici votre texte</textarea>
<br><br>
<textarea name="c2" cols="75" rows="7">Saisissez ici votre texte</textarea>
<br><br>
<input type="submit" value="Remplacer">
</form>
----------------------
Dans le fichier submit.js
----------------------
function lynx(form)
{
// recherche du mot lynx
var maReg = new RegExp("lynx ", "gi") ;
// boucle tous les champs du formulaire
for (var i = 0; i < form.elements.length; i++) {
var text = form.elements[i].value.toString() ;
// mot de remplacement
var resultat = text.replace(maReg, "lynx,") ;
//si le mot est trouve on retourne la nouvelle valeur du champ
form.elements[i].value = resultat;
}
}

Conclusion :


Script extrêmement simple a mettre en ?uvre car tous les champs du formulaire sont listé et control lé automatiquement.

Il suffit simplement de rajouter dans l'entête de vos pages de formulaire :
<script LANGUAGE="JavaScript" SRC="submit.js"></script>

et d'ajouter sur l'ensemble de vos formulaire : onsubmit="return lynx(this)"

A voir également

Ajouter un commentaire

Commentaires

Messages postés
57
Date d'inscription
lundi 27 septembre 2004
Statut
Membre
Dernière intervention
8 novembre 2007

et si on a pas acces à la configuration du serveur ? Ce qui en soit me parait pas contradictoire, serveur et réseautique n'est pas forcement égale au service développement web...Par ailleurs beaucoup de développeur n'ont pas les ressources (et l'envies ?) nécessaire de s'occuper d'un serveur et qui en soit sont deux métiers différent.
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
"La protection coté serveur est déjà présente c'est au contraire pour éviter au posteur de se retrouver avec une page d'erreurs causé par la protection"

Tu fais juste remplacer des mots ... tu peux faire la même chose côté serveur. Je vois pas le problème.
Messages postés
57
Date d'inscription
lundi 27 septembre 2004
Statut
Membre
Dernière intervention
8 novembre 2007

Pour PHP c'était juste pour permettre au gens de tester en fesant un simple copier / coller de ce script...pour le html idem, on est juste dans de l'intégration là.

Apres l'utilité de ce script est comme je l'ai marqué pour une utilisation transparente avant SecFilterEngine et SecFilterScanPOST il faut donc surtout pas gérer des alertes. La protection coté serveur est déjà présente c'est au contraire pour éviter au posteur de se retrouver avec une page d'erreurs causé par la protection. Sinon en effet mon script était pas trés bien optimisé je vais modifier sur vos conseils ^^
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
c'est clair que c'est du tres vieux code...
On a deja croise des codes de verification de formulaires beaucoup plus pousses ici, la, il te manque la partie alert, et la verification de multiples champs avec des regexp differentes
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
Je vais surement faire un commentaire plus long que la source, mais bon.

Côté PHP :

Tu ne fais que tester si il y a des valeurs POST, pas si les valeurs c1 et c2 existent. Faut changer par ceci :

<?php
if(isset($_POST['c1']) && isset($_POST['c2']))
{
echo $_POST['c1'].$_POST['c2'];
}
?>

Côté HTML :

Tous les attributs des balises doivent être en minuscules. Il manque tout la structure du code HTML de base (html, body et head). Pour ton formulaire on ne met pas de fonction dans le bouton submit, on le met dans le onsubmit du form.

<form method="post" action="" onsubmit="return lynx(this)">

Côté Javascript :

Pour parcourir les éléments d'un formulaire on utilise le tableau elements.

for (var i = 0; i < form.elements.length; i++) {

Et la même chose s'applique pour aller chercher la valeur.

var text = form.elements[i].value;

Le reg que tu utilises est le même à chaque fois. Il est donc inutile qu'il soit redéclaré à chaque fois. Met le avant ta boucle.

Je vois pas pourquoi tu vérifies si le texte est là. De toute façon s'il ne si trouve pas ça ne change rien au résultat final.

Aussi se sont généralement des traitements qui sont fait côté serveur, car les protections javascripts sont facilement contournables. Pour être plus intéressant comme code il faudrait que tu rajoutes des possibilités comme des champs à ignorer, une liste de mots à remplacer, etc.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.