Michelle Konzack schreef:
> Hello,
> 
> I have at my hosting provider only 1 GByte of Diskspace and can  install
> VHosts as much as I want.  The problem is, that I  have  "no access"  to
> the OS for OS-Level autentification.
> 
> Currently I have
> 
>     ${CUSTOMERPATH}/htdocs/index.php
> 
> which handel all VHosts and get ist config from directories like
> 
>     ${CUSTOMERPATH}/CONFIG_<vhost>.tamay-dogan.net/...
> 
> in which I currently use files like
> 
>     <user>:<shadow_passwd>
> 
> and then I use:
> 
> ----[ STDIN ]-----------------------------------------------------------
> function login($user, $pass, $redirect) {
> 
>   if ($user != '' and $pass != '') {
> 
>     $SHADOW=exec("grep \"^$user:\" " . DIR_HOST . "/.shadow |cut -d: -f2");
>     if (empty($SHADOW)) {
>       header("Content-Type: text/html");
>       die("<meta http-equiv=\"refresh\" content=\"5;$redirect\">\n<font 
> size=\"+2\" color=\"red\"><b>Error</b></font><hr size=\"3\" 
> noshade=\"noshade\">The username \"$user\" does not exist.");
>     }
> 
>     $SALT=exec("grep \"^$user:\" " . DIR_HOST . "/.shadow |cut -d: -f2 |cut 
> -d$ -f1-3");
>     $ENCRYPTED=crypt($pass, $SALT);

seems like a lot of pain to go through, what with all that shell'ing out to 
grep data.
I'd personally go for a simple DB table and use/store sha1() hashes.

>     if ($SHADOW != $ENCRYPTED) {
>       header("Content-Type: text/html");

text/html is the default content-type why bother with this line?

>       die("<meta http-equiv=\"refresh\" content=\"5;$redirect\">\n<font 
> size=\"+2\" color=\"red\"><b>Error</b></font><hr size=\"3\" 
> noshade=\"noshade\">Wrong password for user \"$user\".");

I'm not a fan of die()ing in this fashion. I would argue the function should 
either
return true or false and let the caller decide what to do (e.g. show a login 
form again
or something)

I'm not a fan of meta-refreshes either.

>     }
>     $TIME_NOW=date("U");
>     $SESSID=exec("echo \"${user}${TIME_NOW}\" |md5sum |sed 's| .*||'");
>     setcookie('TDSESSION', "$SESSID");
>     setcookie('USER', $user);
>     exec("echo '" . date("U") . " " . $user . "' >" . DIR_SESSIONS . "/" . 
> $SESSID);

I smell a race condition or something ... also why go to all this trouble when 
you
could just use session_start() (and stick $TIME_NOW, $user, etc in $_SESSION) ?

>   }
>   if (empty($redirect)) {
>     $redirect="/";
>   }
>   header("Content-Type: text/html");
>   die("<meta http-equiv=\"refresh\" content=\"0;$redirect\">");
> }
> ------------------------------------------------------------------------
> 
> which is working properly...
> 
> I like to know, whether this  is  good  enough  or  is  there  a  better
> solution?
>

there is always a better way ;-) ... the only real problem I envisage might be
related to file permissions on files in the DIR_SESSIONS dir ... given that this
stuff is in use, working, probably not protecting very sensitive data and the 
fact that
you're probably not going to get paid to change it ... I'd leave it be and go 
have a
beer or something :-)

> Thanks, Greetings and nice Day/Evening
>     Michelle Konzack
>     Systemadministrator
>     24V Electronic Engineer
>     Tamay Dogan Network
>     Debian GNU/Linux Consultant
> 
> 


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

Reply via email to