CodeIgniter - Sicurezza

Prevenzione XSS

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

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

Dovresti usare questa funzione solo quando invii i dati. Il secondo parametro booleano opzionale può essere utilizzato anche per controllare il file 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.

Prevenzione di SQL Injection

L'iniezione di SQL è un attacco effettuato sulla query del database. In PHP, usiamomysql_real_escape_string() funzione per prevenire ciò insieme ad altre tecniche, ma CodeIgniter fornisce funzioni e librerie integrate per impedirlo.

Possiamo prevenire SQL Injection in CodeIgniter nei seguenti tre modi:

  • Query in fuga
  • Richiesta di query
  • Classe record attiva

Query in fuga

<?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() La funzione aggiunge automaticamente virgolette singole attorno ai dati e determina il tipo di dati in modo che possa sfuggire solo ai dati 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 precedente, il punto interrogativo (?) Verrà sostituito dall'array nel secondo parametro della funzione query (). Il vantaggio principale di creare query in questo modo è che i valori vengono automaticamente sottoposti a escape, il che produce query sicure. Il motore CodeIgniter lo fa per te automaticamente, quindi non devi ricordarlo.

Classe record attiva

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

Utilizzando i record attivi, la sintassi della query viene generata da ogni adattatore di database. Consente inoltre query più sicure, poiché i valori escono automaticamente.

Nascondere gli errori PHP

Nell'ambiente di produzione, spesso non si desidera visualizzare alcun messaggio di errore agli utenti. Va bene 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

Un ambiente diverso richiede diversi livelli di segnalazione degli errori. Per impostazione predefinita, lo sviluppo mostrerà gli errori ma il test e il live li nasconderanno. C'è un file chiamatoindex.phpnella directory principale di CodeIgniter, che viene utilizzata per questo scopo. Se passiamo zero come argomento aerror_reporting() funzione quindi che nasconderà tutti gli errori.

Errore di Database

Anche se hai disattivato gli errori PHP, gli errori MySQL sono ancora aperti. Puoi disattivarlo inapplication/config/database.php. Impostare ildb_debug opzione in $db array su FALSE come mostrato di seguito.

$db['default']['db_debug'] = FALSE;

Registro degli errori

Un altro modo è trasferire gli errori nei file di registro. Quindi, non verrà mostrato agli utenti sul sito. Semplicemente, imposta il filelog_threshold valore in $config array a 1 pollice application/cofig/config.php file come mostrato di seguito.

$config['log_threshold'] = 1;

Prevenzione CSRF

CSRF sta per cross-site request forgery. Puoi prevenire questo attacco abilitandolo nel fileapplication/config/config.php file come mostrato di seguito.

$config['csrf_protection'] = TRUE;

Quando crei un modulo usando form_open()funzione, inserirà automaticamente un CSRF come campo nascosto. Puoi anche aggiungere manualmente il CSRF utilizzando il fileget_csrf_token_name() e get_csrf_hash()funzione. Ilget_csrf_token_name() la funzione restituirà il nome del CSRF e get_csrf_hash() restituirà il valore hash di CSRF.

Il token CSRF può essere rigenerato ogni volta per l'invio oppure puoi mantenerlo uguale per tutta la vita del cookie CSRF. Impostando il valoreTRUE, nell'array di configurazione con chiave ‘csrf_regenerate’ rigenererà il token come mostrato di seguito.

$config['csrf_regenerate'] = TRUE;

Puoi anche autorizzare gli URL dalla protezione CSRF impostandoli 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');

Gestione delle password

Molti sviluppatori non sanno come gestire la password nelle applicazioni web, motivo per cui molti hacker trovano così facile entrare nei sistemi. Tenere presente i seguenti punti durante la gestione delle password:

  • NON memorizzare le password in formato testo normale.

  • Esegui sempre l'hash delle tue password.

  • NON utilizzare Base64 o codifiche simili per memorizzare le password.

  • NON utilizzare algoritmi di hashing deboli o non funzionanti come MD5 o SHA1. Utilizza solo algoritmi di hashing delle password complessi come BCrypt, che viene utilizzato nelle funzioni di hash delle password di PHP.

  • NON visualizzare o inviare mai una password in formato testo normale.

  • NON porre limiti inutili alle password dei tuoi utenti.