1

私はphpを書くのが得意ではないと言って、これを前置きさせてください。次のコードも書きませんでしたが、ここでより大きなプロセスで何が起こっているかについて、何が欠けているかについてのガイダンスを探しています。

CodeIgniter と twitter-Bootstrap フレームワークを利用する無料のチケット発行ソフトウェアを最初にインストールした後、データベースは、私の管理者の電子メールを使用してデフォルトの管理者アカウントをセットアップし、デフォルトのパスワードは admin である必要があります。

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==

これは、コード イグナイター conf に間違った暗号化キーがある可能性があることを意味します。それか、実際の文字列です。

08gv6gemSKxv09EImCsPLO94Nje6ZVAlFnuc13kohFwvC0kh/ESFEn1lEwL9bbSbrlym/UrO6wM9p0CGnjJHzg==

は、パスワード「admin」の正しい暗号化キーではありません!

于 2013-11-03T17:05:55.233 に答える
0

チケット発行システムは、CodeIgniter の暗号化ライブラリを使用してパスワードを暗号化します (注意: これは悪いことです。ハッシュではなく、可逆暗号化です)。

CodeIgniter の暗号化ライブラリは、利用可能な場合はmcryptを使用します。利用できない場合は、安全性の低い独自の方法にフォールバックします。

データベース スクリプトで指定されたパスワードは、mcrypt を使用して確実に暗号化されています。PHP インストールで mcrypt モジュールが設定されていないことが原因だと思います。

可能なオプションがいくつかあります。

  1. 最初にサーバー上の PHP インストールに mcrypt 拡張機能を追加してから、tblstaffs で指定したメール アドレスとパスワード「admin」を使用してログインします (これ正しいパスワードです。問題を再現して確認しました。 )
  2. mcrypt をインストールせず、チケット システムのパスワード回復手順を使用して、指定した電子メール アドレスに新しいパスワードを電子メールで送信します。これにより、現在機能している暗号化方式を使用して、既存のパスワードが新しいパスワードに置き換えられます。明らかに、tblstaffs の電子メール アドレスが有効なものであること、および送信メールが PHP インストールで機能していることを確認する必要があります。
  3. tblstaffs の管理者ユーザーの暗号化されたパスワードを、mcrypt 以外の暗号化と互換性のあるパスワードに手動で更新します。「AmJUYVxsAzgBNQ==」は、パスワード「admin」で機能する可能性のある値だと思います。

ただし、個人的には、公開されるものにこのチケット システムを使用することはお勧めしません。認証システムでは、可逆暗号化ではなく、ソルト付きの一方向ハッシュを使用する必要があります。

于 2013-11-03T17:38:05.400 に答える