Ian Bicking wrote:
> On Tuesday, September 16, 2003, at 04:31 PM, deelan wrote:
>>> Hi, if the code below is doing what I think it's doing, i.e.
>>> unpickling that field, you're opening yourself up to arbitrary code
>>> execution.  Unpickle should never be used with strings that come the
>>> user.
> 
>> yes, i'm aware of the security issues, but i bet there a way
>> to bundle to the base64 econded and serialized string some
>> key/GUID/whatever to ensure that VIEWSTATE is genuine, i
>> still have to look closely but i think ASP.NET does the same.
> 
> You can do this pretty easily:
> 
> key = str(random.random())
> def sign(value, key=key):
>      h = md5.new(value)
>      h.update(key)
>      return h.hexdigest()
> def verify(value, signature, key=key):
>      h = md5.new(value)
>      h.update(key)
>      return h.hexdigest() == signature
> 
> def signedPickle(obj, key=key):
>      value = dumbs(obj)
>      return value.encode('base64') + '^^^' + sign(value, key=key)
> def signedUnpickle(s, key=key):
>      try:
>          value, signature = s.split('^^^')
>      except ValueError:
>          value = signature = ''
>      if not verify(value, signature, key=key):
>          raise ValueError, 'Invalid pickle input'
>      return loads(value.decode('base64'))
> 
> 
> (Hmm... MiscUtils somewhere?)

Check out Python's hmac module.  It's designed for this sort of thing.
There's some security reason why it's better to use HMAC instead of just
using MD5, but I can't remember what the reason is.

The same idea can also be used to store (small amounts of) pickled session
data directly in cookies instead of using a session store on the server
side.  One of the many Python Web Frameworks uses this technique, I can't
remember which one.

- Geoff


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Webware-discuss mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/webware-discuss

Reply via email to