我有一个简单的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
等网络监控工具获取密码吗?如何避免这种情况?在发送到控制器之前,我可以在视图中加密密码吗?请提前帮助,谢谢。
答案 0 :(得分:12)
如果您的帖子数据(密码等)被截获,那么它只会以纯文本形式显示。使用SSL / HTTPS将为您发送的数据提供加密。我不会依赖客户端JavaScript或任何类似的用于验证/登录用户的目的。看到正在使用安全连接,它可能会让您的用户更有信心。
首先,我刚刚了解了SSL和HTTPS以及SSL证书 - Wiki,Google和SO都是很好看的地方,那里有很多信息。
对于使用带有CI的SSL / HTTPS,我发现这些非常有用:
特别是来自Nigel's post的强制ssl函数:
在application / helper中创建一个名为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());
}
}
加载帮助程序,然后加载任何控制器的构造函数 需要ssl,只需插入:
force_ssl();
在你不想让ssl put的每个控制器中:
if (function_exists('force_ssl')) remove_ssl();
这是一种编程方法,另一种方法是使用.htaccess(如果你使用的是Apache)。
答案 1 :(得分:2)
是的,这绝对是一个安全问题。就像你说的,任何有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/。
更新: Lefter的答案提供了更多细节并且是正确的,请同样查看/而不是
答案 2 :(得分:1)
$password = sha1($this->input->post('password'));
or
$hash= $this->input->post('password');
$password= $this->encrypt->sha1($hash);
您可以使用 md5 代替 sha1 ,但 sha1 更强安全,然后 md5 强> ...和 md5&amp; sha1 不可解码
答案 3 :(得分:0)
浏览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);
如果您不想在配置文件中使用加密密钥,可以选择通过第二个参数传递加密密钥。浏览链接以阅读有关它的详细说明。
答案 4 :(得分:0)
有一种更简单的用户https方式。
我将以下行放在./application/config/config.php文件中,它运行正常:
$protocol = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) ? 'https' : 'http';
$config['base_url'] = $protocol.'://www.yoursite.com';
答案 5 :(得分:-2)
使用 md5(string)进行加密,这对于codeigniter网站非常安全。 对于密码加密用户,在提交表单时使用此代码。
password = md5($ this-> input-> post('password'));