1

让我先说我在编写 php 方面不是最好的。我也没有编写以下代码,但我正在寻找一些关于我所缺少的内容的指导,以了解这里更大的过程中发生的事情。

在初始安装使用 CodeIgniter 和 twitter-Bootstrap 框架的免费票务软件后,数据库会使用我的管理员电子邮件设置一个默认管理员帐户,并且应该是管理员的默认密码:

CREATE TABLE IF NOT EXISTS `tblstaffs` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(200) NOT NULL,
  `lastname` varchar(200) NOT NULL,
  `email` varchar(200) DEFAULT NULL,
  `password` varchar(200) DEFAULT NULL,
  `admin` int(10) DEFAULT '0',
  `hash` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`),
  KEY `id_2` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

--
-- Dumping data for table `tblstaffs`
--

INSERT INTO `tblstaffs` (`id`, `firstname`, `lastname`, `email`, `password`, `admin`, `hash`) VALUES
(1, 'Admin', 'Admin', 'admin@admin.com', '08gv6gemSKxv09EImCsPLO94Nje6ZVAlFnuc13kohFwvC0kh/ESFEn1lEwL9bbSbrlym/UrO6wM9p0CGnjJHzg==', 1, '');

我看到了这个值:

08gv6gemSKxv09EImCsPLO94Nje6ZVAlFnuc13kohFwvC0kh/ESFEn1lEwL9bbSbrlym/UrO6wM9p0CGnjJHzg==

在数据库中也是如此。

尝试输入“admin”作为密码无效。我假设我可能缺少一些必要的 php 扩展?

            // Form validation success.

        $data['firstname'] = $this -> input -> post('firstname');
        $data['lastname'] = $this -> input -> post('lastname');
        $data['email'] = $this -> input -> post('email');
        $data['id'] = $this -> input -> post('id');

        if($this->input->post('password'))
            $data['password'] = $this->encrypt->encode($this -> input -> post('password'));

        $result = $this -> Admin -> EditStaff($data);

        if ($result == FALSE)
        {
            $status['statusmsg'] = "A user with the email already exists";
            $status['status'] = 0;
            echo json_encode($status);
        }
        else
        {
            $status['status'] = 1;
            echo json_encode($status);
4

2 回答 2

0

您肯定有加密问题,请更改此行

if($this->input->post('password'))
            $data['password'] = $this->encrypt->encode($this -> input -> post('password'));

像这样(查看加密后“密码”变成什么)

if($this->input->post('password')){
    $data['password'] = $this->encrypt->encode($this -> input -> post('password'));
    echo "Password: $this->input->post('password')";
    echo "Encrypted password: $data['password']";
}

如果它与以下内容不同:

08gv6gemSKxv09EImCsPLO94Nje6ZVAlFnuc13kohFwvC0kh/ESFEn1lEwL9bbSbrlym/UrO6wM9p0CGnjJHzg==

这意味着您的代码点火器配置文件中可能有错误的加密密钥,或者是实际的字符串:

08gv6gemSKxv09EImCsPLO94Nje6ZVAlFnuc13kohFwvC0kh/ESFEn1lEwL9bbSbrlym/UrO6wM9p0CGnjJHzg==

不是密码“admin”的正确加密密钥!

于 2013-11-03T17:05:55.233 回答
0

票务系统使用 CodeIgniter 的加密库来加密其密码(注意:这是一件坏事;它是可逆加密,而不是哈希。)

CodeIgniter 的加密库在可用时使用mcrypt,否则会退回到其自身安全性较低的方法。

数据库脚本中提供的密码肯定是使用 mcrypt 加密的。我猜发生了什么事是你没有在你的 PHP 安装中设置 mcrypt 模块。

有几个可能的选项:

  1. 首先将 mcrypt 扩展添加到您服务器上的 PHP 安装中,然后使用您在 tblstaffs 中指定的电子邮件地址和密码“admin”(这正确的密码;我已经重现您的问题并检查了)登录。 )
  2. 不要安装 mcrypt,并使用票务系统中的密码恢复程序将新密码通过电子邮件发送到您指定的电子邮件地址。这将使用当前有效的加密方法将现有密码替换为新密码。显然,您需要确保 tblstaffs 中的电子邮件地址是有效的,并且该外发邮件正在您的 PHP 安装中工作。
  3. 手动将 tblstaffs 中管理员用户的加密密码更新为与您的非 mcrypt 加密兼容的密码。我相信“AmJUYVxsAzgBNQ==”是一个可能适用于密码“admin”的值。

不过,就个人而言,我不建议将这个票务系统用于任何将要公开的东西。身份验证系统应该使用加盐的单向哈希,而不是可逆加密。

于 2013-11-03T17:38:05.400 回答