2017-04-06 65 views
1

我有一个页面,我想要发送一个POST来触发数据库更新。该请求将来自另一个网站。Laravel 5.3 POST和tokenmismatch

Route::post('update', '[email protected]'); 

该请求包括单个元件

(原始)

id=12345 

(形式数据)

id: 12345 

每当存取该网页,出现此错误

TokenMismatchException in VerifyCsrfToken.php line 68: 

回答

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库令牌自动添加到所有请求头。这提供了简单,方便CSRF保护您的基于AJAX的应用程序:

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

Reference

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

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

从CSRF验证中排除了该数组中传递的URL。

+0

我真的没有什么比在“发件人”发送任何控制。我所知道的确实是有一个叫做“id”的元素,它有一个5位数字的ID。 – aserwin

+0

在大家参考,我确实发现介绍如何从CSRF排除URI的一个部分!所以,这解决了我的问题!谢谢。 – aserwin

+1

检查更新后的答案。 –