伙计我在Laravel 5中使用CSRF和ajax调用遇到了很多麻烦。
我在标题中发送每个ajax调用的X-CSRF令牌,如下所述:http://laravel.com/docs/master/routing#csrf-x-csrf-token
问题是,随机地无法验证令牌,我最终得到以下错误:
TokenMismatchException in VerifyCsrfToken.php line 46:
最终,在10次调用中有1次发生,但仍然使我的应用程序表现不佳,因为它非常依赖于这些ajax调用。
所以我在这里发布了这个问题,但我得到的最好的回应是“禁用CSRF”。
我有两个问题:
1)为ajax调用禁用CSRF会使我的网站容易受到攻击吗?
和
2)如果我找不到其他办法但禁用CSRF,还有其他方法可以保护吗?
答案 0 :(得分:3)
XSS攻击背后的想法是,其他网站会诱使用户使用他们的会话对您的应用程序执行操作。
有很多类型的XSS攻击。以下只是可能发生的一种类型的简单示例。
因此,假设您有一条删除网站的管理员路线:/self-destruct
。现在,假设您以管理员身份登录了您的网站。您可以访问该路线,但不会偶然发现它。
现在,我们的想法是,当您浏览网页时,您会遇到一个恶意网站,该网站会出于某种原因将您的浏览器重定向到您应用的/self-destruct
路径。
使用CSRF保护:恶意网站没有合适的CSRF令牌可以让您传递到您的路线。由于您的路线需要正确的CSRF令牌,因此您会收到TokenMismatchException
错误,并且您的网站没有问题。
没有CSRF保护:恶意网站不需要任何额外费用。他们将您(已登录的管理员用户)重定向到您的管理员自毁路由。您的网站现已消失。
安全始终是一种平衡行为。如果您认为您网站上的XSS攻击没有任何风险,那么请不要担心。如果您正在开发银行应用程序并且您不希望XSS攻击能够将任何易受攻击的用户的所有资金转移到离岸银行账户,那么CSRF将是一个好主意。