Re: session management

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If you are worried about speed in regards to the server accessing session information then you will want to utilize the mcache service daemon as well as the php mcache libraries in your code.

Session hijacking attacks on web applications involve utilizing known attack vectors such as the static method of the PHP global session_id(). Essentially allowing an attacker to 'guess' a session id and attempt to create a local cookie matching that id in order to access a web application as the user whose session id is being spoofed. For more information -> http://en.wikipedia.org/wiki/Session_hijacking

Cross site request forgery is more involved and can be read about here -> http://en.wikipedia.org/wiki/Cross_site_request_forgery

One method of helping keep your application safe is to utilize common unique identifiers per user such as information per page request stored in the $_SERVER super global within PHP.

Remote_addr, user_agent, and referrer and three good unique identifiers in which to prevent attackers from hijacking users sessions.

You may also want to lookup information regarding regeneration of the session_id on each new page request an authenticated user visits. This will help prevent another attack vector known as session fixation.

I am no expert, but research and testing are key. Everyone does it different but my method involves the following steps:

1. Present login form for user
2. Require server side to process input using PHP
3. Check your authentication source (database, flat file, ldap, or directory server for user credentials) 4. Create public/private key pair along with encryption IV and associate private key and IV with user account as well as unique identifiers (do not send this information back to client as it is used to decrypt our authentication token later) 5. Gather unique identifiers of user (ip address, browser type, referring page), including the public key that was generated 6. Use private key to encrypt each variable and then encode as a utf-8 compatible string in order to register as a session variable on server (within mcache, mysql or default flat file) 7. On each page user requests ensure their token is valid by using the following steps:
- check token length
- decrypt token information
- re-authenticate user in database, flat file or other authentication source
- ensure unique variables are the same to protect against session hijacking
- ensure user requesting protected pages are coming from your site by checking decrypted value of the user referrer - if all checks pass simply regenerate the session id and allow for the user to access the page requested

I hope this makes sense to you and I am sure its a bit to digest but it should get you started and give you some things to think about.


Vinay Kannan wrote:
Hi Jason,

Yes this is going to be a public facing application with 3 level heirarchy,
and maybe around 100 tiny companies(3-4 employees) using it.

App is going to be on a Hosted Server.

DB session mgmt would be a bit slower, is it? I have thought about cross
site forgery and session hijacking, but the more I think about it, I realize
the lesser I know about it all :(

So thought this would be the best place to start.
Thanks,
Vinay

On Thu, Apr 22, 2010 at 11:19 AM, Jason Gerfen <jason.gerfen@xxxxxxxxxxxx>wrote:

How secure would you want it? Is this is a public facing web application?

Are you in a shared hosting environment vs. a dedicated hosting
environment? Do you require alternative session management such as database
or mcache vs. flat file session support?

Have you thought about cross site request forgery's? session hijacking etc?

There are tons of things to take into consideration but setting a flag per
user session is indeed one method of ensuring a user has authenticated.


Vinay Kannan wrote:

Hey Guys,

I need some help on an effficient session management, right now what I do
is
check if the user has loggedin using his username, and create a
SESSION['logged']=1, setting a login flag actually, I am not sure if this
is
the best way ?

What do you guys use for sessions, and which is the best possible way ?

Thanks,
Vinay



--
Jas





--
Jas


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


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux