Django: проблема утечки информации при использовании @login_required и установке LOGIN_URL - PullRequest
10 голосов
/ 11 января 2010

Я обнаружил форму утечки информации при использовании декоратора @login_required и установке переменной LOGIN_URL.

У меня есть сайт, который требует обязательного входа для всего контента. Проблема в том, что вы перенаправлены на страницу входа со следующей переменной, установленной, когда это существующая страница.

Так что когда не залогинен и спрашивает:

 http://localhost:8000/validurl/

Вы видите это:

 http://localhost:8000/login/?next=/validurl/

А при запросе несуществующей страницы:

 http://localhost:8000/faultyurl/

Вы видите это:

 http://localhost:8000/login/

Который раскрывает некоторую информацию, которую я не хочу. Я думал о переопределении метода входа в систему, принуждении next к пустому и вызове super в этом подклассовом методе.

Дополнительная проблема заключается в том, что некоторые из моих тестов не проходят без установки LOGIN_URL. они перенаправляют на «/ account / login /» вместо «/ login /». Поэтому я хотел бы использовать LOGIN_URL, но отключить функцию «авто следующий».

Кто-нибудь может пролить свет на эту тему?

Большое спасибо.

Gerard.

1 Ответ

5 голосов
/ 11 января 2010

Вы можете включить эту строку как последний шаблон в вашем файле urls.py. Он перенаправит URL-адреса, которые не соответствуют ни одному другому шаблону, на страницу входа.

urlpatterns = patterns('',

    ...

    (r'^(?P<path>.+)$', 'django.views.generic.simple.redirect_to', {
        'url': '/login/?next=/%(path)s', 
        'permanent': False
    }),
)

РЕДАКТИРОВАТЬ: Чтобы поднять 404 страниц для аутентифицированных пользователей, выполните следующие действия:

from django.http import Http404, HttpResponseRedirect
def fake_redirect(request, path):
    if request.user.is_authenticated:
        raise Http404()
    else:
        return HttpResponseRedirect('/login/?next=/%s' % path)

urlpatterns = patterns('',

    ...

    (r'^(?P<path>.+)$', fake_redirect),
)
...