从我的研究中,我知道我无法使用HTML输入文件来获取目录路径名。但是,我尝试了另一种方法,将输入文件的值存储到隐藏字段中,并将存储的值传递给后端代码以进行进一步处理。 Javascript代码:
<script type="text/javascript">
function folder_address()
{
var address=document.getElementById('folder_address');
var folder=document.getElementById('folder');
folder.value=address.value;
}
</script>
HTML code:
<input type="file" id="folder_address" name="folder_address" />
<input type="hidden" id="folder" name="folder" />
但是,我仍然将folder.value作为我选择的文件,而不是文件的完整目录路径名。我错过了什么吗?
答案 0 :(得分:2)
这种行为并不意味着被规避。即使您可以使用脚本/其他字段找到漏洞,将来也可能会删除漏洞。
我强烈建议一种不依赖于知道用户选择的本地路径的设计。
向服务器显示用户的目录结构是一个安全漏洞(在Windows中考虑c:\users\tmedora
;现在您知道我的用户名)。此外,文件系统可以以不同方式格式化路径,用户可以根据需要自由命名/重命名目录。我不确定完整路径对服务器有什么价值。除非您处于极端受控的环境中,否则您无法保证您甚至可以解析路径,更不用说依赖它包含一致的信息。
包含完整路径的W3 specifically states是一个安全漏洞,需要用户代理将字符串c:\fakepath\
添加到文件路径中。
一些旧版用户代理实际上包含了完整路径(这是一个 安全漏洞)。
另见IE Gives full path, FF gives only filename (or directory browse)和 How to get the full path of the file from a file input和其他许多人。