Ricerca…


introduzione

Ricorda CodeIgniter è un framework di sviluppo. Non si sforza di rendere la tua applicazione sicura. Ti dà solo gli strumenti per farlo da solo. Se si guarda alla pagina di sicurezza di CI, è chiaro che si aspettano che lo sviluppatore comprenda Application Security e lo crei nella propria applicazione.

Se la sicurezza WebApp è relativamente nuova per te, vorrei iniziare con OWASP. Potrebbe essere vantaggioso guardare altri quadri come Zend o Cake che credo facciano cose più in anticipo

Sintassi

  • $ freshdata = $ this-> security-> xss_clean ($ user_input_data);

Parametri

array di input dell'utente vuoto
inserisci un array di input utente in xss_filter($array of user input) vuoto

Prevenzione XSS

XSS significa scripting cross-site. CodeIgniter viene fornito con la sicurezza del filtro XSS. Questo filtro impedisce qualsiasi codice JavaScript dannoso o qualsiasi altro codice che tenta di dirottare i cookie e attività dannose. Per filtrare i dati attraverso il filtro XSS, utilizzare il metodo xss_clean () come mostrato di seguito.

$data = $this->security->xss_clean($data);

È necessario utilizzare questa funzione solo quando si inviano dati. Il secondo parametro booleano opzionale può anche essere utilizzato per controllare il file di immagine per l'attacco XSS. Questo è utile per la funzione di caricamento dei file. Se il suo valore è vero, significa che l'immagine è sicura e non altrimenti.

SQL Injection Prevention

SQL injection è un attacco effettuato sulla query del database. In PHP, usiamo la funzione mysql_real_escape_string () per prevenire questo insieme ad altre tecniche, ma CodeIgniter fornisce funzioni e librerie integrate per impedirlo.

Possiamo prevenire SQL Injection in CodeIgniter nei seguenti tre modi:

  • Escaping Queries
  • Richiesta di query
  • Classe di registrazione attiva

Escaping Queries

<?php
   $username = $this->input->post('username');
   $query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
   $this->db->escape($email);
   $this->db->query($query);
?>

$this->db->escape() aggiunge automaticamente virgolette singole ai dati e determina il tipo di dati in modo che possa sfuggire solo ai dati di stringa.

Richiesta di query

<?php
   $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
   $this->db->query($sql, array(3, 'live', 'Rick'));
?>

Nell'esempio sopra, il punto interrogativo (?) Sarà sostituito dall'array nel secondo parametro della funzione query() . Il vantaggio principale della creazione di query in questo modo è che i valori vengono automaticamente sottoposti a escape che generano query sicure. Il motore CodeIgniter lo fa automaticamente, quindi non devi ricordarlo.

Classe di registrazione attiva

<?php
   $this->db->get_where('subscribers_tbl',array('status'=> active','email' => '[email protected]'));
?>

Utilizzando i record attivi, la sintassi delle query viene generata da ciascun adattatore del database. Permette anche query più sicure, poiché i valori scappano automaticamente.

Nascondere gli errori PHP

Nell'ambiente di produzione, spesso non vogliamo mostrare alcun messaggio di errore agli utenti. È buono se è abilitato nell'ambiente di sviluppo per scopi di debug. Questi messaggi di errore possono contenere alcune informazioni, che non dovremmo mostrare agli utenti del sito per motivi di sicurezza.

Esistono tre file CodeIgniter correlati agli errori. Livello di segnalazione errori PHP

L'ambiente diverso richiede diversi livelli di segnalazione degli errori. Per impostazione predefinita, lo sviluppo mostrerà errori ma test e live li nasconderanno. C'è un file chiamato index.php nella directory principale di CodeIgniter, che viene utilizzato per questo scopo. Se passiamo zero come argomento alla funzione error_reporting () allora questo nasconderà tutti gli errori.

Prevenzione CSRF

CSRF è sinonimo di contraffazione di richieste cross-site. Puoi prevenire questo attacco abilitando un'opzione nel file application / config / config.php come mostrato sotto.

$config['csrf_protection'] = TRUE;

Quando crei un modulo utilizzando la funzione form_open() , verrà automaticamente inserito un token CSRF in un campo nascosto. È inoltre possibile aggiungere manualmente il token CSRF utilizzando la funzione get_csrf_token_name() e get_csrf_hash() . Come suggeriscono i loro nomi, la funzione get_csrf_token_name() restituirà il nome del token CSRF, mentre get_csrf_hash() restituirà l'hash.

Il token CSRF può essere rigenerato ogni volta per l'invio o è possibile mantenerlo uguale per tutta la durata del cookie CSRF. L'impostazione dell'opzione di configurazione 'csrf_regenerate' imporrà la rigenerazione del token come mostrato di seguito.

$config['csrf_regenerate'] = TRUE;

Puoi autorizzare gli URL dalla protezione CSRF impostando le relative corrispondenze nell'array di configurazione utilizzando la chiave 'csrf_exclude_uris' come mostrato di seguito. Puoi anche usare espressioni regolari.

$config['csrf_exclude_uris'] = array('api/person/add');

Rimuovi i dati di abuso dall'input dell'utente

// XSS Filtering
$data = array(
             'name'=> '<script>Abuse Data</script>'
        );
$data = $this->security->xss_clean($data); // Clean Data

// Escaping Queries
<?php $username = $this->input->post('username'); $query = 'SELECT * FROM subscribers_tbl WHERE user_name = '. $this->db->escape($email); $this->db->query($query); ?>

Prevenzione XSS su input dell'utente

Non fare affidamento su alcun input da parte dell'utente. input dell'utente tutto come tag <script> o qualsiasi javascript alert(); quindi dobbiamo impedire che tutti i dati vengano eseguiti nel nostro browser. quindi dobbiamo usare il metodo di prevenzione xss per limitare i nostri dati protetti a mano hacker e inoltre è responsabilità dello sviluppatore per la convalida dell'input dell'utente e risolvere l'errore in modo programmatico.

quindi, verifica che questo sia un esempio della prevenzione di xss in CodeIgniter.

$data = array(
            'name' => "<script>alert('abc')</script>",
            'email' => "[email protected]"
        );
var_dump($data);
// Print array without xss cleaning/xss filtering

array(2) { ["name"]=> string(29) "" ["email"]=> string(19) "[email protected]" } // Result with alert

// now print data after xss filtering

$data = $this->security->xss_clean($data);
var_dump($data);

//Print array without xss cleaning/xss filtering
array(2) { ["name"]=> string(38) "[removed]alert('abc')[removed]" ["email"]=> string(19) "[email protected]" } // Result Without alert

quindi, dopo aver aggiunto xss_filtering, non abbiamo alcun problema per eseguire codice di abuso che viene inserito dall'utente. e CodeIgniter sostituisce questo tag di abuso con la parola chiave [removed] .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow