簡単な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
が表示されます。
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を使用している場合)。
はい、それは間違いなくセキュリティの問題です。あなたが言うように、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 /。
更新:レフターの答えはより詳細で正しいです、それも/代わりに見てください
$password = sha1($this->input->post('password'));
or
$hash= $this->input->post('password');
$password= $this->encrypt->sha1($hash);
sha1の代わりにmd5を使用できますが、sha1の方がsecureよりmd5です。 ..そして両方md5&sha1はデコード不可
Httpsを使用するより簡単な方法があります。
./application/config/config.phpファイルに次の行を追加すると、完全に機能します。
$protocol = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) ? 'https' : 'http';
$config['base_url'] = $protocol.'://www.yoursite.com';
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番目のパラメーターを介して暗号化キーを渡すことができます。リンクをたどって、詳細な説明を読んでください。