【发布时间】:2016-02-15 18:21:29
【问题描述】:
我的应用程序中有 RESTfull api,使用这样的 AJAX PUT 请求:
$.ajax({
method: "PUT",
url: "/device/{{ $client->id }}",
async: false,
data: {
javascript_enabled: $('#javascript-enabled').text(),
cookies_enabled: $('#cookies-enabled').text(),
device_pixel_ratio: $('#device-pixel-ratio').text(),
screen_resolution: $('#screen-resolution').text(),
browser_window: $('#browser-window').text(),
local_time: $('#local-time').text(),
local_time_zone: $('#local-time-zone').text(),
_token: "{{ csrf_token() }}"
},
success: function(data)
{
alert('success');
},
error: function (jqXHR, textStatus, errorThrown)
{
alert( "Internal server error occurred.");
}
});
当我在浏览器中启用 cookie 时,此代码可以正常工作。
但是,当我禁用 cookie 时,我得到“TokenMismatchException”。
我已经通过将这一行放在“App\Http\Middleware\VerifyCsrfToken”类中解决了这个问题:
protected $except = [
'device/*'
];
有什么方法可以在不禁用对该路由的 csrf 检查的情况下解决这个问题?
【问题讨论】:
-
为什么该特定请求没有 csrf 异常?
-
这样做有没有安全漏洞。只要安全性完好,我实际上对这种方法没问题。
-
是的,我给你详细一点