2012-08-28 30 views
6

hi tôi có một hình thức html đăng nhập đơn giảnCodeigniter: Làm thế nào tôi có thể mã hóa mật khẩu trước khi gửi biểu mẫu cho bộ điều khiển?

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

khi tôi gửi biểu mẫu

và trong bộ điều khiển

public function login(){ 

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

} 

các vấn đề ở đây, nó cho thấy các mật khẩu đơn giản. nếu tôi nhập 123456 trong bộ điều khiển, tôi sẽ nhận được 123456.

  1. là vấn đề này một an ninh
  2. bất kỳ ai có thể có được mật khẩu của mình thông qua một công cụ giám sát mạng như Wireshark.

cách tránh điều này. tôi có thể mã hóa mật khẩu trong xem, trước khi gửi cho bộ điều khiển, xin vui lòng giúp đỡ, cảm ơn trước.

+3

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

+1

Sử dụng javascript cho rằng .. bạn có thể google một tập lệnh mã hóa md5 đơn giản. Chỉ cần mã hóa mật khẩu khi gửi biểu mẫu. – Vishal

+0

@ vishal, nếu tôi mã hóa mật khẩu, bạn có thể xem js và kiểm tra phương pháp tôi đã sử dụng để thực hiện mã hóa là gì và tôi nghĩ bạn có thể giải mã nó –

Trả lời

11

Nếu bài dữ liệu của bạn (mật khẩu vv) đã bị chặn lại, sau đó nó sẽ chỉ hiển thị dưới dạng plaintext. Sử dụng SSL/HTTPS sẽ cung cấp mã hóa cho dữ liệu bạn gửi. Tôi sẽ không dựa vào JavaScript phía máy khách hoặc bất kỳ thứ gì tương tự cho các mục đích xác thực/đăng nhập vào một người dùng. Nó có khả năng cung cấp cho người dùng của bạn sự tự tin hơn nữa, thấy rằng một kết nối an toàn đang được sử dụng.

Đầu tiên, tôi chỉ đọc về SSL và HTTPS nói chung, cũng như chứng chỉ SSL - Wiki, Google và SO tất cả sẽ là nơi tốt để xem, có rất nhiều thông tin ngoài kia.

Để sử dụng SSL/HTTPS với CI, tôi thấy những hữu ích:

Đặc biệt chức năng lực ssl từ Nigel's post:

Tạo một tập tin trong application/helper gọi 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()); 
    } 
} 

Nạp helper, sau đó trong các nhà xây dựng cho bất kỳ bộ điều khiển mà đòi hỏi ssl, chỉ cần chèn:

force_ssl();

Trong mọi bộ điều khiển mà bạn không muốn có đặt ssl:

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

Đây là một cách tiếp cận theo chương trình, một cách khác sẽ được sử dụng .htaccess (nếu bạn đang sử dụng Apache).

0

Đi qua http://codeigniter.com/user_guide/libraries/encryption.html. Tất cả mọi thứ về mã hóa và giải mã được mô tả ở đây.

Thực hiện mã hóa dữ liệu và trả về dưới dạng chuỗi. Ví dụ:

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

Giải mã chuỗi được mã hóa. Ví dụ:

$encrypted_pass_word = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84'; 

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

Bạn có thể tùy ý chuyển khóa mã hóa của mình qua tham số thứ hai nếu bạn không muốn sử dụng khóa mã hóa trong tệp cấu hình của mình. Đi qua liên kết để đọc giải thích chi tiết về nó.

+0

có, tôi có thể làm mã hóa trong bộ điều khiển, vấn đề là một số có thể nhận được mật khẩu ở giữa yêu cầu bài ????? –

+1

SSL là câu trả lời duy nhất cho điều này. Mọi thứ khác có thể được snooped hoặc chỉ cần thực hiện bằng cách nhìn vào Javascript của bạn. SSL được thiết kế cho việc này; nếu bạn đang đặt câu hỏi này, bạn chắc chắn không nên cố gắng tìm ra giải pháp tốt hơn! –

+0

Không sử dụng mã hóa mã hóa cho mật khẩu – user4419336

2

Vâng, đó chắc chắn là vấn đề bảo mật. Như bạn nói, bất kỳ ai có Wireshark (hoặc tương tự) đều có khả năng chặn nó.

Đây có thể không phải là điều bạn muốn dựa vào JavaScript. Nói chung, bạn sẽ sử dụng một cái gì đó giống như SSL/HTTPS, có một bài đăng blog (một chút cũ) chi tiết về cách sử dụng CodeIgniter, tuy nhiên nó khá phổ biến để bạn có thể tìm thấy một hướng dẫn mới hơn với một chút 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: câu trả lời Lefter của cung cấp chi tiết hơn và là chính xác, xin vui lòng xem nó là tốt/thay

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

or 

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

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

bạn có thể sử dụng md5 thay vì sha1 nhưng sha1 nhiều an toàn sau đó md5 ... và cả md5 & sha1không giải mã

0

Có một cách dễ dàng hơn để sử dụng https.

tôi đặt dòng sau trong ./application/config/config.php tập tin và nó hoạt động hoàn hảo:

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

Có thể là quá trình rất dễ dàng và đơn giản. –

Các vấn đề liên quan