Laravel CSRF令牌

Gab*_*ich 8 csrf laravel

编辑:我应该在开始时说这个,我在FronEnd中使用AngularJS,我通过XHR提出所有请求.我正在CSRF Token为每个用户请求开发一个Application .

我应该Token在每次请求后重新生成吗?

就像是

Session::forget("_token") and Session::put("_token", RANDOM_SOMETHING)
Run Code Online (Sandbox Code Playgroud)

或者每个用户使用相同的一个是否足够Session

有什么好处吗?

小智 18

Laravel 5使用Blades模板,非常简单.

如果您只想要csrf标记的值,可以通过编写以下内容来生成它:

{{ csrf_token() }}
Run Code Online (Sandbox Code Playgroud)

它生成令牌值,如下所示:

7YC0Sxth7AYe4RFSjzaPf2ygLCecJhPbyXhz6vvF
Run Code Online (Sandbox Code Playgroud)

如果您使用的是表单,则可以在表单中添加以下代码行:

{{ csrf_field() }}
Run Code Online (Sandbox Code Playgroud)

这将生成像这样的HTML:

<input type="hidden" name="_token" value="7YC0Sxth7AYe4RFSjzaPf2ygLCecJhblahblah">
Run Code Online (Sandbox Code Playgroud)


due*_*lsy 8

Laravel应该为你做这个,你不需要管理创建/删除 _token

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
Run Code Online (Sandbox Code Playgroud)

请参阅此处文档中的"CSRF保护"部分:http://laravel.com/docs/security

  • 我尝试过使用 Session::token() 和其他方法来检索令牌,但 Laravel 不会重新生成令牌,我的问题是我是否应该重新生成令牌或者只是在整个会话中使用相同的令牌 (2认同)

Joy*_*yal 6

如果您使用的是Laravel 5.6,请在表单顶部执行以下操作,为CSRF令牌创建隐藏的输入字段

  @csrf
Run Code Online (Sandbox Code Playgroud)


hle*_*lev 5

要看。如果攻击者不是MITM,就他们无法窃听Web应用程序与API服务器之间的流量的意义而言,则整个会话的单个CSRF令牌就足够了。

假设您也保护服务器端的敏感操作(即,仅允许资源所有者访问资源,例如“删除我的帐户”等),令牌将确保发出请求的浏览器是经过验证的合法主机用户的浏览器。我想,这就是您应该担心的。

另一方面,如果攻击者能够查看Web应用程序与您的API之间的不安全流量,则他们可能会持有CSRF令牌和您的session_id,并透明地进行恶意行为。在这种情况下,为每个请求(POST,或任何执行敏感操作的令牌)授予,使用并随后丢弃令牌只会使他们的工作更加困难,但是您仍然注定要失败。

我的2分钱