не силен в PHP выдает ошибку, подскажите

<h3>Error with code 403 in '/home/мойсайт/docs/wa-system/waSystem.class.php' around line 598:</h3>
   593	                    }
   594	                    $app_system->login();
   595	                } else {
   596	                    if (waRequest::param('secure') && $app_system->getConfig()->getInfo('csrf') &&
   597	                        waRequest::method() == 'post' && waRequest::post('_csrf') != waRequest::cookie('_csrf')) {
 >>598	                        throw new waException('CSRF Protection', 403);
   599	                    }
   600	                    $app_system->getFrontController()->dispatch();
   601	                }
   602	            }
   603	        } catch (waAPIException $e) {

5 ответов

  • 1

    Такое ощущение, что пытаетесь обработать форму с другого домена...

  • 1
    Вячеслав 6 августа 2016 11:14 #
    <div class="callback-popup">
            <span class="close"><i class="icon-cross31"></i></span>
            <div class="black-layer"></div>
            <div class="callback-popup-form">
                <div class="wa-form">
                    <h4 class="blue-text">Заказать звонок</h4>
                  <form method="post" class="rf" action="">
                  <div class="wa-field">
                    <div class="wa-name">[s`Name`]:</div>
                    <div class="wa-value"><input name="name" class="callback-name" type="text" value="{$wa->post("name")|escape}"></div>
                  </div>
                  <div class="wa-field">
                    <div class="wa-name">[s`Email`]:</div>
                    <div class="wa-value">
                      <input name="email" class="rfield mailfield" type="email" value="{$wa->post("email")|escape}" >
                    </div>
                  </div>
                  <div class="wa-field">
                    <div class="wa-name">[s`Message`]:</div>
                    <div class="wa-value">
                      <input type="hidden" name="subject" value="[s`Website request`]">
                      <textarea class="rfield" name="body">{$wa->post("body")|escape}</textarea>
                    </div>
                  </div>
                  <div class="wa-field">
                    <div class="wa-value wa-submit">
                      <input type="submit" value="Заказать" name="send" class="blue-btn">
                    </div>
                  </div>
                  </form>
                </div>
            </div>
            {literal}
            <script>
                (function( $ ){
    
                    $(function() {
    
                      $('.rf').each(function(){
                        // Объявляем переменные (форма и кнопка отправки)
                        var form = $(this),
                            btn = form.find('input[type="submit"]');
    
                        // Добавляем каждому проверяемому полю, указание что поле пустое
                        form.find('.rfield').addClass('empty_field');
    
                        // Функция проверки полей формы
                        function checkInput(){
                          form.find('.rfield').each(function(){
                            if($(this).val() != ''){
                              // Если поле не пустое удаляем класс-указание
                            $(this).removeClass('empty_field');
                            } else {
                              // Если поле пустое добавляем класс-указание
                            $(this).addClass('empty_field');
                            }
                            if($(this).hasClass('mailfield')) {
                                var mailfield = $(this);
                                var pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i;
                                if(pattern.test(mailfield.val())){
                                  mailfield.removeClass('empty_field');
                                } else {
                                  mailfield.addClass('empty_field');
                                }
                            }
                          });
                        }
    
                        // Функция подсветки незаполненных полей
                        function lightEmpty(){
                          form.find('.empty_field').css({'border-color':'#d8512d'});
                          // Через полсекунды удаляем подсветку
                          setTimeout(function(){
                            form.find('.empty_field').removeAttr('style');
                          },500);
                        }
    
                        // Проверка в режиме реального времени
                        setInterval(function(){
                          // Запускаем функцию проверки полей на заполненность
                          checkInput();
                          // Считаем к-во незаполненных полей
                          var sizeEmpty = form.find('.empty_field').size();
                          // Вешаем условие-тригер на кнопку отправки формы
                          if(sizeEmpty > 0){
                            if(btn.hasClass('disabled')){
                              return false
                            } else {
                              btn.addClass('disabled')
                            }
                          } else {
                            btn.removeClass('disabled')
                          }
                        },500);
    
                        // Событие клика по кнопке отправить
                        btn.click(function(){
                          if($(this).hasClass('disabled')){
                            // подсвечиваем незаполненные поля и форму не отправляем, если есть незаполненные поля
                            lightEmpty();
                            return false
                          } else {
                            // Все хорошо, все заполнено, отправляем форму
                            form.submit(function(){
                                form.find('.callback-name').val('');
                                form.find('.rfield').each(function(){
                                    $(this).val('');
                                });
                            });
                          }
                        });
                      });
                    });
    
                })( jQuery );
            
            </script>
            {/literal}
        </div>
    
  • 2
    Андрей Герасимов 22 октября 2016 13:29 #

    В форме должно быть скрытое поле name="_csrf" и значение ключа, для проверки подленности.

    Просто добавь в форму конструкцию {$wa->csrf()} и будет счастье.

    Подробнее тут: https://developers.webasyst.ru/features/csrf/

  • 1

    Добрый вечер, столкнулся с проблемой, у знакомого при вызове окна с post выскакивает 403, все {$wa->csrf()} и для AJAX я ставил результат 0

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите