Edge浏览器文件上传无法获取盘符致R盘校验弹窗报错排查
问题背景
原CSV文件上传功能在IE11环境下运行正常,因IE11即将停止服务迁移至Microsoft Edge浏览器后出现异常:即使用户选择R盘路径下的合规CSV文件提交,仍会触发Please use R:\\ drive to map release folder for CSV file upload.的alert弹窗,无法完成上传流程。
问题根因
经初步排查已定位核心特征:Edge浏览器遵循现代Web安全规范,选择上传文件时不会返回文件的本地完整盘符路径(IE11下返回格式示例R://example.csv),仅返回文件名,导致原有路径校验逻辑持续触发告警;该行为是所有现代Chromium内核浏览器(Chrome、Edge等)的通用安全限制,并非Edge独有bug。
原有业务实现逻辑
1. 前端页面渲染代码(PHP)
echo "<TR>"; echo "<TD colSpan='2' align='center' id='uploadCell'>"; echo "<label id='note'>Please upload csv file only</label><br>"; echo "<input type='file' name='uploadFile' id='uploadFile'></input>"; echo "<input type='hidden' name='file_src' id='file_src'></input>"; echo "<input type='hidden' name='category' id='category'></input>"; echo "<input type='hidden' name='folder' id='folder'></input>"; echo "</TD>"; echo "</TR>";
2. 前端表单提交校验JavaScript代码
<script type="text/javascript"> document.getElementById("submit").addEventListener("click", function(e){ var tstr = $('#tester').val(); var file = $('#uploadFile').val(); var category = ""; var folder = ""; document.getElementById("file_src").value= file; //added Su 24Jun2020 //added Su 09Jul2021 if(document.getElementById("st").checked == true){ category = document.getElementById("st").value; } else if(document.getElementById("secure").checked == true){ category = document.getElementById("secure").value; } if(document.getElementById("tram").checked == true){ folder = document.getElementById("tram").value; } else if(document.getElementById("rel").checked == true){ folder = document.getElementById("rel").value; } document.getElementById("category").value= category; document.getElementById("folder").value= folder; //end if(tstr == ''){ alert('Please select tester entity.'); e.preventDefault(); } //added Su 09Jul2021 else if(category == ''){ alert('Please select category.'); e.preventDefault(); } else if(folder == ''){ alert('Please select folder.'); e.preventDefault(); } //end else if(file == ''){ alert('Please upload a csv file.'); e.preventDefault(); } /*else if(pathOK < 0 && envi == "eng"){ alert('Please upload a csv file from release drive.'); e.preventDefault(); }*/ else { var type = file.split('.').pop(); if(type != 'csv'){ alert('Please upload CSV type of file only.'); e.preventDefault(); } } }); </script>
3. 后端uploadDB.php盘符校验代码
$orig_path = isset($_POST["file_src"])? $_POST["file_src"] : ""; $drive = substr($orig_path,0,1); if($drive != "R"){ echo "<script Language=\"Javascript\">"; echo "alert('Please use R:\\\ drive to map release folder for CSV file upload.'); "; echo "window.history.back();"; echo "</script>"; return false; }
适配Edge浏览器的可行修复方案
原逻辑依赖IE11的非安全特性获取本地文件完整路径,该特性在现代浏览器下默认被禁用,可根据业务实际场景选择以下方案修复:
- 方案1:移除盘符校验逻辑,替换为更可靠的文件合法性校验(推荐长期方案)
原有盘符校验本身安全性极低,用户可通过篡改传入路径轻易绕过,完全可以替换为更合理的校验规则:- 前端删除给隐藏域
file_src赋值的冗余逻辑,该字段在Edge下仅能获取文件名,无路径校验价值 - 后端删除读取
file_src字段判断首字符是否为R的拦截逻辑,避免误拦截合法上传 - 页面增加明确操作提示:请选择R盘映射的发布目录下的CSV文件上传,同时在后端补充CSV文件内容格式校验、表头校验、文件大小限制,从内容维度确认文件合规性,校验可靠性远高于原来的盘符判断。
- 前端删除给隐藏域
- 方案2:通过Edge企业组策略放开路径获取限制(适合域管内网场景)
如果业务必须强校验文件存储路径,且所有使用人员均在企业域环境下,可由IT管理员统一推送Edge组策略:在Edge管理模板中找到「对列出的文件类型允许显示完整路径」配置项,添加业务系统内网域名到允许列表,同时将csv文件类型加入放行列表,配置完成后域内设备访问上传页面即可像IE11一样获取文件完整本地路径,原有校验逻辑无需大幅修改即可正常运行。 - 方案3:Edge IE模式临时过渡
如果短期无法调整代码,可将上传页面地址加入Edge的IE模式兼容列表,访问该页面时自动切换IE内核渲染,保留原有IE11下的路径获取能力,作为临时过渡方案,等后续完成逻辑迭代后再切换到Edge原生模式。
内容的提问来源于stack exchange,提问作者user18731018
相关产品推荐
相关产品推荐

