ASP.NET MVC 使用自定义模型绑定程序时从客户端检测到潜在危险的 Request.Form 值

2024-06-24

在这里得到错误:

ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");

如何仅允许选择值? IE。

[ValidateInput(false)]
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
    ValueProviderResult value2 = bindingContext.ValueProvider.GetValue("ConfirmationMessage2");
}

你有几个选择。

在模型上将此属性添加到您需要允许 HTML 的每个属性 -最好的选择

using System.Web.Mvc;

[AllowHtml]
public string SomeProperty { get; set; }

在控制器操作上添加此属性以允许所有 HTML

[ValidateInput(false)]
public ActionResult SomeAction(MyViewModel myViewModel)

web.config 中的暴力破解 -绝对不推荐

在 web.config 文件的标记内,插入具有 requestValidationMode="2.0" 属性的 httpRuntime 元素。还要在页面元素中添加 validateRequest="false" 属性。

<configuration>
  <system.web>
   <httpRuntime requestValidationMode="2.0" />
  </system.web>
  <pages validateRequest="false">
  </pages>
</configuration>

更多信息:http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx

以上适用于默认 modelbinder 的用法。

自定义模型绑定器

看来,无论任何属性如何,上面代码中对 bindingContext.ValueProvider.GetValue() 的调用始终会验证数据。深入研究 ASP.NET MVC 源代码会发现,DefaultModelBinder 首先检查请求是否需要验证,然后使用指示是否需要验证的参数调用 bindingContext.UnvalidatedValueProvider.GetValue() 方法。

不幸的是,我们无法使用任何框架代码,因为它是密封的、私有的或其他任何东西,以保护无知的开发人员免于做危险的事情,但创建一个尊重AllowHtml和ValidateInput属性的工作自定义模型绑定器并不太困难:

public class MyModelBinder: IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        // First check if request validation is required
        var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled;

        // Get value
        var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation);
        if (valueProviderResult != null)
        {
            var theValue = valueProviderResult.AttemptedValue;

            // etc...
        }
    }
}

另一个必需的部分是检索未经验证的值的方法。在此示例中,我们使用 ModelBindingContext 类的扩展方法:

public static class ExtensionHelpers
{
    public static ValueProviderResult GetValueFromValueProvider(this ModelBindingContext bindingContext, bool performRequestValidation)
    {
        var unvalidatedValueProvider = bindingContext.ValueProvider as IUnvalidatedValueProvider;
        return (unvalidatedValueProvider != null)
          ? unvalidatedValueProvider.GetValue(bindingContext.ModelName, !performRequestValidation)
          : bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
    }
}

