:
csrf- javascript-
csrf, ( )
Slim-Csrf -middleware , , .
api 5 csrf, api csrf-.
api .
$app->get('/foo', function ($request, $response, $args) {
$tokens = [];
for ($i = 0; $i < 5; $i++) {
$tokens[] = $this->csrf->generateToken();
}
return $response->withJson($tokens);
});
csrf- .
Guard::generateToken() - :
array (size=2)
'csrf_name' => string 'csrf58e669ff70da0' (length=17)
'csrf_value' => string '52ac7689d3c6ea5d01889d711018f058' (length=32)
csrf-
Slim-Csrf . Guard::setPersistentTokenMode(bool). :
$container['csrf'] = function ($c) {
$guard = new \Slim\Csrf\Guard;
$guard->setPersistentTokenMode(true);
return $guard;
};
PhpDoc persistanceTokenMode -attribute
ajax.
, , csrf.
, .
var requestQueue = [];
var isInRequest = false;
var csrfKey = '';
var csrfValue = '';
function newRequest(onSuccessCallback, data) {
requestQueue.push(function() {
isInRequest = true;
$.ajax({
data: xxx
url: "serverscript.xxx",
success: function(data) {
isInRequest = false;
tryExecuteNextRequest();
onSuccessCallback(data);
}
}});
);
tryExecuteNextRequest();
}
function tryExecuteNextRequest() {
if(!isInRequest && requestQueue.length != 0) {
var nextRequest = requestQueue.shift();
nextRequest();
}
}