2013-08-22 11 views
5

Quello che voglio fare è proteggere alcuni moduli sensibili dall'attacco CSRF in codeigniter ma non tutte le pagine.CodeIgniter utilizza la protezione CSRF solo in alcune pagine

Per proteggere da CSRF se l'ho impostato in config.php vale per tutte le pagine. c'è un modo per farlo solo per alcune pagine impostando nel controller?

$config['csrf_protection'] = TRUE; 
+3

Questa funzione è stata implementata in CI 3.0-DEV, se si utilizza v2.x di CI, dare un'occhiata a questa risposta e provarla: http://stackoverflow.com/a/15860653/1725764 –

+0

@HashemQolami grazie, per favore lasciatelo come risposta per accettare. – esrpim

+0

IMHO, in posa una risposta esatta non è una buona sorpresa, sarà contenuto duplicato. Ho pubblicato il link di una domanda simile che dovrebbe rimanere come riferimento. –

risposta

7

È possibile farlo modificando il file config.php

$config['csrf_protection'] = FALSE; 

Fase 1: creare una serie di pagine che si desidera proteggere

es. $csrf_pages = array('login','test');

Passaggio 2: verificare se è presente una richiesta per la pagina protetta, quindi impostarla su VERO;

if (isset($_SERVER["REQUEST_URI"])) { 
    foreach ($csrf_pages as $csrf_page){ 
     if(stripos($_SERVER["REQUEST_URI"],$csrf_page) !== FALSE) { 
      $config['csrf_protection'] = TRUE; 
      break; 
     } 
    } 

} 

Fase 3: aggiungere questo al vostro punto di vista

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

o semplicemente utilizzare la funzione Form_Open() per aggiungere automaticamente il campo token CSRF nascosta.

+0

Ho usato questo per $ config ['csrf_regenerate'] invece e anche il contrario in modo che il default sia vero e lo disabilito solo per le mie pagine ajax. Non è bene disabilitare CSRF ma disattivare la rigenerazione è una correzione funzionante. – qwertzman