durusmail: quixote-users: session change
session change
2002-04-29
2002-05-06
2002-05-06
2002-05-06
session change
Jonathan Corbet
2002-04-29
> I don't think there is any good reason to have the IP address in the
> cookie.  Also, making the cookie purely a random number feels right to
> me although I can't explain why.  The remote IP address is available as
> the 'remote_address' attribute on Session objects.

It need not be in the cookie itself...especially that it's *now* available
in the session object.

> You can still do this using the remote_address attribute of the Session
> object.  Good idea, BTW.  It could be defeated but it definitely raises
> the barrier.  Do you mind submitting a patch?

Here it is, pretty simple stuff.

diff -ur Quixote-0.4.7-vanilla/config.py Quixote-0.4.7/config.py
--- Quixote-0.4.7-vanilla/config.py     Mon Apr 29 11:37:34 2002
+++ Quixote-0.4.7/config.py     Mon Apr 29 11:45:44 2002
@@ -106,6 +106,10 @@
 COOKIE_NAME = "QX_session"
 COOKIE_PATH = "/"

+# If true, the originating IP address of a request will be checked against
+# the session it claims to be using; this is a defense against playback
+# attacks.  It will frustrate mobile laptop users, though.
+CHECK_SESSION_ADDR = 0

 # Mail-related variables
 # ======================
@@ -185,6 +189,7 @@
         'cookie_domain',
         'cookie_name',
         'cookie_path',
+        'check_session_addr',
         'mail_from',
         'mail_server',
         'mail_debug_addr',
diff -ur Quixote-0.4.7-vanilla/session.py Quixote-0.4.7/session.py
--- Quixote-0.4.7-vanilla/session.py    Mon Apr 29 11:37:34 2002
+++ Quixote-0.4.7/session.py    Mon Apr 29 11:48:32 2002
@@ -156,7 +156,9 @@
             id = None
         if id is not None:
             session = self.sessions.get(id)
-            if session is None:
+            if session is None or (config.check_session_addr and \
+                                   session.remote_address !=
+                                   request.get_environ("REMOTE_ADDR")):
                 # Note that it's important to revoke the session cookie
                 # so the user doesn't keep getting "Expired session ID"
                 # error pages.  However, it has to be done in the

jon

Jonathan Corbet
Executive editor, LWN.net
corbet@lwn.net


reply