2013-08-22 20 views
5

Co chcę zrobić, to chronić niektóre wrażliwe formularze przed CSRF ataku w codeigniter, ale nie wszystkie strony.CodeIgniter używać ochrony CSRF tylko na niektórych stronach

Aby chronić przed CSRF, jeśli ustawię go w config.php, dotyczy wszystkich stron. Czy jest jakiś sposób, aby zrobić to tylko dla niektórych stron, ustawiając w kontrolerze?

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

Ta funkcja została zaimplementowana w CI 3.0-DEV. Jeśli używasz v2.x CI, spójrz na tę odpowiedź i spróbuj: http://stackoverflow.com/a/15860653/1725764 –

+0

@HashemQolami dziękuję, proszę zostawić to jako odpowiedź, aby zaakceptować. – esrpim

+0

IMHO, podając dokładną odpowiedź, nie jest dobrym poczęstunkiem, będzie to powielona treść. Wysłałem link do podobnego pytania, które powinno pozostać jako odniesienie. –

Odpowiedz

7

Można to zrobić poprzez edycję pliku config.php

$config['csrf_protection'] = FALSE; 

Krok 1: utwórz tablicę stron, które chcesz chronić:

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

Krok 2: sprawdź, czy istnieje żądanie strony chronionej, a następnie ustaw ją na PRAWDA;

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

} 

Krok 3: dodaj do Twoich poglądów

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

lub po prostu użyć funkcji form_open(), aby dodać ukrytą CSRF tokena pole automatycznie.

+0

Użyłem tego dla $ config ['csrf_regenerate'], a także odwrotnie, tak, że wartość domyślna to prawda, a ja wyłączam ją tylko dla moich stron ajaxowych. Nie jest dobrze, aby wyłączyć CSRF, ale wyłączenie trybu odzyskiwania jest działającą poprawką. – qwertzman