tags:

views:

98

answers:

3

One of the ways I have used to make securer sessions in the past is to also record the clients IP address and user agent at the handshake. Each time the client moves a page and calls session_start() I also check that the IP address and user agent stored is still the same to prevent hiijacking.

But if someone is connecting from say a company network then all the users will probably have the same external static IP address and they could also really easily be using the same user agent. Is there other metrics I can use which are local only to the physical machine?

Thanks

+1  A: 

Not really in terms of generally available and reliable metrics, no. There are headers like X-HTTP-FORWARDED-FOR sent out by Proxies sometimes, but any self-respecting router won't tell the server which of its clients is accessing it.

I think the best you can do is a combination of

  • Session cookie
  • User Agent string

I wouldn't check for the IP address, first for the reason you mention, and second because some ISPs like AOL for example use proxies that can have the same client's IP change multiple times during the same session.

A "soft" security measure that comes to mind is Geolocation. If the same session cookie is being used by an IP in, say, Paris, France, and at the same time (or just an hour later) by one located in Sydney, Australia, it is possible that something shady is going on. I'm saying "possible" because there are conceivable legitimate scenarios for this - for example, an Australian in Paris switching over to their company VPN.

If you're really a lot about security, you could build something that triggers some alarm bells in such a case, or asks the user a secret question or something. There are a number of Geolocation providers, e.g. MaxMind or Geobytes. I think stuff like this is what the big leagues, global sites like Amazon, PayPal, etc. do to prevent fraud.

Pekka
so is there really no fail safe way to prevent someone hiijacking the session? Its obviously pretty slim odds that someone will guess a correct session id but I dont believe that security through obscurity is security. Are we saying then that really we just make it as difficult as possible for them to hiijack it but theres no complete way to stop it?
Christopher McCann
@Christopher to my knowledge, in plain PHP on a normal, run-off-the-mill webserver, without additional client side software, there is indeed no fail-safe way to protect against session hijacking. However, *guessing* a session ID is pretty hard and already goes way beyond security by obscurity. The problem is usually somebody looking into the victim's cookie cache.
Pekka
thanks very much Pekka
Christopher McCann
A: 

session id. were invented to be unique

Col. Shrapnel
A: 

In addition to this I would like to add that using the user agent can also lead to problems. We've seen user agents get changed by any number of 'security' software packages and also by ISPs.

Andrew McCombe