2

考虑一个指向用户个人资料页面的链接。一个页面正在创建这样的 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.

当使用 和测试“有趣的”用户输入时,问题就会浮出水面<>但任何东西都可能来自用户,因此通过Model.Name.

问题: 鉴于Model.Name可能包含 Unicode 字符,或 URL 中的其他非法字符:

  • 去除非法字符或以其他方式对其进行编码的最佳方法是什么?
  • 是否应该在将用户的输入保存到数据库之前对其进行清理,从而防止上述编码尝试?
  • 当考虑将该字符串作为 URL 的一部分时,应该对哪些字符进行清理(即不允许)?
4

1 回答 1

2

一种方法是对可能包含特殊字符的任何参数使用 base 64 编码。

请参阅此处的示例:

在 ASP.Net MVC URL 参数中允许特殊字符
http://gathadams.com/2009/01/06/allowing-special-characters-forward-slash-hash-asterisk-etc-in-aspnet-mvc-urls/

于 2010-04-09T03:03:57.427 回答