Laravel 5.3 POST和tokenmismatch(Laravel 5.3 POST an

2019-09-27 08:14发布

我有我想有发送到将触发数据库更新发布的页面。 该请求将来自于其他网站。

Route::post('update', 'DatabaseController@update');

该请求包括单个元件

(生的)

id=12345

(形式数据)

id: 12345

每当我访问该页面,我得到这个错误

TokenMismatchException in VerifyCsrfToken.php line 68:

Answer 1:

Laravel可以很容易地防止跨站请求伪造(CSRF)攻击你的应用程序。 跨站请求伪造是一种类型的恶意的利用,由此非法命令代表认证的用户执行的。

Laravel自动生成用于由应用程序管理的每个活动用户会话的CSRF“令牌”。 此令牌用于验证身份验证的用户实际上是发出请求的应用程序之一。

你在你的应用程序中定义一个HTML表单任何时候,你应该包括一个隐藏的CSRF令牌场的形式,这样的CSRF保护中间件可以验证请求。 您可以使用csrf_field助手生成令牌领域:

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

此外,在查阅了CSRF令牌作为POST参数,则VerifyCsrfToken中间件也将检查的X CSRF-TOKEN请求头。 你可以,例如,存储在一个HTML meta标签的标记:

<meta name="csrf-token" content="{{ csrf_token() }}">

然后,一旦你已经创建了meta标签,你可以指示像jQuery库自动将令牌添加到所有请求头。 这为您的基于AJAX的应用程序简单,方便CSRF保护:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

参考

注意:要排除CSRF验证一些URI的去project/app/Http/Middleware ,打开文件VerifyCsrfToken.php并通过您的网址,如:

protected $except = [
    '/api/authuser',
];

此阵列中的传递的URL是从跨站请求伪造验证排除的URI。



文章来源: Laravel 5.3 POST and tokenmismatch