Azure WAF间歇性阻断MVC应用HTML文件上传(触发General 200002与200003规则)的问题排查及代码优化咨询
Azure WAF间歇性阻断MVC应用HTML文件上传(触发General 200002与200003规则)的问题排查及代码优化咨询
我有一个基于.NET 4.8的老旧MVC应用(推测是MVC4版本),最近把它部署到Azure Front Door(AFD)后面,并启用了所有默认WAF规则且设为拦截模式。
现在遇到一个头疼的问题:有时候用户无法通过HTML表单上传图片,查看日志发现触发了两条WAF拦截规则:
- Microsoft_DefaultRuleSet-2.1-General-200002
匹配详情:[{"matchVariableName":"ParseBodyError","matchVariableValue":"1"}] - Microsoft_DefaultRuleSet-2.1-General-200003
匹配详情:[]
我之前关注过相关的问题讨论,但已经过去两年了,本来以为微软会修复这个问题。直接禁用这两条规则不是理想方案,所以想问问有没有代码层面的优化手段能让文件上传稳定成功?比如,是不是应该改用POST以外的HTTP方法?
前端表单代码
<form method="POST" action="@urlForSavingLogo" enctype="multipart/form-data"> <p> Browse to an image on your computer and then click the Upload button. </p> <p>Image formats supported: .png and .jpg</p> <p>Optimal pixel height for logo: @Model.OptimalHeightInPx</p> <ul> <li>Supports smaller images</li> <li> Please note: Logos smaller than the optimal size will not be resized. </li> <li>We recommend .png at 300dpi for best quality</li> </ul> <br /> <div class="form-group"> <label for="image">@Model.Title</label><br /> <input id="image" class="hiddenInput" type="file" name="image" /> <button id="uploadButton" class="btn btn-default">Browse...</button> <span id="selectedFileName">No file selected</span> </div> </form>
后端控制器代码
[HttpPost] public RedirectResult SaveWebsiteLogo(HttpPostedFileBase image) { // 业务逻辑省略 }
前端辅助JavaScript代码
//trigger click of hidden input $("body").on('click', '#uploadButton', function (e) { e.preventDefault(); $('#image').click(); }); $("body").on('change', '#image', function () { populateSelectedFileName(); });
这个问题是间歇性发生的,我怀疑可能和图片的编码方式或者文件大小有关,但不确定具体原因。有没有大佬能帮忙分析下问题根源,或者给出代码层面的优化建议?
备注:内容来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

