我有一个应用程序,用户可以上传文件以便我们执行某些操作。唯一预期的文件类型是JSON,最初我们将上传限制为$sql="select t1.column, t2.column,t3.column,t4.column,t5.column,t6.column from t1,t2,t3,t4,t5,t6 ";
类型。
但是,我们有一个用户在尝试上传JSON文件时会收到错误。我们可以更新应用程序以允许类型application/json
的文件并使事情正常工作,但这似乎是语义上的。
我对application/octet-stream
了解不多。在我的搜索中,我还没有学到更多东西。似乎某些浏览器在不知道如何处理文件时可能会将文件转换为此类型;有时,当文件扩展名不存在时,可能会抛出此错误(我们已经测试了它有没有,但仍然得到相同的问题);似乎这种类型允许类型为application/octet-stream
的文件以及其他任何要上传的文件。
如果我们允许用户上传.exe
类型的文件,是否存在安全风险?为什么或为什么不呢?
答案 0 :(得分:1)
在发布我的问题之后,它让我从不同的角度搜索我的问题。我想我的问题在这个帖子中得到了回答:
What security issues appear when users can upload their own files?
Bob Aman写道:
如果允许用户上传脚本和可执行文件,则应确保通过该表单上传的任何内容永远不会作为application / octet-stream以外的任何内容进行回送。当您处理潜在危险的上传内容时,请勿尝试混合内容类型。如果您要告诉用户他们必须担心自己的安全性(当您接受脚本或可执行文件时,这实际上是您所做的),那么所有内容都应该作为application / octet-stream提供,以便浏览器不会尝试渲染它。您还应该设置Content-Disposition标头。如果您想处理可执行文件,那么在管道中涉及病毒扫描程序可能也是明智之举。例如,ClamAV是可编写脚本的开源软件。