有关此的更多信息,请访问http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/ http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 使用自定义模型绑定程序时从客户端检测到潜在危险的 Request.Form 值 的相关文章

  • ASP.Net MVC 在哪里从实体转换为视图模型?

    标题几乎解释了一切 这是我在我们的项目中尝试做的最后一件事 我们的结构是一个服务库 其中包含这样的功能
  • 如何使用带有 Scripts.Render 的 ASP MVC 4 捆绑包的脚本延迟属性

    我浏览了 Google 和 Stackoverflow 但没有找到答案 是否有任何内置方法可以使捆绑包按延迟执行 或者有人知道有人为此编写的扩展帮助器方法吗 尝试将 Web Optimization 升级到版本 1 1 0Codeplex
  • 使用 ASP.Net MVC 实现 .Net OpenId

    我下载的样本是从DotNetOpenId http code google com p dotnetopenid 与我创建新应用程序时获得的 MVC 1 0 应用程序有不同的文件 我对 MVC 和 openId 很陌生 我遇到的所有示例都非
  • 使用 SignalR 检测“服务器离线”

    我们尝试在低带宽环境中使用 SignalR 在该环境中 与后端服务器的连接可以随机出现和消失 并且我们希望我们的 Web 应用程序能够做出适当的响应 看起来这个连接 API 在过去的一年里一直在变化 但根据最新的文档 我尝试连接 conne
  • 如何获取类库项目中的连接字符串

    在我的 net 解决方案中 我有两个不同的项目 一个 MVC 核心 Web 应用程序项目和一个类库项目 在Web应用程序项目中 数据库连接字符串位于appsettings json文件 我想从类库项目访问该连接字符串 是否可以 如果是 怎么
  • FluentValidation:验证类型名称必须是唯一的

    我的代码中指定了以下规则 RuleFor x gt x Auction Round1Ring1Start GreaterThan DateTime Now RuleFor x gt x Auction Round1Ring1End Grea
  • 类型违反了继承安全规则:“System.Net.Http.WebRequestHandler”

    我在 MVC 应用程序的 web config 中有以下程序集引用
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 从控制器返回 html 字符串并显示在视图中

    如何返回包含字符串属性的模型 li 元素并在视图中显示它 如果我只写 Model Messages 它会显示所有字符串 我需要 html 格式 您可以使用Content带有 Content Type 的方法text html直接返回HTML
  • 如果 ModelState 无效,ASP.NET MVC AJAX 更改 UpdateTargetId

    我使用的视图内部有两个部分视图 div div div div 第一个部分视图 RenderMatchesListRowUserControl 呈现一个简单的 div 元素 用于匹配列表 第二个部分视图 AddNewMatchUserCon
  • ReCAPTCHA v2 无法在 IE 兼容性视图中工作

    我正在尝试让 recapatcha v2 在我的 ASP MVC 项目中工作 客户端的计算机具有 IE10 IE11 并在兼容性视图中显示所有 Intranet 页面 这导致验证码未按预期显示 问题是它很少接受我的答案 即使它是正确的 它只
  • 为什么有多个 DbContext 类?

    当我使用 LINQ 和 dbml 文件进行编程时 只有一个上下文 但是 当我创建一个 MVC 站点时 似乎每个实体都有单独的上下文 这是 MVC 教程向我展示的方式 使用 电影 上下文 I have public class Account
  • 删除高图表上的导出和打印按钮插件

    我正在使用 MVC 目前正在使用 highchart 我正在使用 Exporting js 以便用户可以打印或导出 highchart 图表 我的视图中有两个图表 我想禁用其中一个图表的打印和导出 我怎样才能做到这一点 Exporting
  • 创建视图中可用的自定义助手

    我有太多文本实用方法 例如MakeShortText string text int length RemoveTags string text TimeAgo DateTime date 和别的 我想从单独的助手访问它们 如下一个示例所示
  • 在 MVC 中提交后保留密码文本框值

    我正在 MVC 应用程序中工作 在我们的应用程序中 我们有一个获取用户详细信息 客户详细信息 的表单 例如 温和 名字 姓氏 密码等 提交后 在控制器本身中 我们验证输入的 MailID 是否已被注册 如果已经注册意味着 返回带有错误消息的
  • Durandal KO 绑定视图问题

    我的 Durandal 视图模型像这样工作 define function require var http require durandal http return subjectItem function data var self t
  • 如何将 JavaScript 添加到 ASP.NET MVC 视图?

    我有一个简单的视图 我想添加一个JQuery 日期选择器 JavaScript http jqueryui com demos datepicker 到这个观点 而不是every查看 通过母版页 我不确定执行此操作的最佳方法是什么 其次 我
  • MVC 4 - 在局部视图中使用不同的模型

    请忍受我的noobness 我对 MVC 模式非常陌生 我正在尝试做什么 我正在为我的网站上的注册用户构建个人资料信息页面 该页面将列出有关用户的数据 例如出生日期 电话号码 订阅状态等 您明白了 我还想要一个表格让用户更改密码 电子邮件地
  • 如何在MVC4中隐藏URL参数

    http localhost 49397 ChildCare SponsorChild 83 这是当我单击表中的操作链接并重定向到编辑操作时生成的链接 现在我想隐藏 URL 中的数字 83 我怎样才能实现这一点 我正在使用 VS2010 M
  • 如何在 ASP.NET MVC 应用程序中设置调试启动页?

    如何在应用程序根目录开始调试应用程序 例如 http 本地主机 49742 http localhost 49742 我总是得到一个不存在的页面 例如 http localhost 49742 Views Home About aspx h

