2015-05-10 14 views
7

Ho una funzione ajax che attiva una cancellazione di voce dal mio database.Yii 2.0 Convalida CSRF per richiesta AJAX

Ho bisogno di fare la convalida CSRF per lo stesso. Come lo posso fare?

Sto inviando il CSRF cookie insieme alla mia richiesta di posta, ma Yii 2.0 non lo convalida e qualsiasi input che è passato attraverso ajax sta raggiungendo il server.

Come effettuare la convalida CSRF per richieste Ajax.

Se è necessario impostare manualmente cookie e verificare?

risposta

3

Non è necessario impostare manualmente i cookie.

Se si utilizza il token CSRF jQuery verrà inviato automaticamente.

Per esempio per AngularJS è possibile aggiungere manualmente alla richiesta params del genere:

yii.getCsrfParam(): yii.getCsrfToken() 

Accertarsi di aver YiiAsset incluso.

Altrimenti potete recuperarli da meta tag (che è fondamentalmente ciò che questi due metodi fanno):

$('meta[name=csrf-param]').prop('content'): $('meta[name=csrf-token]').prop('content') 

anche notare che per abilitare la convalida CSRF entrambi Controller 's e Request' s immobili enableCsrfValidation deve essere impostata a true.

Aggiornamento:

Un'altra cosa importante da capire:

CSRF token viene convalidato solo su questo metodo: GET, HEAD, OPTIONS.

Assicurarsi inoltre di avere <?= Html::csrfMetaTags ?> nel layout principale.

+0

Bu come convalida ... Cosa devo scrivere nell'azione del controller per verificare se è convalidato o meno? –

+0

Cosa intendi per convalida? – arogachev

+0

Voglio dire quando qualcuno invia dati senza dati csrf corretti, non dovrebbe essere in grado di fare l'azione del controller –

0

Infine ho identificato che proprio tra cui

<?= Html::csrfMetaTags() ?>

nel layout di posta aggiungerà automaticamente la convalida CSRF per ogni post/get richieste se si tratta di Ajax o not.We non avete bisogno di inviare manualmente CSRF gettone con AJA

<?= Html::csrfMetaTags() ?>

la richiesta sta fallendo e gettando l'exception..So era il mio mistake..Just aggiungendo <?= Html::csrfMetaTags() ?>

farà convalida CSRF se si tratta di Ajax o non presentazione richiesta AJAX/form ..

Tanto di cappello a Yii 2.0 inventori per cose così fantastiche # love-yii-2.0