Как проверить, содержит ли текстовая область определенную фразу с помощью javascript / php? - PullRequest
1 голос
/ 07 декабря 2010

Я пытаюсь понять, как проверить текстовую область, чтобы увидеть, содержит ли она определенную фразу.

Полагаю, я мог бы использовать .indexOf?

Просто у меня есть сценарий проверки, чтобы проверить содержимое контактной формы.В последнее время я получаю немало спама.Я заметил, что все эти спам-сообщения содержат фразу [url =, и я подумал, не мог бы я добавить небольшой скрипт, чтобы проверить, содержит ли текстовая область такую ​​фразу, и, если да, остановить отправку сообщения.

В настоящее время у меня есть этот простой фрагмент javascript, чтобы проверить, является ли текстовая область пустой:

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

Любые хорошие способы добавить что-то, чтобы проверить, содержит ли поле сообщения [url =

У меня также есть похожий скрипт проверки php:

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

Любые идеи, как я могу добавить подобный скрипт проверки, чтобы проверить, содержит ли сообщение [url = в php тоже?

Любая помощьбудет принята с благодарностью!: О)

Ответы [ 3 ]

3 голосов
/ 07 декабря 2010

Маловероятно, что вы остановите спам, проверив содержимое вашей текстовой области на стороне клиента: - спамер, скорее всего, разместит запрос непосредственно в сценарии на стороне сервера, поэтому вам необходимо выполнить там фильтрацию. Также проверка определенного шаблона будет работать только до тех пор, пока шаблон не изменится, а затем вам придется обновить свой сценарий.
Распространенным решением этой проблемы является использование одноразового токена формы.
Когда вы обслуживаете форму, вы генерируете случайную строку символов и помещаете этот токен в скрытое поле формы. Вы также сохраняете токен на сервере в сеансе или в базе данных. Когда форма отправлена, вы сопоставляете сохраненные и отправленные токены. Таким образом, вы можете быть более уверены, что сама форма была заполнена и отправлена, и что вы не получаете данные от бота.
Для дополнительной безопасности вы можете разрешить использование каждого токена только один раз, защищая от нескольких представлений.

UPDATE Очень простой пример из одной страницы

<?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>
2 голосов
/ 07 декабря 2010

проверьте метод поиска javascript и метод поиска javascript . Я предпочитаю поиск, потому что если вас волнует только то, что он существует, вы делаете что-то вроде этого.

var stringToSearch = "stackoverflow";

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

Кстати, ваш вопрос не сделал что-то правильно. Я не знаю php, поэтому я не могу помочь вам там

0 голосов
/ 07 декабря 2010
message.val().match('your phrase here')
...