Dragon插入JSON至隐藏字段引发ASP.NET WebForms类型转换错误求解决
解决Dragon干扰ASP.NET WebForms应用的思路
前端层面防护
- 给存储整数的隐藏字段加上
readonly属性,从源头限制外部脚本篡改;同时监听字段的change事件,一旦检测到值被改为非整数的JSON内容,立刻恢复原始合法值。 - 表单提交前强制校验:在提交逻辑里加一层判断,检查隐藏字段值是否为有效整数,若不符合就阻止提交,给用户提示“字段值异常,请刷新页面重试”,避免无效请求发到后端。
后端容错与校验加固
- 放弃依赖ASP.NET自动类型转换,后端接收参数时先按字符串处理,显式做整数转换校验:
string hiddenValue = Request.Form["TargetHiddenField"]; if (!int.TryParse(hiddenValue, out int validInt)) { ModelState.AddModelError("TargetHiddenField", "请求参数无效,请重新操作"); return View(); // 或者返回错误页面 } // 使用validInt执行后续业务逻辑 - 添加全局异常捕获,针对“varchar转int失败”这类异常,直接返回友好提示,同时在日志里记录用户的UA信息,确认是否存在Dragon相关标识,辅助排查。
用户端操作指引
- 指导用户彻底排查Dragon组件:除了禁用Chrome扩展,还要检查任务管理器里是否有Dragon相关后台进程,全部关闭后重启浏览器再测试。
- 建议用Chrome隐身模式访问应用,隐身模式默认不加载扩展,能快速验证是否还有干扰。
- 让用户暂时禁用所有非必要浏览器扩展,逐个恢复排查,确认是否是Dragon残留或其他插件的联动问题。
字段逻辑优化
- 临时修改隐藏字段的命名(比如从
UserId改成App_Internal_UserId),避开Dragon可能识别的字段命名规则,减少被篡改的概率。 - 把关键整数字段迁移到后端Session存储,前端只传递一个加密的会话标识,后端通过标识从Session中取真实值,彻底切断前端字段被篡改的路径。
内容的提问来源于stack exchange,提问作者Wallace B. McClure
相关产品推荐
相关产品推荐