随机推荐

  • J=1 且 W=Majority 的 MongoDB 副本集上是否仍会发生回滚?

    我一直在阅读文档 根据我的理解 我可以看到仍然可能发生回滚的情况 写入到主数据库 确认日志已写入磁盘 大多数辅助节点确认写入但不写入磁盘 整个集群断电 当电源恢复时 主设备由于某种原因无法启动备份 次要角色扮演主要角色 最初的主节点最终启动
  • MySQL 转储 CronJob

    我正在尝试创建一个 cron 来每天备份我的 MySQL 从站 backup sh内容 bin bash Backup mysql from slave sudo mysql u root p xxxxx e STOP SLAVE SQL
  • Android ListView 复选框选择

    我在这里有一个由两部分组成的问题 1 如何填充我的ListView以便显示字符串 但是当选择项目时 不可见的id值 来自手机联系人的联系人id 是实际使用的值 2 我有一个使用 multipleChoice 模式进行项目选择的 ListVi
  • Node.js 中的 Python 多处理 - 在子进程上打印不起作用

    我有一个运行客户端界面的 Node js 应用程序 该界面公开触发机器学习任务的操作 由于在实现机器学习相关内容时 Python 是更好的选择 因此我实现了一个按需运行机器学习任务的 Python 应用程序 现在 我需要集成这两个应用程序
  • MongoDB list集合过滤器

    我正在使用 Node js 我正在尝试过滤必须排除集合 出口 的集合并检索所有其他集合 但我似乎无法弄清楚语法 我试过了 db listCollections filter outlets toArray err docs 有什么建议么 您
  • 如何将位图转换为文件而不压缩

    我需要从服务器下载图像并以其原始质量保存 但显然保存后图像被压缩并且质量下降 我使用 android async http 库来处理 http 请求 我的请求和保存文件的代码 AsyncHttpClient client new Async
  • 从 WPF 窗口中删除图标

    我可以使用 WinApi 从 WPF 窗口中删除窗口图标 但是当我仅运行 WPF 项目的可执行文件时 我会在应用程序窗口中再次获得该图标 如何删除该图标 From WPF教程 http www wpftutorial net RemoveI
  • 构建表达式树

    我正在努力思考如何为更多 lambda 构建表达式树 如下所示 更不用说可能有多个语句的东西了 例如 Func
  • Python语法错误:无法分配给模块中的运算符,但可以在解释器中工作

    我有一根绳子a我想根据它的长度将它分成两半 所以我有 a front len a 2 len a 2 这在解释器中工作正常 但是当我从命令行运行模块时 python 给了我一个SyntaxError can t assign to oper
  • 如何使 Cucumber 功能作为本地单元测试在 Android 项目中运行?

    我有一个用 Java 编写的 Android 项目 正在 Android Studio 中进行 我想使用 Cucumber 对一些内部组件进行集成测试 注意 我知道这不是 BDD 方式 但对我来说很有用 我希望测试运行为本地单元测试 htt
  • WSO2 Identity Server 5.0.0 无法从辅助用户存储中为用户返回 SAMLResponse 中的用户声明

    我在使用 SAML SSO 身份验证时遇到此问题 我已经成功设置了 WSO2IS 5 0 0 身份服务器 我还成功设置了 至少我希望如此 辅助用户存储 我使用 JDBCUserStoreManager 实现 我已将此商店设置为 DOMAIN
  • 微服务中的事务

    我读过一些关于微服务架构的文章 但没有人涉及事务的主题 他们都说这很难做到 也许有人可以描述如何处理这个问题 但不是从领域方面 而是从技术方面 假设我们有一个业务案例 我们需要调用两个不同的服务 并且它们都对数据库进行一些更改 但是如果第二
  • 如何从存储在 char* 指针中的 name 调用 c 函数?

    我想通过函数的名称动态调用函数 例如 假设有以下函数和字符串 void do fork printf Fork called n char pFunc do fork 现在我需要打电话do fork 就在 pFunc 那么这可能吗 欢迎 C
  • SQL Server 2005 中的分层查询

    早在我在 Oracle 商店工作时 我就认为 CONNECT BY 是理所当然的 现在我一直在使用 SQL Server 2005 并且有一些令人讨厌的对象层次结构 具体来说 我们有一个自引用表 其中所有子记录都有一个包含其父记录 ID 的
  • 如何为复杂的印度尼西亚电话号码格式构建正则表达式?

    最近 我正在使用regexpal http regexpal com构建这个自定义正则表达式 我正在处理印度尼西亚电话号码的几个测试用例 这是一个简单的例子08xx 3456 7890 or 08xx34567890 但如果我得到以下格式
  • 像 String#replace 一样替换 Ruby 中引用的 Integer 值

    我有以下代码 def mymethod a a replace a end mystring b mymethod mystring p mystring gt a 但我想用 Integer 执行相同的操作 那可能吗 简短的回答 不 长答案
  • 尝试在另一个线程wxpython中创建一个对话框

    我正在另一个线程中运行一个函数 该函数应该填写一个对话框 然后显示它 但只要我尝试以任何方式更改对话框 它就会出现段错误 我读到这是 WxPython 的一个常见问题 并且开发人员无意直接更改另一个线程中的对话框 我该如何解决这个问题 我可
  • 如何从类型中省略属性?

    我对 Typescript 中的 Omit 类型有疑问 所以我知道 Omit 类型与Pick并且是这样构建的 type Omit
  • 与 jUnit 相比 TestNG 的缺点? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我熟悉 jUnit 并且听说 TestNG 可能是解决 jUnit 的一些烦恼的方法 例如它坚持为每个测试创建一个单独的测试类实例 从而迫使我对
  • ASP.NET MVC 使用自定义模型绑定程序时从客户端检测到潜在危险的 Request.Form 值

    在这里得到错误 ValueProviderResult value bindingContext ValueProvider GetValue ConfirmationMessage 如何仅允许选择值 IE ValidateInput fa