codeigniter - 如何在不在 url 中传递敏感信息的情况下访问 codeigniter 根目录之外的文件夹?
问题描述
我的代码(视图)到目前为止,当我使用根访问文件夹(上传)时,一切都运行良好,但我想使用同一台服务器访问位于不同位置的文件夹,而不在图像时在 url 中显示敏感信息负载。
<img src="<?php echo base_url('/uploads/'.$popular_car['img_path'])?>" class="card-img-top"
style="height: 150px;"></div>
解决方案
有很多选择。大多数将涉及某种数据库使用。这就是我所做的(非常总结)
每个需要访问的文件在表上都有一条记录。该记录有一个主 ID、一个秘密随机令牌和文件路径。该表由主 ID 和令牌索引。
在 URL 上,我得到类似base_url('controller/file_access/).$id.'/'.$token
. 收到请求后,我会检查文件表,如果两个参数都匹配,我会将文件流式传输到浏览器。这种做事方式虽然有点复杂,但有两个主要好处:
1.- 它可以防止用户尝试不同的数字 ID 并查看显示的内容。由于 ID 是数字和自动递增的,因此您需要做的就是从 1 循环到 100000 并下载所有文件。添加令牌并使用这两个参数查询表大大降低了某人获取他/她不打算获取的文件的风险。
2.-它掩盖了文件的真实位置,因为以这种方式将其流式传输到浏览器看起来(在浏览器的眼中)位于其中,example.com/controller/file_access/id/token
但图像的真实或相对路径仍然隐藏且无法从网络。
以此为基础,您可以根据需要在此基础上添加大量逻辑。如果文件是私有的和/或特定于用户的,您还可以在表中有一个“allowed_user”字段,这样如果不允许用户查看文件,您就不会流式传输文件(即使他有正确的 ID/令牌组合)。
这只是对我在几个网站上所做工作的粗略描述。把它作为你可以建立的理论基础。
推荐阅读
- cron - 如何在特定时间间隔内禁用 cronjob
- git - Heroku CI - 带有 docker 的 monorepo
- java - 当saxon xslt处理器抛出运行时错误时如何防止Tomcat关闭?
- kubernetes - 由于身份验证问题,在连接 Amazon EKS 集群的 AWS CodeBuild 上执行 kubectl 不起作用
- docker - 将 docker 服务容器内的应用程序连接到在外部网络 docker 容器上运行的数据库
- javascript - 在 Highcharts 中手动设置 y 轴最小值和最大值以及放大行为
- c# - 轮播视图列表的 Xamarin.forms 列表
- c# - 如何处理绑定到 Generic ViewModel 的 DataContext,并在 MVVM 中正确访问 CodeBehind 中的 Generic ViewModel?
- c# - IIS 部署不能包含 asp.net core 2.2 razor 页面中 wwwroot 文件夹的文件
- react-native - 如何在自定义组件中显示来自 AsyncStorage 的数据?