2010-04-09 4 views
2

Рассмотрите ссылку на страницу для профиля пользователя. Страница создает этот адрес, как это:ASP.NET MVC - создание и обработка 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-адреса?

ответ

2

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

Смотрите здесь для примера:

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

+0

См http://stackoverflow.com/questions/1228701/code-for-decoding -encoding-a-modified-base64-url для хорошего примера использования кодировки base 64 ... и декодирования – w4ik