fixed a potential timing attack, thanks Kirill Spitsin
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.00.0 (2012-06-13 11:52:33) dev
|
Version 2.00.0 (2012-06-13 16:45:24) dev
|
||||||
|
|||||||
+3
-2
@@ -25,7 +25,7 @@ from HTMLParser import HTMLParser
|
|||||||
from htmlentitydefs import name2codepoint
|
from htmlentitydefs import name2codepoint
|
||||||
|
|
||||||
from storage import Storage
|
from storage import Storage
|
||||||
from utils import web2py_uuid, hmac_hash
|
from utils import web2py_uuid, hmac_hash, compare
|
||||||
from highlight import highlight
|
from highlight import highlight
|
||||||
|
|
||||||
regex_crlf = re.compile('\r|\n')
|
regex_crlf = re.compile('\r|\n')
|
||||||
@@ -455,7 +455,8 @@ def verifyURL(request, hmac_key=None, hash_vars=True, salt=None, user_signature=
|
|||||||
|
|
||||||
# return whether or not the signature in the request matched the one we just generated
|
# return whether or not the signature in the request matched the one we just generated
|
||||||
# (I.E. was the message the same as the one we originally signed)
|
# (I.E. was the message the same as the one we originally signed)
|
||||||
return original_sig == sig
|
|
||||||
|
return compare(original_sig, sig)
|
||||||
|
|
||||||
URL.verify = verifyURL
|
URL.verify = verifyURL
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ import logging
|
|||||||
|
|
||||||
logger = logging.getLogger("web2py")
|
logger = logging.getLogger("web2py")
|
||||||
|
|
||||||
|
def compare(a,b):
|
||||||
|
""" compares two strings and not vulnerable to timing attacks """
|
||||||
|
return len(a)==len(b) and all(x==b[i] for i,x in enumerate(a))
|
||||||
|
|
||||||
def md5_hash(text):
|
def md5_hash(text):
|
||||||
""" Generate a md5 hash with the given text """
|
""" Generate a md5 hash with the given text """
|
||||||
return hashlib.md5(text).hexdigest()
|
return hashlib.md5(text).hexdigest()
|
||||||
|
|||||||
Reference in New Issue
Block a user