6

シンプルな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);
}

ここでの問題は、単純なパスワードが表示されます。 123456controller と入力すると、 が表示されます123456

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

これを回避する方法は?コントローラに送信する前に、表示中のパスワードを暗号化できますか?

4

5 に答える 5

13

投稿データ(パスワードなど)が傍受された場合、プレーンテキストとして表示されます。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を使用している場合)。

于 2012-08-28T12:54:18.117 に答える
2

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

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

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

更新: Lefter の回答は詳細を提供し、正しいです。代わりにそれも表示してください

于 2012-08-28T11:50:49.270 に答える
1

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 番目のパラメーターを介して暗号化キーを渡すことができます。リンクをたどって、それに関する詳細な説明を読んでください。

于 2012-08-28T11:20:50.783 に答える
0

https を使用するためのより簡単な方法があります。

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

$protocol = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) ? 'https' : 'http';
$config['base_url'] = $protocol.'://www.yoursite.com';
于 2014-09-23T07:19:18.463 に答える