web-dev-qa-db-ja.com

データベースなしの簡単なログインスクリプト

データベースを必要としない簡単なログインスクリプトを作成するにはどうすればよいですか。安全にお願いします。

よし、このスクリプトはどうだ、私はphpでの私の知識によって作成した。

<?php 
// Start session
session_start(); 

// Username and password
$ID = "admin";
$pass = "123456";

if (isset($_POST["ID"]) && isset($_POST["pass"])) { 

    if ($_POST["ID"] === $anvandarID && $_POST["pass"] === $pass) { 
    /
    $_SESSION["inloggedin"] = true; 

    header("Location: safe_site.php"); 
    exit; 
    } 
        // Wrong login - message
        else {$wrong = "Bad ID and password, the system could not log you in";} 
}
?> 

Safe_site.phpには、これといくつかのコンテンツが含まれています。

session_start();

if (!isset($_SESSION["inloggning"]) || $_SESSION["inloggning"] !== true) {
header("Location: login.php");
exit;
}
9
Elijah

これは理想的なソリューションではありませんが、PHPコードにログイン情報を格納する方法を示す簡単でわかりにくい例を次に示します。

<?php
session_start();

$userinfo = array(
                'user1'=>'password1',
                'user2'=>'password2'
                );

if(isset($_GET['logout'])) {
    $_SESSION['username'] = '';
    header('Location:  ' . $_SERVER['PHP_SELF']);
}

if(isset($_POST['username'])) {
    if($userinfo[$_POST['username']] == $_POST['password']) {
        $_SESSION['username'] = $_POST['username'];
    }else {
        //Invalid Login
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Login</title>
    </head>
    <body>
        <?php if($_SESSION['username']): ?>
            <p>You are logged in as <?=$_SESSION['username']?></p>
            <p><a href="?logout=1">Logout</a></p>
        <?php endif; ?>
        <form name="login" action="" method="post">
            Username:  <input type="text" name="username" value="" /><br />
            Password:  <input type="password" name="password" value="" /><br />
            <input type="submit" name="submit" value="Submit" />
        </form>
    </body>
</html>
22
Mark Biek

FacebookConnect または OpenID は2つの優れたオプションです。

基本的に、ユーザーは既にメンバーとなっている他のサイト(FacebookまたはGoogle)にログインし、そのサイトからユーザーが信頼できることを確認するメッセージが表示されます-セッションを開始するとログインします。データベースは必要ありません(より多くのデータをアカウントに関連付けたい場合を除きます)。

11
Sampson

次のような2つのファイルの設定を使用します。

index.php

<?php 
session_start(); 

define('DS',  TRUE); // used to protect includes
define('USERNAME', $_SESSION['username']);
define('SELF',  $_SERVER['PHP_SELF'] );

if (!USERNAME or isset($_GET['logout']))
 include('login.php');

// everything below will show after correct login 
?>

login.php

<?php defined('DS') OR die('No direct access allowed.');

$users = array(
 "user" => "userpass"
);

if(isset($_GET['logout'])) {
    $_SESSION['username'] = '';
    header('Location:  ' . $_SERVER['PHP_SELF']);
}

if(isset($_POST['username'])) {
    if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == $_POST['password']) {
  $_SESSION['username'] = $_POST['username'];
  header('Location:  ' . $_SERVER['PHP_SELF']);
    }else {
        //invalid login
  echo "<p>error logging in</p>";
    }
}

echo '<form method="post" action="'.SELF.'">
  <h2>Login</h2>
  <p><label for="username">Username</label> <input type="text" id="username" name="username" value="" /></p>
  <p><label for="password">Password</label> <input type="password" id="password" name="password" value="" /></p>
  <p><input type="submit" name="submit" value="Login" class="button"/></p>
  </form>';
exit; 
?>
8
Andres

ユーザー名とパスワードのハッシュをdbではなくphpファイルに配列で保存します。

ユーザーを認証する必要がある場合は、彼の資格情報のハッシュを計算してから、それらを配列内のハッシュと比較します。

安全なハッシュ関数を使用する場合(PHPドキュメント)の ハッシュ関数とハッシュアルゴス を参照)、かなり安全であるはずです(ソルトハッシュの使用を検討してください)。また、フォーム自体に対するいくつかの保護。

