Проверка ReturnUrl действительна перед перенаправлением - PullRequest
3 голосов
/ 20 февраля 2010

Я использую членство в ASP.NET и проверку подлинности на основе форм, и перед перенаправлением на returnURL я хотел его проверить. Для тех, кто не знаком с рабочим процессом, в основном, если вы запрашиваете страницу, требующую аутентификации, вы будете перенаправлены на страницу входа. В строке URL вы увидите параметр с именем returnURL, например, http://example.com/login.aspx?ReturnUrl=%2fprotected%2fdefault.aspx

Независимо от того, используете ли вы это в редиректе, таком как Response.Redirect (returnURL) или косвенно через метод FormsAuthentication.RedirectFromLoginPage, он проходит без проверки returnURL. FormsAuthentication.RedirectFromLoginPage действительно имеет проверку безопасности, что он не покидает домен, но это все же не мешает кому-то вводить достаточно случайных символов, чтобы вызвать ошибку.

Я пытался использовать System.IO.File.Exists(Server.MapPath(returnURL)), но при наличии достаточно недопустимых символов это приводит к ошибке Server.MapPath.

Примечание: URLEncoding не работает, потому что мы не очищаем параметр, а основной URL.

Есть ли другие предложения для проверки или очистки значения returnURL?

1 Ответ

2 голосов
/ 20 февраля 2010

Этот пост объясняет анатомию ReturnURL http://blogs.msdn.com/vijaysk/archive/2008/01/24/anatomy-of-forms-authentication-return-url.aspx

Как вы правильно заявили, домен проверен, поэтому наряду с шифрованием файла cookie аутентификации и обеспечением использования https, я думаю, единственное, что вы можете сделать, чтобы остановить недействительный ReturnURL, это просто проигнорировать его и перенаправить все входы в систему. на домашнюю страницу или верхний уровень вашего сайта, позволяя пользователям затем вернуться через меню. Хороший пример этого - когда вы входите в Hotmail.

...