PHP 上传文件处理,是不是只要强制文件名+后缀名,服务器就安全了?

2019-01-21 13:05:47 +08:00
 kisshere

研究了很多篇 php 上传文件的安全和漏洞处理,不外乎都是在对文件后缀名上面做文章,现在我只允许用户上传特定后缀的文件,比如:pdf, doc, psd 这三种后缀名,然后文件命名格式全部统一为:md5($file).'.pdf'(或者.doc 和 psd )是不是对我的服务器而言就彻底安全了?

2746 次点击
所在节点    程序员
14 条回复
GDC
2019-01-21 13:29:50 +08:00
不是的,前几天还看到一篇如果搭配 include 的话还是有风险,具体的细节没细看,你可以找找。
我现在的做法是,如果上传的文件只是存储,日后用户自己下载的,那直接从前端上传到又拍云之类的 cdn,速度快,还可以给服务器减少带宽压力。
win7pro
2019-01-21 13:51:14 +08:00
不能只是判断文件后缀,还要判断文件头信息内的文件类型是不是白名单类型。
kisshere
2019-01-21 13:56:29 +08:00
@win7pro mime type 也可以伪造啊
lshero
2019-01-21 13:56:31 +08:00
上传的路径设置不可执行,才是解决这类问题的最终方法
crab
2019-01-21 13:57:32 +08:00
不给执行权限
AngryPanda
2019-01-21 14:04:00 +08:00
不是。曾经有个很著名的文件上传漏洞,在图片内部添加可执行代码。这样即便你检查 mime-type 也不行。

隔离上传的文件(禁止该目录的执行权限,最简单上传到云存储)才是王道。
kisshere
2019-01-21 14:05:27 +08:00
@AngryPanda 能给个该漏洞的链接吗?谢谢
masker
2019-01-21 14:07:58 +08:00
直传 oss
woodie1994
2019-01-21 14:10:43 +08:00
burpsuite 00 截断
king2014
2019-01-21 14:15:59 +08:00
lanyi96
2019-01-21 14:24:34 +08:00
可以解决 80%的安全问题,但是还有 10%
包括:
本地文件包含
中间件解析漏洞
图片组件漏洞
这些都是可以突破验证,产生安全问题的
kisshere
2019-01-21 14:32:10 +08:00
@lanyi96 还有 10%呐?
wjfz
2019-01-21 18:37:11 +08:00
@kisshere

mime-type 这个当年是有些没有判断后缀,通过 mine 去判断文件类型的,这样给 php 文件前面加上类似于 gif89a 这样的东西就可以执行了。

关键词,gif89a
zjsxwc
2019-01-22 08:52:44 +08:00
需要配合 php 多入口方式,单文件入口很难

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/529077

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX