2010-12-07 30 views
1

Je suis en train d'essayer de vérifier la zone de texte pour voir si elle contient une certaine expression.Comment vérifier si une zone de texte 'contient' une certaine phrase avec javascript/php?

Je crois que je pourrais peut-être utiliser .indexOf?

C'est juste que j'ai un script de validation pour vérifier le contenu d'un formulaire de contact. Dernièrement, j'ai reçu un peu de spam à travers. J'ai remarqué que tous ces spams contiennent la phrase [url = et j'ai pensé, si je pouvais peut-être ajouter un petit script pour vérifier si la zone de texte contenait une telle phrase et, si oui, arrêter le message envoyé.

À l'heure actuelle, j'ai ce simple bout de javascript pour vérifier si la zone de texte est vide:

if (message.val()=='') { 
     message.addClass('highlight'); 
     message.focus(); 
     return false; 
    } else message.removeClass('highlight'); 

Toutes les bonnes façons d'ajouter quelque chose à vérifier si le champ de message contient [url =

I également un script de validation php similaire:

if (!$message) $errors[count($errors)] = 'Please click back and enter your message.'; 

Toute idée comment je pourrais ajouter un script de validation similaire pour vérifier si le message contient [url = en php aussi?

Toute aide serait grandement appréciée! : O)

Répondre

3

Il est peu probable que vous arrêtiez le spam en vérifiant le contenu de votre zone de texte côté client: - le spammeur est plus que probable POSTing directement sur votre serveur script latéral, vous aurez donc besoin de faire votre filtrage là-bas. La vérification d'un motif particulier ne fonctionnera que jusqu'à ce que le motif change et vous devrez alors mettre à jour votre script.
Une solution courante à ce problème est l'utilisation d'un jeton de formulaire à usage unique.
Lorsque vous servez le formulaire, vous générez une chaîne aléatoire de caractères et placez ce jeton dans un champ masqué du formulaire. Vous stockez également le jeton sur le serveur dans une session ou dans une base de données. Lorsque le formulaire est envoyé, vous faites correspondre les jetons stockés et soumis. De cette façon, vous pouvez être plus sûr que le formulaire lui-même a été rempli et soumis et que vous ne recevez pas de données d'un bot.
Pour plus de sécurité, vous ne pouvez utiliser chaque jeton qu'une seule fois, en vous protégeant contre plusieurs soumissions.

MISE À JOUR Un très simple, une page par exemple

<?php 
session_start(); 

/** 
* Process the form if we have a token that we recognise 
* otherwise just present the form again, you probably want to handle this a bit better 
*/ 
if(isset($_POST['token']) && isset($_SESSION['token']) 
    && $_POST['token'] === $_SESSION['token']) { 

    // no more submissions using this token 
    unset($_SESSION['token']); 

    $name = clean($_POST['name']); 
    $comment = clean($_POST['comment']); 

    // process the input and redirect to a confirmation 
    // just echoing data for example 
    echo "$name said $comment"; 
    die(); 
} else { 
    $token = uniqid(); 
    $_SESSION['token'] = $token; 
} 

/** 
* Stub function that cleans user input 
* @param String $str 
*/ 
function clean($str) { 
    return $str; 
} 
?> 
<html> 
    <head> 
    <title>Form token example</title> 
    </head> 
    <body> 
     <form method="post"> 
      <label> 
       Name<br/> 
       <input type="text" name="name"/> 
      </label> 
      <br/> 
      <label> 
       Comment<br/> 
       <textarea name="comment"></textarea> 
      </label> 
      <br/> 
      <label> 
       <input type="submit"/> 
      </label> 
      <br/> 
      <br/> 
      The token field would normally be hidden, it's displayed here so that the user can change it for testing<br/> 
      <input type="text" name="token" value="<?php echo $token ?>"/><br/> 
     </form> 
    </body> 
</html> 
+0

Cela semble un peu compliqué, mais c'est probablement une bonne idée. Que diriez-vous si j'ajoute un script similaire au fichier php côté serveur, cela pourrait-il aider à réduire ce type de spam? – ade123

+0

Ce n'est pas vraiment compliqué, j'ai ajouté un exemple à ma réponse – meouw

-1
message.val().match('your phrase here') 
+0

Tout d'abord, comme il pense, 'message.val()' est pas même fonction JS plaine. D'un autre côté, vous devriez avoir répondu complètement (comme 'if (message.val() .....)> 0)' ... –

2

vérifier la javascript search method et javascript match method. Je préfère la recherche parce que si vous vous souciez seulement si elle existe, vous faites quelque chose comme ça.

var stringToSearch = "stackoverflow"; 

if (stringToSearch.search("over") >= 0){ 
    //exists 
} 

D'ailleurs votre question n'a pas fait quelque chose de bien. Je ne connais pas php alors je ne peux pas vous aider