瑞典字符在 Ajax 调用时给出潜在危险的请求.表单值错误
本文关键字:危险 请求 表单 错误 字符 Ajax 调用 | 更新日期: 2023-09-27 18:34:46
在我看来,我正在调用来自 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-
?
更新:
我进一步尝试了两件事:
- 我直接用
-Välj-
替换了@CommonResource.DropdownNoValueText
.现在我没有收到任何错误。(但这不是正确的解决方案,因为这不会解决语言特征(。 - 我在
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&#243;n
因此,使用&
代替&#
避免了问题,但会引起其他不必要的副作用。