Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CSRF(跨站点请求伪造)在Laravel中无法正常工作_Php_Laravel_Laravel 4_Laravel 5_Csrf - Fatal编程技术网

Php CSRF(跨站点请求伪造)在Laravel中无法正常工作

Php CSRF(跨站点请求伪造)在Laravel中无法正常工作,php,laravel,laravel-4,laravel-5,csrf,Php,Laravel,Laravel 4,Laravel 5,Csrf,我正在使用“Laravel代码Bright”学习Laravel。在本书的“表单安全性”部分,它讨论了Laravel在使用Form::Open()方法生成表单输入时如何生成秘密隐藏代码以防止“CSRF-跨站点请求伪造” 我尝试了一个示例来访问将使用外部表单处理表单的路由。首先,我没有在路由上附加“=>”csrf“之前的”过滤器,我得到了我期望的答案,即外部表单能够访问路由 对于第二个测试,我在路由中添加了“=>“csrf”过滤器之前的。当我点击外部表单的submit按钮时,页面持续加载了很长一段时

我正在使用“Laravel代码Bright”学习Laravel。在本书的“表单安全性”部分,它讨论了Laravel在使用
Form::Open()
方法生成表单输入时如何生成秘密隐藏代码以防止“CSRF-跨站点请求伪造”

我尝试了一个示例来访问将使用外部表单处理表单的路由。首先,我没有在路由上附加“=>”csrf“之前的”过滤器,我得到了我期望的答案,即外部表单能够访问路由

对于第二个测试,我在路由中添加了“=>“csrf”过滤器之前的。当我点击外部表单的submit按钮时,页面持续加载了很长一段时间,它放弃了,没有显示任何结果,页面是空白的。这意味着“=>”csrf“之前的”筛选器阻止此外部表单访问路由

在我的第三次测试中,我复制了原始表单的隐藏标记(通过查看浏览器的源代码页),并将其添加到外部表单中,然后再次尝试,并通过单击提交按钮,此外部表单给出了与第一次测试相同的结果,也就是说,它显示的结果意味着它能够通过我从原始表单添加的隐藏令牌访问路由

我的理解是,如果您向表单中添加隐藏令牌以防止“CSRF”,并且攻击者查看浏览器的源页面并复制隐藏令牌并将其添加到其表单中,他仍然可以将您的路由作为目标,因为隐藏令牌在浏览器的查看源页面中始终可见

我的问题是,即使攻击者复制隐藏的令牌并将其添加到表单中,是否有更好的方法来防止“CSRF”


am使用的外部表单位于Laravel的根文件夹之外。我还复制原始表单的“action”属性的值,以确定原始表单的路径。我从浏览器的查看源页面复制它。

您的测试是正确的,但您的理解是错误的

CSRF的全部目的是防止黑客在他们的页面上为另一个用户创建一个在你的页面上工作的表单。他们总是可以复制一个为自己工作的表单,因为他们知道自己的CSRF代码,但是他们永远不会知道其他用户的CSRF代码

无CSRF时:

CSRF攻击的工作方式是你的网站有一个“转账”的表单。攻击者在其页面上放置了一份伪造的“转账”表单副本

如果用户A登录到您的网站,并转到攻击者页面,攻击者可以诱使用户提交“转账”表单并为自己转账

由于用户A已登录到您的网站,传输表单将起作用,因为他们有一个有效的会话。但是没有CSRF检查,所以黑客“复制”的表单将适用于用户A

但使用CSRF时:

攻击者从您的网站复制表单-但他们不知道用户A的CSRF代码。他们只知道自己的代码。他们基本上不可能得到那个代码。因此,当用户A在黑客页面上提交“伪造”的“转账”表单时——它将失败——因为黑客无法包含CSRF令牌,因为他们不知道它


这就是如何防止CSRF攻击。

回答得不错。CSRF保护是保护用户不受他人的影响,而不是他们自己的影响。如果他们想删除自己的东西,他们可以。CSRF令牌仍然可以通过MitM攻击暴露,因此单独使用CSRF令牌不会阻止CSRF攻击。是@nCrazed-这是正确的。这就是为什么我把put
放在基本上*
——为了这个答案,我决定保持简单。还可能利用XSS漏洞获取CSRF令牌并以此方式发起攻击。@nCrazed:MITM通过使用TLS/SSL(HTTPS URL)得到缓解。