2012-11-14 24 views
15

Ho la protezione CSRF abilitata sul mio sito, ma l'unica volta che il token CSRF viene inserito in un campo nascosto è quando viene utilizzato form_close(). Sto inviando i dati via ajax e ho bisogno di inviare anche il CSRF per prevenire i 500 errori.Ottenere il token CSRF Codeigniter senza un modulo?

Ho pensato che c'era un modo per incorporare esplicitamente il token CSRF nella pagina, ma non riesco a trovarlo.

Come posso ottenere il token CSRF quando non c'è un modulo sulla pagina?

+0

[Modulo Ajax + CSRF genera una richiesta non riuscita] (http://ellislab.com/forums/viewthread/230264/#1042793) –

+0

Sam in errato, imposta il token nella pagina tramite $ this-> security- > get_csrf_hash(); e quindi basta tirare il valore _TOKEN, es. dati: { _TOKEN: $ ('input [nome = "_ TOKEN"]'). val()}, –

risposta

39

È possibile ottenere il nome del token CSRF e valore attraverso la classe di sicurezza:

$this->security->get_csrf_hash(); 
$this->security->get_csrf_token_name(); 
+4

Strano, non è stato trovato nella documentazione, ma è esattamente quello che stavo cercando. grazie – Motive

+2

grazie .. puoi farmi sapere come convalidarlo. – nilesh

11

aggiungerlo alla forma in questo modo

<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>"> 
0

Ecco un esempio che mostra come abilitare CSRF modalità di attacco:

<script> 
 
    
 
    var cct = '<?php echo $this->security->get_csrf_hash() ?>'; 
 
    var get_csrf_token_name = '<?php echo $this->security->get_csrf_token_name() ?>'; 
 
    
 
    $.ajaxSetup({ 
 
    type:'post', 
 
    data:{ <?php echo $this->security->get_csrf_token_name() ?> :cct} 
 
    }); 
 
    
 
    
 
    var siteurl = '<?= site_url()?>';   
 
     
 
    </script>