【发布时间】:2017-06-14 19:40:29
【问题描述】:
我正在尝试学习如何通过 ajax 请求传递 csrf 令牌(我正在使用 Laravel),因为我的 ajax url 返回 500,因为它没有被赋予 csrf 令牌。
使用获取请求是否不太安全?人们可以欺骗来自外部站点的请求吗?我只是在寻找没有任何安全漏洞的最佳方法。
这是我的 ajax 代码:
saveHousekeepingNotes();
function saveHousekeepingNotes() {
$.ajax({
url: "/ajax/save-notes",
type: "POST",
data: 'Here we have some data.',
beforeSend: function(xhr) {
$('.notes-status-holder').html('Saving...');
},
success: function(data) {
var jqObj = jQuery(data);
var d = new Date();
$('.notes-status-holder').html('autosaved ' + d.toLocaleTimeString());
setInterval(function() {
saveHousekeepingNotes();
}, 5 * 1000);
},
});
}
在我的刀片文件中:
<script>$.ajaxSetup({ headers: { 'csrftoken' : '{{ csrf_token() }}' } });</script>
在我的路线中:
Route::group(['middleware' => 'ajax', 'prefix' => 'ajax'], function() {
Route::any('/save-notes', 'AjaxController@saveNotes');
});
在我的 ajax 控制器中:
<?php
namespace App\Http\Controllers\Admin\Admin;
use Illuminate\Http\Request;
use Cache;
use Auth;
use App\Database\Website\User\Roleplay;
class AjaxController
{
public function saveNotes()
{
if (!Auth::guest()) {
$roleplay = Roleplay::where('user_id', Auth::user()->id)->first();
$roleplay->housekeeping_notes = 'We saved it:) ' . rand(10,40);
$roleplay->save();
}
}
}
我的 ajax 中间件只是检查 $request->ajax() 来验证它是一个 ajax 调用。所以我基本上要问的是如何安全地传递 csrf 令牌? Laravel 能解决这个问题吗?或者有更好的方法吗..
【问题讨论】:
标签: javascript php jquery ajax laravel