データベースを必要としない簡単なログインスクリプトを作成するにはどうすればよいですか。安全にお願いします。
よし、このスクリプトはどうだ、私は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;
}
これは理想的なソリューションではありませんが、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>
FacebookConnect または OpenID は2つの優れたオプションです。
基本的に、ユーザーは既にメンバーとなっている他のサイト(FacebookまたはGoogle)にログインし、そのサイトからユーザーが信頼できることを確認するメッセージが表示されます-セッションを開始するとログインします。データベースは必要ありません(より多くのデータをアカウントに関連付けたい場合を除きます)。
次のような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;
?>
ユーザー名とパスワードのハッシュをdbではなくphpファイルに配列で保存します。
ユーザーを認証する必要がある場合は、彼の資格情報のハッシュを計算してから、それらを配列内のハッシュと比較します。
安全なハッシュ関数を使用する場合(PHPドキュメント)の ハッシュ関数とハッシュアルゴス を参照)、かなり安全であるはずです(ソルトハッシュの使用を検討してください)。また、フォーム自体に対するいくつかの保護。
データベースがない場合、ユーザーのログインデータの永続的なレコードはどこに保存されますか?確かに、ユーザーがログインしている間、サイトが機能するために必要な最小限のユーザー情報をセッションまたはCookieに保存できます。しかし、彼らがログアウトした後はどうなるのでしょうか。セッションが終了し、Cookieがハッキングされる可能性があります。
したがって、ユーザーはサイトに戻ってきます。彼はログインを試みます。あなたのサイトが彼のログイン情報と比較して信頼できることは何ですか?
***データベースまたは外部ファイルにリンクしないログインスクリプト。グローバルパスワードに最適-
ログインフォームページに配置-これをログインページの上部に配置-その他すべての上に***
<?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");
}
?>
これを試して:
<?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> </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>
データベースがない場合は、ログイン詳細をコードにハードコードするか、ディスク上のフラットファイルから読み取る必要があります。
HTTP基本認証と htpasswd を使用して、Webサーバーレベルでアクセス制御を実行できます。これには多くの問題があります:
少数のユーザーで内部使用のためのサイトを構築しているのでない限り、私はそれを本当にお勧めしません。