I've been developing a simple (protecting nuclear secrets it aint) login / 
authentication class library.

This code is designed to -

1. check unname & password are completed
2. check uname & password contain only permitted chars (a-z,1-9)
3. match user against dbase user table
4. generate a unique session token
5. store session token in dbase
6. set client side session cookie

I've attached the code here in the hope that it may be of use to some of 
you.  I also welcome any feedback regarding problems / security shortcomings 
or ways it can be improved.

Happy Coding...

Notes -

-- dbase is postgres (dbase stuff should probably should be abstracted to 
make the code platform independant)

-- password encyrption is done using CRYPT_STD_DES rather than md5 because 
of legacy data (passwords in current dbase are crypted like this)

Here's the code...

begin index.html >>

<?php

include("./lib/doLogin.inc");

?>

end index.html

begin doLogin.inc >>

<?php

/*
        App Name Here -------------------------------------------
        doLogin.inc
        ** login validation / user authentication **
        */


// dbase class
include("./lib/db.inc");
// log class
//include("./lib/log.inc");

$uname = $_POST['uname'];
$pass = $_POST['pass'];

// if login form submitted do authentication
if ((isset($uname)) && (isset($pass))) {
        $doLogin = new doLogin($uname,$pass);
} else {
        displayLogin();
}


/// -----------------------------------------------------


class doLogin {

        function doLogin($uname,$pass) {

                $this->uname = $uname;
                $this->pass = $pass;
                $this->cookieName = "cookieName";

                $this->authUser();
        }


   // validate & authenticate
        function authUser(){


                // check that both uname & password are complete
                $this->loginDataComplete();

                // check uname & pass contain only valid chars
                $this->validateLogin();

                // create dbase object
                $db = new db();

                // encrypt password
                $cryptedpass = crypt($this->pass,"CRYPT_STD_DES");

                // select user & password from dbase
                $userQuery = pg_exec($db->db, "select oid, adminuser from user where 
username = '$this->uname' and  pass = '$cryptedpass'");

        if (pg_NumRows($userQuery) != 1) {
                        $this->halt();
                } else {
                        $user_oid = pg_Result($userQuery, 0, "oid");
                        $this->adminUsr = pg_Result($userQuery, 0, "adminuser");

                        // generate unique md5 crypted session token
                        $this->createSessionID();

                        // write session token 2 user table
              $resultSessid = pg_Exec($db->db, "update user set sessid = 
'$this->session_id' where oid = $user_oid");

                        // set session cookie
                        $this->setSessionCookie();

                        // authentication complete
                        // redirect 2 welcome page here
                }
        }



        // check uname & password are not empty
        function loginDataComplete(){
                if ((!isset($uname)) || (!isset($pass))) {
                        $this->halt;
                } else {
                        return;
                }
        }


        // do login char validation
        function validateLogin() {
                if ( (!$isValidUname = $this->validateChars($this->uname)) || 
(!$isValidPass = $this->validateChars($this->pass)) ) {
                        //$this->halt();
                } else {
                        return;
                }
        }


        // validates login against permitted chars
        function validateChars($what){
                $isValid = (ereg("^([A-Za-z0-9_]*)$", $what)) ? true : false;
                return $isValid;
        }


        // create unique md5 encrypted session token
        function createSessionID() {
                srand((double)microtime()*1000000);
                $this->session_id = md5(uniqid(rand()));
                return;
        }


        // set cookie with encrypted session token
        function setSessionCookie(){
        $issetCookie = setcookie($this->cookieName, $this->session_id, 
time()+7200);  /* expire in 1 hour */
                if (!$issetCookie == 1) {
                        $this->halt();
                } else {
                        return;
                }
        }


        // record logon attempt 2 in log
        function recordLogin(){
                $log = new log;
                $log->record();
        }



        // halt && display errors
        function halt() {
                // authentication failed display login form
                displayLogin();
                // write login attempt to log here
                // call 2 optional error msg handler here
        }



} // end authentication class 
-----------------------------------------------




// login presentation template
function displayLogin() {

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
        <title></title>

<script language="JavaScript" src="./javascript/common.js"></script>
<script language="JavaScript" src="./javascript/index.js"></script>

</head>

<body onload="init()" leftmargin="0" marginwidth="0" topmargin="0" 
marginheight="0">

<div align="center">

<table cellpadding="0" cellspacing="0" border="0">
        <tr><td colspan="2"><img src="images/1pix.gif" height="30"  
border="0"></td></tr>
        <tr><td colspan="2" align="center"><img src="images/nav.gif"  
border="0"></td></tr>
        <tr><td colspan="2"><img src="images/1pix.gif" height="30"  
border="0"></td></tr>
        <tr><td colspan="2" align="right"><img src="images/brand.gif"  
border="0"></td></tr>
        <tr><td colspan="2"><img src="images/1pix.gif" height="30"  
border="0"></td></tr>
        <tr><td colspan="2" class=text align="center"><img 
src="images/temp_nav.gif"  border="0"></td></tr>
        <tr>
                <td width="345"><img src="images/1pix.gif" width="345"  
border="0"></td>
                <td width="345" align="right" valign="top">
                <table cellpadding="0" cellspacing="6" border="0">
                        <tr><td colspan="2"><img src="images/1pix.gif" height="10"  
border="0"></td></tr>
                        <tr><td width="345" colspan="2"><div class="textTitle">Please 
enter your 
Username &amp; Password</div></td></tr>
                        <tr><td colspan="2"><img src="images/1pix.gif" height="10"  
border="0"></td></tr>
                        <form enctype="multipart/form-data" action="./index.html" 
method="POST" 
name="loginForm" onsubmit="return doLogin(this)" style="margin:0px; 
padding:0px;">
                        <tr>
                                <td width="72" class="text">username</td>
                                <td width="273"><input type="text" name="uname" 
class="loginForm" 
tabindex="1"></td>
                        </tr>
                        <tr>
                                <td class="text">password</td>
                                <td><input type="Password" name="pass" 
class="loginForm"></td>
                        </tr>
                        <tr><td colspan="2"><img src="images/1pix.gif" height="2"  
border="0"></td></tr>
                        <tr>
                                <td></td>
                                <td><input type="image" src="images/login.gif" 
name="doLogin" border="0" 
alt="Click Here to Login..." style="cursor: hand;"></td></tr>
                        </tr>
                        </form>
                        <tr><td colspan="2"><img src="images/1pix.gif" height="10"  
border="0"></td></tr>
                        <tr>
                                <td width="320" colspan="2">
                                        <div class="textTitle">warning:</div>
                                        <div class="text" align="justify">warning 
message and legal stuff 
here</div>
                                </td>
                        </tr>
                </table>
                </td>
        </tr>
</table>

</div>

</body>

<script>
<!--

        if (document.forms[0][0].value != '') {
                 document.forms[0][1].focus();
        } else {
                 document.forms[0][0].focus();
        }

// -->
</script>
</html>

<?php

} // end display login

?>


END doLogin.inc //


_________________________________________________________________
Chat with friends online, try MSN Messenger: http://messenger.msn.com


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to