Fixed a possible timing attack channel

This commit is contained in:
Raphael Michel
2016-09-12 20:38:41 +02:00
parent f165275ade
commit 01f0673683

View File

@@ -34,10 +34,17 @@ class OrderDetailMixin:
@cached_property
def order(self):
try:
return Order.objects.get(secret=self.kwargs['secret'],
event=self.request.event, code=self.kwargs['order'])
order = Order.objects.get(event=self.request.event, code=self.kwargs['order'])
if order.secret.lower() == self.kwargs['secret'].lower():
return order
else:
return None
except Order.DoesNotExist:
return None
# Do a comparison as well to harden timing attacks
if 'abcdefghijklmnopq'.lower() == self.kwargs['secret'].lower():
return None
else:
return None
@cached_property
def payment_provider(self):