我已将我的文件上传类型限制为仅使用 .
FormFile fileObj = null;
因此,即使有人将 exe 文件更改为 txt 文件并尝试上传它,我也可以借助
AutoDetectParser、ParseContext、元数据
。
现在我有一个批处理文件,在转换为 txt 后,可以成功上传。
此文件的内容类型为text/plain,与txt相同。
现在, 我怎样才能限制上传这个文件? 是否每种类型的文件内容都有一些签名,我们可以根据这些签名来区分上传的文件? 这些java文件、批处理文件转成txt后是否可以限制?
最佳答案
我假设您在谈论 Windows 批处理文件。这些文件没有标题或其他可以使它们与“普通”文本文件准确区分的特征。批处理文件 是,事实上,“普通”文本文件,即它们通常是纯 ASCII 文件。为了检测它们,您可能会想到任意复杂的启发式方法 - 具有不同的成功率 - 所以,不,您无法可靠地检测它们。
您也不能真正“限制”批处理文件,好吧,也许吧。您可以在文件前添加 GOTO :eof
或在每一行前添加 REM
或 ::
,这将有效地停用批处理文件中的任何内容。或者做其他技巧,也许吧。
但我不完全确定您为什么要这样做。在普通的 web 应用程序中,上传的文件应该简单地存储到文件系统的受限部分,而不是可执行的。如果攻击者可能会在您的基础架构的某些部分上运行任何类型的上传文件,那么这似乎是一个架构问题。
关于java - Java实现文件上传类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36886085/