考虑一个指向用户个人资料页面的链接。一个页面正在创建这样的 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 的一部分时,应该对哪些字符进行清理(即不允许)?