2017-02-21 34 views
2

Я довольно новичок в PHP и Laravel, и у меня есть следующие сомнения относительно {{csrf_field()}} обозначение вставлено в <form>.Почему, если я не помещаю {{csrf_field()}} в конце формы (в представлении Laravel 5), я получаю исключение TokenMismatchException?

В целях у меня есть следующий вид:

<form method="post" action="/registration"> 
 

 
    <div class="form-group"> 
 
    <label>Nome</label> 
 
    <div class="input-group"> 
 
     <div class="input-group-addon"><i class="fa fa-user"></i></div> 
 
     <input type="text" name="name" class="form-control" placeholder="Inserisci il tuo nome"> 
 
    </div> 
 
    </div> 
 

 
    <div class="form-group"> 
 
    <label>Cognome</label> 
 
    <div class="input-group"> 
 
     <div class="input-group-addon"><i class="fa fa-user"></i></div> 
 
     <input type="text" name="surname" class="form-control" placeholder="Inserisci il tuo cognome"> 
 
    </div> 
 
    </div> 
 

 
    <!-- Some other fields --> 
 

 
    {{csrf_field()}} 
 

 
    <button type="submit" class="btn btn-default">Submit</button> 
 

 
</form>

Это обрабатывается этим minimialistic метод контроллера:

public function store(Request $request) 
{ 
    return $request->all(); 
} 

Так что, если я поставил {{csrf_field()}} «statment» перед кнопкой «Отправить» работает отлично и t он правильно обрабатывается методом контроллера, но если я удалю эту строку, он не сможет работать, и я получаю TokenMismatchException.

Почему это так и что именно представляет это {{csrf_field()}} и почему я должен использовать его в форме?

+0

Для метода запроса он ищет токен csrf –

ответ

2

CSRF означает Подложные материалы Под заказ.

В этом случае Laravel требует, чтобы это поле было отправлено с запросом, чтобы он мог проверить, что запрос не является подделкой при отправке назад.

Хорошее объяснение можно найти здесь: https://stackoverflow.com/a/33829607/1068537

4

Laravel позволяет легко защитить ваше приложение от атак с использованием подделок (CSRF). Кросс-сайт подделок запросов - это тип злонамеренного использования, при котором несанкционированные команды выполняются от имени аутентифицированного пользователя. Laravel автоматически генерирует «токен» CSRF для каждого активного сеанса пользователя, управляемого приложением. Этот токен используется для проверки того, что аутентифицированный пользователь является тем, кто действительно делает запросы к приложению. Каждый раз, когда вы определяете HTML-форму в своем приложении, вы должны указать скрытое поле токена CSRF в форме, чтобы промежуточное ПО защиты CSRF могло проверить запрос.

Для получения дополнительной информации обратитесь к CSRF Protection documentation.

+0

Хорошо, я только сомневаюсь, что я не являюсь аутентифицированным пользователем. Это общедоступная страница. Итак, как точно работает? –

1

Короткий ответ, чтобы предотвратить запрос Подделка межсайтовых

запрос Подделка межсайтовых, также известный как один клик нападение или сеанс верховая езда и сокращенно CSRF или XSRF - это тип злонамеренного использования веб-сайта, на котором неавторизованные команды передаются от пользователя, которому доверяет веб-сайт. [2] В отличие от межсайтового скриптинга (XSS), который использует доверие пользователя для определенного сайта, CSRF использует доверие, которое имеет сайт в браузере пользователя .

Подробнее о https://laravel.com/docs/5.4/csrf

На простом английском языке, она используется, чтобы убедиться, что представленная форма была сгенерирована с сервера и применяется в браузере пользователя, а не робот или любого рода программного агента ,

Очень важно обрабатывать CSRF, используете ли вы фреймворк, например, Laravel или нет.