qidizi
(Q)
1
1,经常见到支持上传文件时被上传php到附件目录中,且一般配置是会运行附件目录下的php的,给恶意攻击机会
2,某些日志直接写入到如storage/logs/*.php,且该目录在nginx的root下。
3,某些数据库,sql备份在nginx的root下
n, 。。。。
为啥业界总是把所有这些文件放在nginx root下,再去设置避免把php之类下载?
而不是像下面假设这样?
若如有物理目录
/php/public/index.html
/php/public/*.css
/php/public/*.png
/php/public/*.js
/php/public/upload/**/*.*
/php/index.php
/php/非public**/*.php
nginx的root为/php/public/
若请求在public找到直接让nginx响应,
若找不到(包括用重写)再让php cgi执行物理路径下,且是唯一入口的/php/index.php,这样就能避免做很多容易忘记的“避免下载或执行”
qidizi
(Q)
3
这跟框架没有关系,
tp与l未出来前nginx与php同样支持引用非nginx root下php吧?如指定用绝对路径指定cgi的php
fastcgi_param script_filename /public/private/index.php;
fastcgi_param script_name /index.php;
index.php甚至不用放到public下,就算对方上传个index.php到public下也不影响,
我只是觉得奇怪。为啥业界一直用上面提到方式来处理呢?为啥不用这种?是因为什么而考虑呢?
qidizi
(Q)
4
像tomcat或是iis同样是把这些不能让下载的关键文件放到它们root下,然后才是在服务实现中判断属于这类文件进行解析不让下载。
为啥不像ngnix这样,强制限定到root,那怕你用/…/…/…/etc/passwd访问,也是被限定在root下,去掉相对。然后才是类似于用cgi pass这样获得非nginx root的解析后返回客户端?
这个nginx,apache等设计或使用方案很长时间是这么传下来的。
不懂为啥这样设计。
如有时,不小心谁把web.config复制下,变成web.config.bak之类后缀,那不让人下载了?
为啥设计不是“有需要才放出”,却是“先全放出,再逐个限制”设计理念。
Pwn0x01
(Pwn0x01)
5
有一种东西叫SDL,很多这种系统都没有经过正规的SDL的,不然不可能给上线的
没用过你说的SDL,欢迎简单展开说说。
网站部署,几乎没有文档提及,你必须用什么工具“检测一下你nginx、tomcat、apache、iis配置不存在漏洞”,最多就是给一个示例配置,它能让网站可跑起来,安不安全,是否导致上传可执行获得web shell脚本,业界并不管这块。也极少见有人讨论这块。
但是我们身边经常会出现上传附件被执行,然后获得web shell,接触过,经常升级补丁,老是补上传漏洞的有比常见的泛微oa,它是java+tomcat,就是常见的执行代码、日志、附件混在root下