2016. július 28., csütörtök

Egy beléptető rendszer

Feladat: webes tartalmaink, adatbázisban tárolt adataink védelme érdekében, írjunk jelszavas beléptető rendszert leendő webes alkalmazásunkhoz. A belépésre jogosultak adatait tároljuk adatbázisban. Legyen a kérdéses adattábla neve users. Az adattábla mezői: id, UName, NName és Passw, mely rendre a rekordazonosító, a felhasználói név, a bejelentkezési név (nicknév) és végül a jelszó. Ezt az adattáblát csak a rendszer készítője tudja kezelni, adatait csak ő láthatja. Ezért az elkészült rendszer felhasználói számára a belépési adatokat a rendszer készítői szolgáltatja, tőle kell kérni.

Első lépésként hozzunk létre egy php oldalt, mely segítségével a rendszer készítője kezelni tudja a rendszer használóit. Ezen a lapon rögzíteni és módosítani lehet a felhasználók adatait és törölni a felhasználót, amennyiben szükséges. Ennek a rendszernek a kezelői felülete így néz ki új felhasználó felvétele esetén.


            Ha meglévő felhasználó adatait szeretnénk módosítani, vagy a felhasználót törölni szeretnénk, akkor ez a felület így néz ki:


Ezeken a felületeken minden mezőt ki kell tölteni. A megismételt jelszónak természetesen meg kell egyezni az elsőként beírt jelszóval, valamint nem lehet két felhasználónak ugyanaz a login neve. Ezen hibák elkövetése esetén a rendszer nem veszi fel az új felhasználót, illetve nem módosítja adatait. Törlés esetén a jelszavak kitöltése nem szükséges.

            A felhasználók regisztrációját végző oldal teljes listája (a config.php file az eddigi leírásokban is szereplő konfigurációs állomány):

            http://gmsoft.uw.hu/main.php

<?php
            session_start();
            include "config.php";
?>
<html>
<head>
<title>Felhasználók regisztrálása</title>
</head>
<body bgcolor="#eeeeee">
<?php
            if ( isset($newuser) ){
                  if ( ($newuname !== "") && ($newnname !== "") && ($passw1 !== "") && ($passw1=$passw2) ){
                        $eredm = mysql_query("SELECT * FROM users WHERE NName='$newnname'");
                        $sorsz = mysql_num_rows($eredm);
                        $sorsz = $sorsz+0;
                        if ( $sorsz == 0 ){
                             $pw = md5($_POST['passw1']);
                             mysql_query("INSERT INTO users (UName,NName,Passw) VALUES ('$newuname','$newnname','$pw)') ");
                        }
                  }
            }
            if ( isset($modosit) ){
                  if ( ($newuname !== "") && ($newnname !== "") && ($passw1 !== "") && ($passw1=$passw2) ){
                        $id = $_SESSION['userid'];
                        $un = addslashes($_POST['newuname']);
                        $nn = addslashes($_POST['newnname']);
                        $pw = md5($_POST['upassw1']);
                        mysql_query("UPDATE users SET UName='$un',NName='$nn',Passw='$pw' WHERE id='$id' ");
                  }
            }
            if ( isset($torol) ){
                  $id = $_SESSION['userid'];
                  mysql_query("DELETE FROM users WHERE id='$id'");
            }
            if ( isset($_POST['userid']) ){
                  $userid = $_POST['userid'];
            }
            $eredm = mysql_query("SELECT * FROM users");
            $sorsz = mysql_num_rows($eredm);
            print "<b><h3>Felhasználók ($sorsz):</b></h3>";
            print "<table border=1 bordercolor=\"#ffffff\" cellpadding=\"10\" cellspacing=\"0\" bgcolor=\"#eeeeee\">\n";
            print "<tr>";
            print "<td valign=\"top\">";
                  print "<form action=\"\" method=\"POST\">\n";
                  print "<select name=\"userid\" size=\"19\" onclick=\"this.form.submit()\" />\n";
                  print "<option selected value=\"valassz\" />Válassz/Új\n";
                  while ($sora = mysql_fetch_object($eredm)){
                        print "<option value=\"$sora->id\"";
                        if ( (isset($userid) && $userid == $sora->id) ){
                             print " selected";
                        }
                        print "> $sora->UName\n";
                  }
                  print "</select>\n";
                  print "</form>";
            print "</td>";
            print "<td align=\"right\" valign=\"top\">";
                  if ( isset($_POST['userid']) ){
                        $id = $_POST['userid'];
                        $_SESSION['userid'] = $id;
                        print "<form action=\"\" method=\"POST\">\n";
                        if ( $_POST['userid'] == "valassz" ){
                             print "<h3>Új felhasználó felvétele:</h3>\n";
                        }
                        if ( $_POST['userid'] !== "valassz" ){
                              print "<h3>A felhasználó adatainak módosítása:</h3>\n";
                             $eredm = mysql_query("SELECT * FROM users WHERE id=$id");
                             $sora = mysql_fetch_object($eredm);
                             $un = $sora->UName;
                             $nn = $sora->NName;
                        }
                        print "<b>Neve:</b> <input type=\"text\" name=\"newuname\" size=\"30\" value=\"$un\"><br /><br />\n";
                        print "<b>Login neve:</b> <input type=\"text\" name=\"newnname\" size=\"30\" value=\"$nn\"><br /><br />\n";
                        print "<b>Jelszava:</b> <input type=\"password\" name=\"passw1\" size=\"32\"><br /><br />\n";
                        print "<b>Jelszó újra:</b> <input type=\"password\" name=\"passw2\" size=\"32\" ><br /><br />\n";
                        if ( ($_POST['userid'] == "valassz") ){
                             print "<input type=\"submit\" name=\"newuser\" value=\"Új felhasználó\">\n";
                        }
                        if ( ($_POST['userid'] !== "valassz") ){
                              print "<input type=\"submit\" name=\"modosit\" value=\"Adatmódosítás\"><br /><br />\n";
                              print "<input type=\"submit\" name=\"torol\" value=\"A felhasználó törlése\">\n";
                        }
                        print "</form>";
                  }
            print "</td>";
            print "</tr>";
            print "</table>";
