javascript - 在 MVC 参数中编码特殊字符 < 和 >

标签 javascript asp.net-mvc-3

我正在尝试编码 <>在 MVC 参数中,尝试使用 encodeURIComponent,但是解码似乎发生在到达 Controller 之前,它破坏了路由

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Default",
        "Home/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}

http://localhost/HomeStretch/Home/ListAll?Value=%22%7B%3Cdbid%3E%7BD576959C-31F8-469B-9C23-17B046DF590F%7D%3Cdbid%3E%7D%22"

如果我拿走 <>插入符号有效,如果我将它们留在通话中失败。我可以使用 * 进行自己的愚蠢转换而不是 % ,但是我想知道是否有更好的方法来解决这个问题?

原来这可能是一个安全问题,我正在搜索事件日志,发现下面的异常被抛出。如何正确隔离我的标签,以免发生这种情况?

Exception information: 
    Exception type: HttpRequestValidationException 
    Exception message: A potentially dangerous Request.QueryString value was detected from the client (Filters[0].Value=""{<dbid>{D576959C-31F8...").
at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
at System.Web.HttpValueCollection.GetValues(String name)

最佳答案

重新考虑为什么要以这种格式发送信息。您显示的字符串转换为:

Value="{<dbid>{D576959C-31F8-469B-9C23-17B046DF590F}<dbid>}"

ASP.NET 正在努力保护您免受可能试图注入(inject)攻击的黑客的攻击。它看到 <dbid> ,并且它认为他们可能正在尝试将 HTML 发送到您的服务器。

如果你真的需要支持这种输入,那么你可以使用 [AllowHtml]关于您告诉 ASP.NET 的操作,您将非常小心,不要在未正确编码的情况下使用此输入。

但我强烈建议您重新考虑为什么要以这种方式发送信息。在我看来dbid=D576959C-31F8-469B-9C23-17B046DF590F可能有用,或者可能是 Value={"dbid": "D576959C-31F8-469B-9C23-17B046DF590F"} .

关于javascript - 在 MVC 参数中编码特殊字符 < 和 >,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25389437/

相关文章:

javascript - 如何防止在 Javascript 中双击选择文本

javascript - 你能缩短一个 'if' 语句,其中某个变量可能是多个东西吗

Razor View 中 &lt;script&gt; 标记内的 C# 'if' 关键字

javascript - 禁用 JavaScript 所需的验证

javascript - MVC3 客户端验证不起作用

javascript - JavaScript MouseEvent 中的 e.metaKey 指的是哪个键?

javascript - 我如何通过单击一个元素淡出一个 div 并淡入一个? HTML

javascript - Dojo 可移动以提供动态内容

asp.net-mvc-3 - urlHelper.RouteUrl 没有生成正确的 URL

jquery - ASP.NET MVC 3 的非侵入式客户端验证需要哪些文件才能正常工作?