За последние 24 часа нас посетили 22645 программистов и 1268 роботов. Сейчас ищут 759 программистов ...

спам боты как то обходят pattern при регистрации

Тема в разделе "JavaScript и AJAX", создана пользователем noice, 14 апр 2021.

  1. noice

    noice Активный пользователь

    С нами с:
    7 сен 2012
    Сообщения:
    157
    Симпатии:
    0
    <input type="text" placeholder="Русские буквы" pattern="[А-Яа-яЁё ]+" name="name" value="">

    имя должно быть на русских буквах, думал это их остановит нет всеравно регаются с инглиш символами в имени.

    как так и как пофиксить?
     
  2. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Ну, вряд ли спамеры формой пользуются.
    Проверять в обработчике надо. Да и капча не помешает.
     
  3. noice

    noice Активный пользователь

    С нами с:
    7 сен 2012
    Сообщения:
    157
    Симпатии:
    0
    Вот вроде все ок работает, но проблема в том что если пользователь не нажимал в поле ИМЯ то любые проверки игнорятся.
    Как пофиксить?
    PHP:
    1. <?php
    2.  
    3. /**
    4. * Модель: Registration
    5. *
    6. * Класс Models_Registration реализует логику регистрации новых пользователей.
    7. * - Проверяет корректность введенных данных в форме регистрации;
    8. * - Регистрирует нового пользователя, заносит данные в базу сайта;
    9. *
    10. * @author Авдеев Марк <mark-avdeev@mail.ru>
    11. * @package moguta.cms
    12. * @subpackage Model
    13. */
    14. class Models_Registration {
    15.  
    16.   /**
    17.   * Проверяет корректность введенных данных в форме регистрации.
    18.   *
    19.   * @param array $userData массив данных пользователя.
    20.   * @param string $mode режим проверки данных (full|pass) полный (по умолчанию) или только пароль.
    21.   * @return string ошибка в случае не верного ввода данных в одном из полей.
    22.   */
    23.   public function validDataForm($userData, $mode = 'full') {
    24.  
    25.    global $passtmp;
    26.   // Проверка электронного адреса.
    27.   if (USER::getUserInfoByEmail($userData['email']) && 'full' == $mode) {
    28.   $error .= '<span class="email-in-use">Указанный email уже используется</span>';
    29.   }
    30.    // Проверка Имени на английские буквы
    31.    if ((!preg_match('/^[а-яё\s]++$/ui',$userData['name'])) or (strlen($userData['name']))<3)  {
    32.   $error .= '<span class="email-in-use">Имя должно состоять из Русских букв и более одного символа.</span>';
    33.   }
    34.  
    35.   // Пароль должен быть больше 5-ти символов.
    36.   if (strlen($userData['pass']) < 5) {
    37.   $error .= '<span class="passError">Пароль менее 5 символов</span>';
    38.   }
    39.   // Проверяем равенство введенных паролей.
    40.   if (URL::getQueryParametr('pass2') != $userData['pass']) {
    41.   $error .= '<span class="wrong-pass">Введенные пароли не совпадают</span>';
    42.   }
    43.    $passtmp = $userData['pass'];
    44.  
    45.   if ('full' == $mode) {
    46.  
    47.   // Проверка электронного адреса.
    48.   if (!preg_match('/^[-._a-zA-Z0-9]+@(?:[a-zA-Z0-9][-a-zA-Z0-9]{0,61}+\.)+[a-zA-Z]{2,6}$/', $userData['email'])) {
    49.   $error .= '<span class="errorEmail">Неверно заполнено email</span>';
    50.   }
    51.   /////////////////////Капчап
    52. if(MG::getSetting('useCaptcha')=="true"){
    53. // ваш секретный ключ
    54. $secret = "6Ld-uXUaAAAAAJKIqUcQa8ySq4x0slHZ4tQpIhmJ";
    55. // пустой ответ
    56. $response = null;
    57. include('mg-core/lib/recaptchalib.php');
    58. // проверка секретного ключа
    59. $reCaptcha = new ReCaptcha($secret);
    60.  
    61. if ($_POST["g-recaptcha-response"]) {
    62. $response = $reCaptcha->verifyResponse(
    63.   $_SERVER["REMOTE_ADDR"],
    64.   $_POST["g-recaptcha-response"]
    65.   );
    66. }
    67.  
    68. if ($response == null || !$response->success) {
    69.   $error .= "Recapctha не пройдена";
    70.   $data['error'] = $error;
    71. }
    72. }
    73.  
    74. /////////////////////////
    75.  
    76.   }
    77.   $args = func_get_args();
    78.   return MG::createHook(__CLASS__."_".__FUNCTION__, $error, $args);
    79.   }
    80.  
    81. }
    HTML:
    1. <div class="create-user-account-form">
    2.   <?php if($data['form']): ?>
    3.    <!-- <h2>Новый пользователь</h2>-->
    4.  
    5.     <form action="<?php echo SITE ?>/registration" method="POST">
    6.       <ul class="form-list">
    7.         <li>Email:<span class="red-star">*</span></li>
    8.         <li><input type = "text" placeholder = "" maxlength="30" name = "email" value = "<?php echo $_POST['email'] ?>"></li>
    9.         <li>Иногда письма приходят в спам папку!</li></br>
    10.         <li>Пароль:<span class="red-star">*</span></li>
    11.         <li><input type="password" name="pass"></li>
    12.         <li>Подтвердите пароль:<span class="red-star">*</span></li>
    13.         <li><input type="password" name="pass2"></li>
    14.         <li>Имя:</li>
    15.         <li><input type="text" placeholder= "Русские буквы" name="name" value = "<?php echo $_POST['name'] ?>"></li>
    16.         <li><input type="hidden" name="ip" value = "<?php echo $_SERVER['REMOTE_ADDR'] ?>"></li>    
    17.         <?php if(MG::getSetting('useCaptcha')=="true"){ ?>
    18. <!--гугл капча-->
    19.         <div class="g-recaptcha" data-sitekey="6Ld-uXUaAAAAAA3123аZWAzDpcJzs8ANU0E0lQ9"></div>
    20.         <?php } ?>
    21.      
    22.       </ul>
    23.       <button type = "submit" name="registration" class="register-btn default-btn">Зарегистрироваться</button>
    24.     </form>
     
  4. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    861
    Симпатии:
    132
    Атрибут required добавьте полю, но от ботов это не поможет, html5-атрибуты -- проверка на стороне клиента (браузером, в общем), боты могут пакостить прямо на сервер.