0

ページを保護するために基本的なログイン システムを実行する必要がありましたが、データベースにアクセスできないため、php ページにハード コードされたユーザー名とパスワードを保存します。

私の質問は、このログイン システムは攻撃に耐えられるかということです。約1ヶ月持ちます。

改善するための提案はすべて役に立ちます。コードはlaravelではありません。ユーザー名とパスワードは、もちろんより強力なものに変更されます。

前もって感謝します。

<?php
class UserController {
private $username;
private $password;
private $isLoggedIn = false;

// Credentials
public function credentials() {
    $credentials = array(
        array(
            "username" => "telekom",
            "password" => "1234"
        ),
        array(
            "username" => "telekom2",
            "password" => "1234"
        )
    );
    return $credentials;
}

// Basic login
public function login() {
    foreach ($this->credentials() as $credential) {
        if ($this->username == $credential['username'] && $this->password == $credential['password']) {
            Session::put('username', $this->username);
            Session::put('password', $this->password);
            $this->isLoggedIn = true;
        }
    }
}

// Get login status
public function isLoggedIn() {
    return $this->isLoggedIn;
}

// Logout
public function logout() {
    // Delete all sessions
    Session::all();
    redirect('/telekom/');
}

// Telekom
public function telekom() {
    $form = new Form();
    if (Input::get('logout') == 1) {
        $this->logout();
    }

    // Post Data from login form
    if (Input::has('username') || Input::has('password')) {
        if (!$form->isCsrfValid()) {
            $form->errors['CSRF'] = "CSRF Token";
        } // CSRF protection is on, comment to disable
        if (empty($form->errors)) {
            $this->username = Input::get('username');
            $this->password = Input::get('password');

            // Check Login
            $this->login();
            if (!$this->isLoggedIn()) {
                Session::put('login', 'Username and password do not match.');
            } else {
                redirect('/telekom/');
            }
        } else {
            Session::put('login', '<p class="color-dark-red"><strong>Errors:</strong></p>
                        <p>' . $form->displayErrors($form->errors) . '</p>');
        }
    // Check if session has username and password 
    } elseif (Session::has('username') && Session::has('password')) {
        $this->username = Session::get('username', false);
        $this->password = Session::get('password', false);
        // Check Login 
        $this->login();
    }
}
}// EOF Class User

// Outside class
$user = new UserController();

// Outside class
if (!$user->isLoggedIn()) {
    // display login form
} else {
    // display protected content    
}
?>
4

3 に答える 3

1

コメントが長くなりましたので、こちらに移動させていただきます。ユーザー名とパスワードを同じファイルに入れることはお勧めしません。PHP がページの処理に失敗した場合は、プレーン テキストとしてユーザーにダンプされます。データベース接続 (ほとんど un/pwd をプレーン テキストで保存する必要がある場合) の場合でも、ほとんどの人は情報を同じファイルに入れません。

いくつかのオプションがあります。

  1. UN/PWD 変数を設定する別の PHP ファイルを作成し、サーバーの外部からアクセスできない場所に置き、index.php に含めます。この場合、変数を比較して、できるだけ早くローカル スコープにダンプさせるときまで、ファイルを含めません。

  2. これは基本的な認証であるため、 Apache に組み込まれているパスワード認証モジュールを使用できます。

于 2015-09-17T14:38:29.013 に答える
0

私の意見では、このソリューションは、永久に使用する予定がない場合には十分安全です。私が確認したいのは、Web サーバーの設定です。一部のテキスト エディタは、index.php~、index.php.bkp などの編集済みファイルのバックアップ コピーを作成します。Web サーバーがそれらのファイルを提供していないかどうかを確認してください。

于 2015-09-17T13:51:46.543 に答える