?>
</body>
</html>

A következő lépésben a rendszer indítófájlját írjuk meg. Ennek neve index.php, és igen rövid lesz, rendszerindító parancsokból és a login.php betöltéséből áll:


<?php
session_start();
ob_start();
include "login.php";
ob_end_flush();
?>

Az indító file betöltése feltételezi a login.php állomány létezését. Ebben az első php szakasz felel a bejelentkezés ellenőrzésért.

            http://gmsoft.uw.hu/login.php

<?php
session_start();
include "config.php";
if ( !$_SESSION['nlogin'] ){
            if ( isset($_POST['login']) ){
                  $nname = addslashes($_POST['nname']);
                  $passw = md5($_POST['passw']);
                  $eredm = mysql_query("SELECT * FROM users WHERE ((NName='".$nname."') && (Passw='".$passw."'))");
                  if ( mysql_num_rows($eredm) !== 0 ){
                        $_SESSION['nlogin'] = true;
                        header("location: login.php");
                  }
            }
?>
<html>
<head>
<title>Beléptető rendszer</title>
</head>
<body bgcolor="#eeeeee">
<font face="Verdana">
<form method="POST">
<table border="1" bordercolor="#ffffff" cellpadding="10" cellspacing="0" bgcolor="#eeeeee">
<tr><td align="right">A felhasználó login neve: <input type="text" name="nname" size="22" /></td></tr>
<tr><td align="right">Jelszava: <input type="password" name="passw" size="24" /></td></tr>
<tr><td align="center"><input type="submit" name="login" value="Belépés" /></td></tr>
</table>
</font>
</form>
</html>
<?php
}
else{
            print "<html>\n";
            print "<head>\n";
            print "<title>Védett tartalom</title>\n";
            print "</head>\n";
            print "<body>\n";
            print "<font face=\"Verdana\">";
            print "Ez itt a védett tartalom!<br /><br />\n";
            print "Menü:<br /><br />\n";
            print "<a href=\"alap.php\">A-Lap</a><br /><br />\n";
            print "<a href=\"blap.php\">B-Lap</a><br /><br />\n";
            print "<a href=\"logout.php\">Kilépés</a>\n";
            print "</font>";
            print "</body>\n";
            print "</html>\n";
}
?>

Ha még nem lépett be a felhasználó, akkor egy beviteli felületet látunk, mely a bejelentkezési név és a jelszó beírására vár.


Ha érvényes az adatbevitel, akkor a második php szakaszban leírt egyszerű html oldal jelenik meg, Ez itt a védett tartalom! felirattal és egy egyszerű menüvel. Továbbléphetünk az A vagy B lapra, vagy Kiléphetünk a rendszerből.


Ha nem léptünk ki a rendszerből, akkor az itt leírt lapok böngészhetők a menü nélkül is, címbeírással. Ebben a demonstrációs rendszerben az A és B lap gyakorlatilag ugyanaz, lényegi különbség nincs közöttük. Mindkettő először a php szakaszban ellenőrzi, hogy sikeresen bejelentkeztünk-e, ha igen beenged a védett területre, ha nem, akkor arra kér bennünket, hogy jelentkezzünk be.

            http://gmsoft.uw.hu/alap.php

<html>
<head>
<title>Beléptető rendszer - A-Lap</title>
</head>
<body>
<font face="Verdana">
<?php
            session_start();
            include "config.php";
            if (!$_SESSION['nlogin']){
                  print "<a href=\"index.php\">Be kellene jelentkezni!</a>\n";
            }
            else{
                  print "A beléptető rendszer által védett tartalom: A-Lap.<br /><br />\n";
                  print "<a href=\"index.php\">Vissza</a>\n";
            }
?>
</font>
</body>
</html>

            Az A-Lap tartalma:


            A B-Lap tartalma szinte ugyanaz:


            Ha munkánkat befejeztük, akkor célszerű a rendszert a Menü Kilépés menüpontjával elhagyni. A Kilépés a logout.php állomány segítségével történik, melynek futtatásával újra a bejelentkezési felülethez jutunk. Az oldal listája:

            http://gmsoft.uw.hu/logout.php

<?php
session_start();
include "config.php";
unset($_SESSION['nlogin']);
session_destroy();
header("location: index.php");
?>

            Ha nem vagyunk bejelentkezve a rendszerbe, akkor az A és B lap nem böngészhető. Betöltéskor egy linkkel jelenik meg, melynek felirata: Be kellene jelentkezni! A link címe pedig index.php.

Nincsenek megjegyzések:

Megjegyzés küldése