ASP.NET核心如何覆盖无效值消息

ASP.NET Core how to override not valid value message

我正在使用 Acunetix 执行渗透测试,以下查询 "api/venues?gameId=1'"()%26%25vAtC(9571)" 得到以下响应:

{
    "status": 400,
    "userMessage": [
        "There are validation errors"
    ],
    "validationErrors": [
        "The value '1'\"()&%<acx><ScRiPt >NJMi(9780)</ScRiPt>' is not valid."
    ]
}

这被 Acunetix 检测为一个可能的 XSS 安全问题,我想覆盖验证错误消息以避免在整个应用程序中出现这种情况。

可以像这样自定义模型活页夹消息:

services.AddMvcCore().AddMvcOptions(options =>
{
    options.ModelBindingMessageProvider.SetNonPropertyAttemptedValueIsInvalidAccessor(s => "The provided value is invalid.");
});

值得补充的是,还有 3 个其他 baked in binder 错误,它们显示了返回值,总共:

options.ModelBindingMessageProvider.SetAttemptedValueIsInvalidAccessor((x, y) => $"The value is not valid for {y}.");
options.ModelBindingMessageProvider.SetNonPropertyAttemptedValueIsInvalidAccessor(x => "The value is not valid.");
options.ModelBindingMessageProvider.SetValueIsInvalidAccessor(x => "The value is invalid.");
options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(x => "The value is invalid.");

最好检查 MSDN ModelBinding 消息提供程序,了解当前可用的内容。