瑞典字符在 Ajax 调用时给出潜在危险的请求.表单值错误



在我看来,我正在调用来自 Ajax 的控制器函数

$.ajax({
    type: "POST",
    url: "@Url.Action("GetSelectedItemsForRoleId","User")",
    data: { optionLabel: '@CommonResource.DropdownNoValueText', optionValue: null, selectedValue: null, filterValue: 0 },
    success: function (result) {
        alert('success');
        var departmentDropdown = $('#RoleId').data("DropDownList");
        departmentDropdown.setDataSource(result);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown)
    {
        alert('XMLHttpRequest ' + XMLHttpRequest);
        alert('textStatus ' + textStatus);
        alert('errorThrown ' + errorThrown);
        //some stuff on failure
    },
    dataType: "json",
    traditional: true,
    async: false
});  

CommonResource.DropdownNoValueText is -Välj-

我在故障块中收到以下错误:

从客户端检测到具有潜在危险的请求。表单值

我的控制器签名如下所示:

public ActionResult GetSelectedItemsForRoleId(string optionLabel, string optionValue, string selectedValue, int filterValue)  

我试图将ValidateInput注释放在这个函数上方并将其设置为 false。
完成后,字符串显示为 -Välj- .
这是什么原因,我如何推导出原始文本,即 -Välj-

更新
我进一步尝试了两件事:

  1. 我直接用-Välj-替换了@CommonResource.DropdownNoValueText.现在我没有收到任何错误。(但这不是正确的解决方案,因为这不会解决语言特征(。
  2. 我在 CommonResource 中用其他类似 eee 的东西替换了DropdownNoValueText,它也不会出错。(但即使这样也不是解决方案(。

我在瑞典语和西班牙语字符上都有类似的问题。我们使用了方法 HttpUtility.JavaScriptStringEncode 从字符串中编码字符并导致 & 符号后跟哈希符号:

puntuación   

这反过来又导致了.NET 的安全反应(返回错误(。

解决方案是将类HtmlUtility使用的默认编码器更改为不使用默认编码器(HtmlEncoder(,而是不使用特殊瑞典语或西班牙语字符等字符的AntiXssEncoder,因为它们是无害的(不能用于XSS攻击(。

在此之后,瑞典语/西班牙语字符不会被编码,因此也避免&#字符串,所以.避免了 NET 的安全反应(错误(.
此更改位于配置文件中,可能具有全局影响:

<httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder"/>

只是为了添加一些有关避免情况原因的信息 - 解决此问题的失败尝试是使用 HttpUtility.HtmlEncode 而不是将字符串更改为 HttpUtility.JavaScriptStringEncode

puntuaci&amp;#243;n

因此,使用&amp;代替&#避免了问题,但会引起其他不必要的副作用。

最新更新