TP3.2项目禁止通过路劲访问html文件
背景:之前很久的一个PHP项目,使用的thinkphp3.2框架,PHP版本7.1,IIS10。在扫描过程中发现了如下等漏洞:漏洞名称:源代码泄露。
我访问网址试了一下,确实能打开,效果如下图:
这种是直接通过路劲,访问的.html文件, 没有经过PHP编译,所以标签是直接原样输出的。但是这种问题怎么解决呢?
于是我上网查了,大体解决方案有以下几种:
1、
现在很多的权限系统是基于URL路由来控制的(模块 / 动作)比如ThinkPHP,访问路径
是http://localhost/thinkphp/index.php/index/index 但是根据文件路径也能访问到如
http://localhost/thinkphp/Tpl/Index/index.html,就直接显示了index.html的源码!如何禁止访问呢?
或者其他的保护措施?
使用过ThinkPHP的都知道,一个APP的模版文件夹是叫Tpl,正常情况下直接通过路径就可以访问到该文
件夹;比如常见的 APP/Tpl/Index/index.html ,通过 http://domain/App/Tpl/Index/index.html 就可
以直接打开首页模版文件了。 像这种要防止用户直接访问到模板或者重要的文件的行为,方法有几种:
修改默认的文件名,此方法可以临时解决此问题,但不是长久之计。
使用.htaccess 配置,在需要拒绝用户访问的目录下放置 .htaccess 内容为 deny from all 就可以拒绝所
有用户访问该文件夹,如果拒绝某个IP段访问使用
order deny,allow
deny from all
allow from 192.168.1.0/24
拒绝某个IP可使用
order allow,deny
deny from 192.168.1.10
allow from all
(但是这种是 用于Apache环境, 我的是IIS, 所以不适用)
2、
现在很多的权限系统是基于URL路由来控制的(模块 / 动作)比如thinkphp,访问路径是http://localhost/thinkphp/index.php/index/index 但是根据文件路径也能访问到如http://localhost/thinkphp/Tpl/Index/index.html,就直接显示了index.html的源码!居然没有解析,如何禁止访问呢?或者其他的保护措施
回复内容:
现在很多的权限系统是基于URL路由来控制的(模块 / 动作)比如thinkphp,访问路径是http://localhost/thinkphp/index.php/index/index 但是根据文件路径也能访问到如http://localhost/thinkphp/Tpl/Index/index.html,就直接显示了index.html的源码!居然没有解析,如何禁止访问呢?或者其他的保护措施
放到Web目录之外
http://doc.thinkphp.cn/manual/deploy_directory.html
新建一个public文件夹,把入口文件放到public中
如果有upload或者images文件夹,也要放到puclib下
然后修改一下入口文件中的目录定义
// 定义应用目录
define('APP_PATH','../Application/');
// 引入ThinkPHP入口文件
require '../ThinkPHP/ThinkPHP.php';
他这种思路让我有了想尝试的想法, 于是我按他的思路做了。在项目根目录创建了‘XXX’文件夹,然后把 入口文件 'index.php' 放了进去,把引用的文件的代码更改后提交了服务器,然后再服务器上重新配置了运行目录。 结果已运行直接404了。 我想这是怎么回事儿了。 然后又逐步测试,先是再入口文件写代码,看能否正常执行,发现可以,然后又写调用其他文件,发现也OK,但这是怎么回事儿呢?到最后我在 域名后面跟了index.php后,就正常了(因为线上程序是影藏了入口文件‘index.php’)的。我当时就纳闷了,我在web.config文件里面配置了 影藏入口文件的,而且之前项目运行一直OK, 怎么换了入口文件位置后,路劲中有index.php文件能正常访问,没有index.php 就报404的错呢? 这就很奇怪了,怎么回事儿呢? 然后我怀疑是 web.config配置错了, 然后我有找了一大堆资料,到最后也没解决问题。 最后我突然奇想,把web.config放到了新入口文件的同级目录就直接搞定了,这个坑可能我是技术菜+经验少才导致的吧,哈哈哈。
这里说下,为啥要把所谓的静态样式等文件也要移到新建的目录下面,因为是服务器配置了域名新的入口文件地址,如果不移进去就访问不到。
本帖最后由 JunDaYi 于 2022-1-25 19:48 编辑
我用了宝塔面板的访问限制 禁止模板目录被访问
好复杂。。 我选择用tp6重写。。
页:
[1]