2012-08-28 14 views
6

Ciao ho un semplice form di login htmlCodeigniter: Come posso crittografare la password prima di inviare il modulo al controller?

<form method="post" action="http://www.mysite.com/login"> 

<input type="text" name="text_box" /> 
<input type="password" name="pass_word" /> 
<input type="submit" name="submit"> 

</form> 

quando ho inviare il modulo

e nel controller

public function login(){ 

$pass_word = $this->input->post('pass_word'); 
die($pass_word); 

} 

il problema qui, mostra la password pianura. se digito 123456 nel controller, ottengo 123456.

  1. è questo problema un titolo
  2. uno può ottenere la mia password tramite uno strumento di monitoraggio della rete come Wireshark.

come evitare questo. posso crittografare la password in vista, prima di inviare al controller, per favore aiutatemi, grazie in anticipo.

+3

http://en.wikipedia.org/wiki/Transport_Layer_Security – ManseUK

+1

usare JavaScript per questo .. puoi google un semplice script di crittografia md5. Basta codificare la password sul modulo di invio. – Vishal

+0

@vishal, se cifro la password puoi vedere il js e controllare qual è il metodo che ho usato per fare la crittografia, e penso che puoi decifrarlo –

risposta

11

Se i dati post (password, ecc) è stato intercettato, allora sarebbe solo essere visibile in testo semplice. L'uso di SSL/HTTPS fornirà la crittografia per i dati inviati. Non farei affidamento su JavaScript lato client o qualcosa di simile per gli scopi di autenticazione/registrazione in un utente. È probabile che anche i tuoi utenti siano più fiduciosi, visto che viene utilizzata una connessione sicura.

In primo luogo, mi limitavo a leggere su SSL e HTTPS in generale, così come i certificati SSL: Wiki, Google e SO sarebbero tutti posti in cui cercare, ci sono un sacco di informazioni là fuori.

Per utilizzando SSL/HTTPS con CI, ho trovato questi utili:

In particolare, la funzione di forzamento SSL da Nigel's post:

Creare un file in applicazione/di supporto chiamata ssl_helper.php

if (!function_exists('force_ssl')) 
{ 
    function force_ssl() 
    { 
     $CI =& get_instance(); 
     $CI->config->config['base_url'] = 
       str_replace('http://', 'https://', 
       $CI->config->config['base_url']); 
     if ($_SERVER['SERVER_PORT'] != 443) 
     { 
      redirect($CI->uri->uri_string()); 
     } 
    } 
} 

function remove_ssl() 
{ 
    $CI =& get_instance(); 
    $CI->config->config['base_url'] = 
        str_replace('https://', 'http://', 
        $CI->config->config['base_url']); 
    if ($_SERVER['SERVER_PORT'] != 80) 
    { 
     redirect($CI->uri->uri_string()); 
    } 
} 

carico l'aiutante, poi nel costruttore per qualsiasi controllore che richiede SSL, è sufficiente inserire:

force_ssl();

In ogni controller che non si desidera mettere in ssl:

if (function_exists('force_ssl')) remove_ssl();

Si tratta di un approccio programmatico, un altro modo sarebbe quello di utilizzare .htaccess (se si sta utilizzando Apache).

0

Passare attraverso http://codeigniter.com/user_guide/libraries/encryption.html. Tutto ciò che riguarda la crittografia e la decrittografia è descritto qui.

Esegue la crittografia dei dati e la restituisce come una stringa. Esempio:

$pass_word = $this->encrypt->encode(input->post('pass_word')); 

Decodifica una stringa codificata. Esempio:

$encrypted_pass_word = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84'; 

$plaintext_pass_word = $this->encrypt->decode($encrypted_pass_word); 

Si può opzionalmente passare la chiave di cifratura tramite il secondo parametro se non si desidera utilizzare quella nel file di configurazione. Passare attraverso il link per leggere la spiegazione dettagliata a riguardo.

+0

sì, posso fare la crittografia nel controller, il problema è che qualcuno può ottenere la password nel mezzo della richiesta di post ????? –

+1

SSL è l'unica risposta a questo. Tutto il resto può essere snoopato o fatto semplicemente guardando il tuo Javascript. SSL è progettato per questo; se stai facendo questa domanda, sicuramente non dovresti cercare di trovare una soluzione migliore! –

+0

Non utilizzare codificatore di codice per le password – user4419336

2

Sì, è sicuramente un problema di sicurezza. Come dici tu, chiunque abbia Wireshark (o simili) ha il potenziale per intercettarlo.

Questo probabilmente non è qualcosa su cui si desidera fare affidamento su JavaScript. Generalmente useresti qualcosa come SSL/HTTPS, c'è un post sul blog (un po 'vecchio) che spiega come procedere con CodeIgniter, tuttavia è piuttosto comune quindi potresti essere in grado di trovare un tutorial più recente con un po' di googling.

http://sajjadhossain.com/2008/10/27/ssl-https-urls-and-codeigniter/ http://nigel.mcbryde.com.au/2009/03/working-with-ssl-in-codeigniter/.

UPDATE: risposta di Lefter fornisce maggiori dettagli ed è corretta, si prega di vederlo così/invece

1
$password = sha1($this->input->post('password')); 

or 

$hash= $this->input->post('password'); 

$password= $this->encrypt->sha1($hash); 

è possibile utilizzare md5 invece di SHA1 ma SHA1 è più sicuro poi md5 ... e sia md5 & sha1 sono non decodificabile

0

C'è un modo più semplice per l'utente di https.

ho messo seguenti righe nel file di ./application/config/config.php e funziona perfettamente:

$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http'; 
$config['base_url'] = $protocol.'://www.yoursite.com'; 
+0

Potrebbe essere un processo molto semplice e semplice. –

Problemi correlati