Подтвердить что ты не робот

Django: проблема утечки информации при использовании @login_required и установке LOGIN_URL

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

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

Итак, когда вы не вошли в систему и не просили:

 http://localhost:8000/validurl/

Вы видите следующее:

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

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

 http://localhost:8000/faultyurl/

Вы видите следующее:

 http://localhost:8000/login/

Это показывает некоторую информацию, которую я не хочу. Я думал о переопределении метода входа в систему, заставляя следующего пустого и вызывая "супер" по этому подклассу.

Дополнительная проблема заключается в том, что некоторые мои тесты терпят неудачу без набора LOGIN_URL. они перенаправляются на "/accounts/login/" вместо "/login/". Поэтому я хотел бы использовать LOGIN_URL, но отключить функцию "auto next".

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

Thanx много.

Gerard.

4b9b3361

Ответ 1

Вы можете включить эту строку в качестве последнего шаблона в свой файл 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),
)