Я использую членство в 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?