2012-08-28 66 views
6

Hola tengo un simple formulario de inicio de sesión htmlCodeigniter: ¿Cómo puedo cifrar la contraseña antes de enviar el formulario al controlador?

<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> 

cuando presente la forma

y en el controlador de

public function login(){ 

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

} 

el problema aquí, que muestra la contraseña al descubierto. si escribo 123456 en el controlador, obtengo 123456.

  1. es el tema de seguridad de un
  2. cualquiera puede obtener la contraseña a través de una herramienta de monitorización de red como Wireshark.

cómo evitar esto. puedo cifrar la contraseña a la vista, antes de enviarla al controlador, por favor ayuda, gracias de antemano.

+3

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

+1

el uso de JavaScript para que .. .puedes googlear un simple script de cifrado md5. Simplemente codifique la contraseña en el envío del formulario. – Vishal

+0

@vishal, si encripto la contraseña, puede ver el js y verificar cuál es el método que he utilizado para hacer el cifrado, y creo que puede descifrarlo –

Respuesta

11

Si fue interceptado sus datos de envío (contraseña, etc.), entonces sólo sería visible como texto sin formato. El uso de SSL/HTTPS proporcionará encriptación para los datos que envíe. No confiaría en el JavaScript del lado del cliente ni nada similar a los fines de autenticar/iniciar sesión en un usuario. Es probable que también les brinde más confianza a sus usuarios, ya que se está utilizando una conexión segura.

Primero, me acaba de leer acerca de SSL y HTTPS en general, así como los certificados SSL - Wiki, Google y SO serían buenos lugares para buscar, hay un montón de información por ahí.

Para utilizar SSL/HTTPS con CI, He encontrado estos útil:

En particular la función de fuerza ssl de Nigel's post:

Cree un archivo en application/ayudante llamado 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()); 
    } 
} 

Cargar el ayudante, a continuación, en el constructor para cualquier controlador que requiere SSL, basta con insertar:

force_ssl();

En cada controlador que no desee tener puesto ssl:

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

Este es un enfoque programático, de otra manera sería utilizar .htaccess (si está usando Apache).

0

Diríjase a http://codeigniter.com/user_guide/libraries/encryption.html. Todo sobre el cifrado y descifrado se describe aquí.

Realiza la encriptación de datos y la devuelve como una cadena. Ejemplo:

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

Descifra una cadena codificada. Ejemplo:

$encrypted_pass_word = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84'; 

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

Usted puede opcionalmente pasar la clave de cifrado a través del segundo parámetro si no desea usar el uno en el archivo de configuración. Ir a través del enlace para leer la explicación detallada sobre él.

+0

sí, puedo hacer encriptación en el controlador, el problema es que alguien puede obtener la contraseña en el medio de la solicitud posterior ????? –

+1

SSL es la única respuesta a esto. Todo lo demás puede ser fisgoneado o simplemente hecho mirando tu Javascript. SSL está diseñado para esto; si estás haciendo esta pregunta, definitivamente no deberías tratar de encontrar una mejor solución. –

+0

No use cifrado codeigniter para contraseñas – user4419336

2

Sí, definitivamente es un problema de seguridad. Como dices, cualquiera con Wireshark (o similar) tiene el potencial de interceptarlo.

Esto probablemente no es algo para lo que quiera confiar en JavaScript. En general, utilizaría algo como SSL/HTTPS, hay una publicación de blog (un poco antigua) que detalla cómo hacerlo con CodeIgniter, sin embargo, es bastante común, por lo que es posible que pueda encontrar un tutorial más reciente con un poco de Google.

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

ACTUALIZACIÓN: Respuesta de Lefter proporciona más detalle y es correcta, por favor visualizarla así/en lugar

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

or 

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

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

puede utilizar MD5 en lugar de sha1 pero sha1 es más seguro continuación MD5 ... y tanto & md5 sha1 son no descifrable

0

Hay una forma más fácil de https usuario.

puse siguientes líneas en el archivo de ./application/config/config.php y funciona perfectamente:

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

Puede ser que sea un proceso muy fácil y simple. –

Cuestiones relacionadas