4
Tom Pažourek

データベースがない場合、ユーザーのログインデータの永続的なレコードはどこに保存されますか?確かに、ユーザーがログインしている間、サイトが機能するために必要な最小限のユーザー情報をセッションまたはCookieに保存できます。しかし、彼らがログアウトした後はどうなるのでしょうか。セッションが終了し、Cookieがハッキングされる可能性があります。

したがって、ユーザーはサイトに戻ってきます。彼はログインを試みます。あなたのサイトが彼のログイン情報と比較して信頼できることは何ですか?

2
dnagirl

***データベースまたは外部ファイルにリンクしないログインスクリプト。グローバルパスワードに最適-

ログインフォームページに配置-これをログインページの上部に配置-その他すべての上に***

<?php

if(isset($_POST['Login'])){

if(strtolower($_POST["username"])=="ChangeThis" && $_POST["password"]=="ChangeThis"){
session_start();
$_SESSION['logged_in'] = TRUE;
header("Location: ./YourPageAfterLogin.php");

}else {
$error= "Login failed !";
}
}
//print"version3<br>";
//print"username=".$_POST["username"]."<br>";
//print"password=".$_POST["username"];
?>

* 次のページにログイン-ログインによって保護する必要があるすべてのページの上部に配置します。これにより、セッションがチェックされ、ユーザー名とパスワードに*があるかどうかがチェックされます

<?php
session_start();
if(!isset($_SESSION['logged_in']) OR $_SESSION['logged_in'] != TRUE){

header("Location: ./YourLoginPage.php");
}
?>
1
Andrew Seward

これを試して:

<?php
        session_start();
        $userinfo = array(
            'user'=>'5d41402abc4b2a76b9719d911017c592', //Hello...
        );

        if(isset($_GET['logout'])) {
            $_SESSION['username'] = '';
            header('Location:  ' . $_SERVER['PHP_SELF']);
        }

        if(isset($_POST['username'])) {
            if($userinfo[$_POST['username']] == md5($_POST['password'])) {
                $_SESSION['username'] = $_POST['username'];
            }else {
                header("location:403.html"); //replace with 403
            }
        }
?>
<?php if($_SESSION['username']): ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Logged In</title>
        </head>

        <body>
            <p>You're logged in.</p>
            <a href="logout.php">LOG OUT</a>
        </body>
    </html>

<?php else: ?>
    <html>
        <head>
            <title>Log In</title>
        </head>
        <body>
            <h1>Login needed</h1>
            <form name="login" action="" method="post">
                <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
                    <tr>
                        <td colspan="3"><strong>System Login</strong></td>
                    </tr>
                    <tr>
                        <td width="78">Username:</td>
                        <td width="294"><input name="username" type="text" id="username"></td>
                    </tr>
                    <tr>
                        <td>Password:</td>
                        <td><input name="password" type="password" id="password"></td>
                    </tr>
                    <tr>
                        <td>&nbsp;</td>
                        <td><input type="submit" name="Submit" value="Login"></td>
                    </tr>
                </table>
            </form>
        </body>
    </html>
<?php endif; ?>

次のようなログアウトが必要になります(logout.php):

<?php
    session_start();
    session_destroy();
    header("location:index.html"); //Replace with Logged Out page. Remove if you want to use HTML in same file.
?>

// Below is not needed, unless header above is missing. In that case, put logged out text here.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
    </head>
    <body>
        <!-- Put logged out message here -->
    </body>
</html>
1
Frank Slezak

データベースがない場合は、ログイン詳細をコードにハードコードするか、ディスク上のフラットファイルから読み取る必要があります。

0
mkoryak

HTTP基本認証と htpasswd を使用して、Webサーバーレベルでアクセス制御を実行できます。これには多くの問題があります:

  1. あまり安全ではありません(ユーザー名とパスワードはネットワーク上で簡単にエンコードされます)
  2. 維持するのが難しい(ユーザーを追加または削除するにはサーバーにログインする必要がある)
  3. ブラウザが表示するログインダイアログボックスを制御できません
  4. ブラウザを再起動することを除いて、ログアウトする方法はありません。

少数のユーザーで内部使用のためのサイトを構築しているのでない限り、私はそれを本当にお勧めしません。

0
Ken Keenan