如何修复Fortify检测出的Mass Assignment: Insecure Binder Configuration问题
修复「Mass Assignment: Insecure Binder Configuration」问题
这个高风险问题源于ASP.NET MVC的模型绑定器会自动将请求中所有匹配字段赋值给PdfOptions对象。如果后续给PdfOptions新增敏感属性,攻击者可构造请求提交额外字段篡改这些属性,引发安全风险。以下是几种可行修复方式:
方法1:用[Bind]特性限制绑定属性
在控制器方法参数上添加[Bind]特性,明确指定仅允许绑定Id和Url,模型绑定器会忽略其他未指定字段:
[System.Web.Mvc.HttpPost] public ActionResult ConvertHtmlToPdf([FromBody] [Bind(Include = "Id,Url")] PdfOptions reportParams) { string fileName = "Savings Initiative - " + reportParams.Id + ".pdf"; return File(new CommonService().GetHtmlReportToPdfBytes(reportParams), "application/pdf", fileName); }
方法2:创建专用DTO(数据传输对象)
定义仅包含前端需传递属性的DTO类,避免直接用业务模型接收请求数据,从根源杜绝多余属性被绑定:
// 新建专用DTO类 public class PdfRequestDto { public int Id { get; set; } public string Url { get; set; } } // 修改控制器方法 [System.Web.Mvc.HttpPost] public ActionResult ConvertHtmlToPdf([FromBody] PdfRequestDto requestDto) { var reportParams = new PdfOptions { Id = requestDto.Id, Url = requestDto.Url }; string fileName = "Savings Initiative - " + reportParams.Id + ".pdf"; return File(new CommonService().GetHtmlReportToPdfBytes(reportParams), "application/pdf", fileName); }
方法3:手动解析请求体
绕过自动模型绑定,自行读取并解析请求体,仅提取所需字段:
[System.Web.Mvc.HttpPost] public async Task<ActionResult> ConvertHtmlToPdf() { using var reader = new StreamReader(Request.InputStream); var requestBody = await reader.ReadToEndAsync(); var requestData = JsonConvert.DeserializeObject<dynamic>(requestBody); var reportParams = new PdfOptions { Id = requestData.Id, Url = requestData.Url }; string fileName = "Savings Initiative - " + reportParams.Id + ".pdf"; return File(new CommonService().GetHtmlReportToPdfBytes(reportParams), "application/pdf", fileName); }
推荐使用方法1或方法2:方法1适合现有代码的快速修改,方法2更规范,利于长期维护。
内容的提问来源于stack exchange,提问作者Philly
相关产品推荐
相关产品推荐

