ASP.NET MVC - создание и обработка URL-адресов с символами «больше, чем меньше» - PullRequest
2 голосов
/ 09 апреля 2010

Рассмотрим ссылку на страницу для профиля пользователя. Страница создает этот URL-адрес примерно так:

//Model.Name has value "<bad guy>"
Html.ActionLink("foo, "ViewUser", new { id=5, title=Url.Encode(Model.Name) })

Фактический результат был

http://mysite/Users/5/%253cbad%2guy%253e

При переходе по этому URL сервер генерирует HTTP Error 400 - Bad Request.

Проблема возникает при тестировании «интересных» пользовательских вводов с < и >, но все может быть получено от пользователя и поэтому может быть помещено в URL с помощью Model.Name.

Вопрос: Учитывая, что Model.Name может содержать символы Unicode или символы, недопустимые в URL-адресах:

  • Каков наилучший способ вырезать недопустимые символы или иным образом кодировать их?
  • должен ли ввод пользователя очищаться перед сохранением в базе данных, тем самым предотвращая попытку кодирования выше?
  • какие символы должны быть обработаны (т.е. не разрешены), когда вы думаете, что эта строка должна быть частью URL?

1 Ответ

2 голосов
/ 09 апреля 2010

Одним из способов является использование кодировки base 64 для любых параметров, которые могут содержать специальные символы.

Смотрите пример:

Разрешение специальных символов в параметрах URL ASP.Net MVC
http://gathadams.com/2009/01/06/allowing-special-characters-forward-slash-hash-asterisk-etc-in-aspnet-mvc-urls/

...