web-dev-qa-db-ja.com

Codeigniter:フォームをコントローラーに送信する前にパスワードを暗号化するにはどうすればよいですか?

簡単なhtmlログインフォームがあります

<form method="post" action="http://www.example.com/login">
    <input type="text" name="text_box" />
    <input type="password" name="pass_Word" />
    <input type="submit" name="submit">
</form>

フォームを送信するときとコントローラーで

public function login(){
    $pass_Word = $this->input->post('pass_Word');
    die($pass_Word);
}

ここでの問題は、プレーンパスワードを示しています。コントローラーに123456と入力すると、123456が表示されます。

  1. これはセキュリティの問題ですか?
  2. wiresharkのようなネットワーク監視ツールを介してパスワードを取得できる人はいますか?

これを回避する方法は?コントローラに送信する前に、ビューでパスワードを暗号化できますか?よろしくお願いします。

投稿データ(パスワードなど)が傍受された場合、プレーンテキストとして表示されます。 SSL/HTTPSを使用すると、送信するデータが暗号化されます。ユーザーの認証/ログインを目的として、クライアント側のJavaScriptなどに依存することはありません。安全な接続が使用されていることを確認することで、ユーザーの信頼も高まる可能性があります。

まず、SSLとHTTPS全般、およびSSL証明書について読みました-Wiki、Google、SOはすべて見るのに適した場所であり、そこにはたくさんの情報があります。

CIでSSL/HTTPSを使用する場合、次のことが役立ちます。

特に、 Nigelの投稿 からのforce ssl関数:

Ssl_helper.phpという名前のファイルをapplication/helperに作成します

_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());
    }
}
_

ヘルパーをロードしてから、SSLを必要とするコントローラーのコンストラクターに次のように挿入します。

force_ssl();

Sslを配置したくないすべてのコントローラーで:

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

これはプログラムによるアプローチです。別の方法は、.htaccessを使用することです(Apacheを使用している場合)。

13
jleft

はい、それは間違いなくセキュリティの問題です。あなたが言うように、Wireshark(または同様のもの)を持っている人は誰でもそれを傍受する可能性があります。

これはおそらくJavaScriptに依存したいものではありません。通常はSSL/HTTPSのようなものを使用しますが、CodeIgniterを使用する方法を詳しく説明したブログ投稿(少し古い)がありますが、かなり一般的であるため、少しグーグルで最新のチュートリアルを見つけることができるかもしれません。

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

更新:レフターの答えはより詳細で正しいです、それも/代わりに見てください

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

or 

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

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

sha1の代わりにmd5を使用できますが、sha1の方がsecureよりmd5です。 ..そして両方md5&sha1デコード不可

1
Chirag Rafaliya

Httpsを使用するより簡単な方法があります。

./application/config/config.phpファイルに次の行を追加すると、完全に機能します。

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

http://codeigniter.com/user_guide/libraries/encryption.html を通過します。ここでは、暗号化と復号化に関するすべてについて説明します。

データの暗号化を実行し、文字列として返します。例:

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

エンコードされた文字列を復号化します。例:

$encrypted_pass_Word = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';

$plaintext_pass_Word = $this->encrypt->decode($encrypted_pass_Word);

構成ファイルで暗号化キーを使用したくない場合は、オプションで2番目のパラメーターを介して暗号化キーを渡すことができます。リンクをたどって、詳細な説明を読んでください。

0
prakashchhetri