禁用Ajax呼叫的CSRF保护 - 有多糟糕?

时间:2015-07-16 17:08:53

标签: php ajax laravel laravel-5 csrf

伙计我在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,还有其他方法可以保护吗?

1 个答案:

答案 0 :(得分:3)

XSS攻击背后的想法是,其他网站会诱使用户使用他们的会话对您的应用程序执行操作。

有很多类型的XSS攻击。以下只是可能发生的一种类型的简单示例。

因此,假设您有一条删除网站的管理员路线:/self-destruct。现在,假设您以管理员身份登录了您的网站。您可以访问该路线,但不会偶然发现它。

现在,我们的想法是,当您浏览网页时,您会遇到一个恶意网站,该网站会出于某种原因将您的浏览器重定向到您应用的/self-destruct路径。

使用CSRF保护:恶意网站没有合适的CSRF令牌可以让您传递到您的路线。由于您的路线需要正确的CSRF令牌,因此您会收到TokenMismatchException错误,并且您的网站没有问题。

没有CSRF保护:恶意网站不需要任何额外费用。他们将您(已登录的管理员用户)重定向到您的管理员自毁路由。您的网站现已消失。

安全始终是一种平衡行为。如果您认为您网站上的XSS攻击没有任何风险,那么请不要担心。如果您正在开发银行应用程序并且您不希望XSS攻击能够将任何易受攻击的用户的所有资金转移到离岸银行账户,那么CSRF将是一个好主意。