简介:
我在CakePHP中有这条路径:app / webroot / storage / 5 / C / _demo / omar.txt,这个路径将被重定向到http://localhost/storage/5/C/_demo/omar.txt
我的问题:
我希望此路径http://localhost/storage/5/C/_demo/omar.txt
类似于此http://localhost/storage/uehKDj44/C/_demo/omar.txt
,其中 uehKDj44 的数字 5 ,我之所以这么做像这样我不希望任何人将数字5更改为任何数字,所以他们无法访问否则他们首先登录,让我们说如果5属于一个用户将打开,但如果不是将打开,是否有有什么比这更好的方法来保护它?
谢谢
答案 0 :(得分:1)
将受限数据存储为htdocs文件夹(或CakePHP的webroot
)内的普通文件,无需进一步授权即可请求它们,这一直是一项风险很高的业务,应该避免使用。
我无法确定您在.txt文件中存储的数据类型,但我认为它不是从数据库中提取然后保存的。我的理解是该文件的链接显示给登录(授权)用户。
提出更安全的解决方案:
webroot
文件夹之外,并使用该文件夹的绝对路径(USERDATA_PATH
)创建一个常量。请记住为Web服务器用户设置读取权限(Apache的www-data
)UserData
具有存储用户和魔术散列之间关系的基础数据库表(例如,1 =>'uehKDj44',2 =>'ds83skf'等)。您还可以存储文件名,使其稍微复杂一些。UserDataController
创建一个控制器serveFile
,该操作将秘密密钥作为参数,将其与文件匹配并将文件输出给用户。public function serveFile($hash= null) { try { $data = $this->UserData->findByHash($hash); if (!$data) { throw new Exception('No match found'); } // Load the data from file $this->set('output', file_get_contents(USERDATA_PATH.DS.$data['UserData']['filename'])); } catch (Exception $ex) { // No match found - display error message / log } }
然后在视图中:
header('Content-type: text/plain');
echo $output;
这应该可以解决问题。