Skip to content

Instantly share code, notes, and snippets.

@safebuffer
Created September 22, 2019 13:26
Show Gist options
  • Save safebuffer/bd6555dc2e9b7553f5269e83d17f515a to your computer and use it in GitHub Desktop.
Save safebuffer/bd6555dc2e9b7553f5269e83d17f515a to your computer and use it in GitHub Desktop.
IDOR protection Django
# -*- encoding: utf-8 -*-
from __future__ import unicode_literals
from functools import wraps
from django.core.exceptions import PermissionDenied
from django.core.exceptions import ObjectDoesNotExist
def door_safe(view=None,model=None):
def decorator(func):
@wraps(func)
def inner(request, *args, **kwargs):
if model:
user_field = [str(e.name) for e in model._meta.get_fields() if 'user' in str(e.name)][0]
check_keys = request.resolver_match.kwargs
if all([user_field,check_keys]):
check_keys[user_field] = request.user
try:
obj = model.objects.get(**check_keys)
except Exception as e:
#log the request
raise PermissionDenied
return func(request, *args, **kwargs)
return inner
if view:
return decorator(view)
return decorator
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment