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, но отключить 'автоматическую следующую' опцию.

Кто-либо, который может пролить некоторый свет на предмет?

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

Gerard.

10
задан jbochi 11 January 2010 в 16:57
поделиться

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),
)
5
ответ дан 4 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: