Witam.
Jak w temacie.
Jest to zarazem zabezpieczenie przed wielokrotnym wysłaniem tego samego formularza.
Proszę o uwagi.
Generowanie:
function csrf_generate() {
$output = pack('L', $time); $crypt_key = 'ciąg znaków znany tylko serwerowi';
}
Walidowanie:
function csrf_decode( $string ) {
$time = substr($string, 0
, 4
); $crypt_key = 'ciąg znaków znany tylko serwerowi';
return false;
}
}
function csrf_validate() {
if ( ! isset($_POST['csrf']) OR
! is_string($_POST['csrf']) OR
'' === $csrf = $_POST['csrf'] ) { return false;
}
if ( false === $time = csrf_decode($csrf)) {
return false;
}
if ( $time > $session->last_form_time ) {
// aktualizujemy czas wysłania ostatniego formularza,
// przez co wszystkie wygenerowane do tej pory tookeny tracą ważność,
// to zabezpiecza przed wieloktornym wysłaniem tego samego formularza.
$session->last_form_time = time(); $session->update();
return true;
}
return false;
}