web-dev-qa-db-fra.com

Script de connexion facile sans base de données

Comment créer un script de connexion facile ne nécessitant pas de base de données. Je voudrais qu'il soit en sécurité.

D'accord, qu'en est-il de ce script, je viens de le faire par ma connaissance de 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";} 
}
?> 

Le safe_site.php contient ceci et du contenu:

session_start();

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

Ce n'est pas une solution idéale mais voici un exemple rapide et sale qui montre comment stocker les informations de connexion dans le code 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 ou OpenID sont deux bonnes options.

En gros, vos utilisateurs se connectent à d’autres sites dont ils sont déjà membres (Facebook ou Google), puis vous obtenez une confirmation de ce site vous indiquant que l’utilisateur est digne de confiance: démarrez une session et ils sont connectés. Aucune base de données nécessaire ( sauf si vous souhaitez associer plus de données à leur compte).

11
Sampson

Je voudrais utiliser une configuration de deux fichiers comme ceci:

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

Enregistrez les hashes du nom d'utilisateur et du mot de passe dans array dans un fichier php au lieu de db.

Lorsque vous devez authentifier l'utilisateur, calculez les hachages de ses informations d'identification, puis comparez-les aux hachages de array.

Si vous utilisez la fonction de hachage sécurisée (voir fonction de hachage et hash algos in PHP documentation), elle devrait être relativement sûre (vous pouvez envisager d'utiliser du hachage salé) et ajouter des protections au formulaire lui-même. .

4
Tom Pažourek

Si vous n'avez pas de base de données, où sera stocké l'enregistrement PERMANENT des données de connexion de vos utilisateurs? Bien sûr, lorsque l'utilisateur est connecté, les informations utilisateur minimales nécessaires au bon fonctionnement de votre site peuvent être stockées dans une session ou un cookie. Mais après qu'ils se soient déconnectés, alors quoi? La session s'en va, le cookie peut être piraté.

Donc, votre utilisateur revient sur votre site. Il essaie de se connecter. À quoi de confiance votre site compare-t-il ses informations de connexion?

2
dnagirl

Essaye ça:

<?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; ?>

Vous aurez besoin d'une déconnexion, quelque chose comme ceci (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

*** Script de connexion qui ne lie pas à une base de données ou un fichier externe. Bon pour un mot de passe global -

Placez sur la page de formulaire de connexion - placez-le en haut de la page de connexion - au-dessus de tout le reste ***

<?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"];
?>

* Identifiez-vous sur les pages suivantes - Placez-le en haut de chaque page devant être protégée par un identifiant. cela vérifie la session et si un nom d'utilisateur et un mot de passe ont *

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

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

si vous n'avez pas de base de données, vous devrez coder en dur les informations de connexion dans votre code, ou les lire à partir d'un fichier plat sur le disque.

0
mkoryak

Vous pouvez effectuer le contrôle d'accès au niveau du serveur Web à l'aide de l'authentification HTTP Basic et de htpasswd . Cela pose un certain nombre de problèmes:

  1. Ce n'est pas très sécurisé (nom d'utilisateur et mot de passe sont encodés trivialement sur le réseau)
  2. Il est difficile de maintenir (vous devez vous connecter au serveur pour ajouter ou supprimer des utilisateurs)
  3. Vous n'avez aucun contrôle sur la boîte de dialogue de connexion présentée par le navigateur
  4. Il n'y a aucun moyen de se déconnecter, à moins de redémarrer le navigateur.

À moins que vous ne construisiez un site à usage interne avec quelques utilisateurs, je ne le recommanderais pas vraiment.

0
Ken Keenan