【发布时间】:2012-03-09 08:31:20
【问题描述】:
在开始之前,我必须警告您,我不是一个网络程序员,所以我的方法可能看起来有些迂回,而且我使用的术语可能很尴尬。
情况是这样的。我正在开发一个网站供用户可视化数据。
我在/var/www/thepage/index.php 路径中有一个公共 php 页面(是的,Linux 服务器 + apache)。这是网站的主页,也是用户在表单中进行选择的地方。
提交表单后,将调用第二个 php 页面,这是将第一个 php 页面中的表单选择传递给创建可视化的 javascript 的地方。为此,首先使用从 MySQL 数据库查询的 php 脚本将 csv 文件 写入此目录。
问题是,我希望用户能够看到可视化,但不能下载 csv 文件(除非他们是管理员)。我允许管理员下载文件的方法是创建一个受保护的 (.htaccess) 子目录/var/www/thepage/secure/,它有一个索引 html,一旦管理员登录,它就会运行 cgi 脚本 (点击下载链接时提示)。此脚本从/var/www/thepage/ 目录复制最新文件(具有动态名称)并将它们移动到具有静态文件名的secure/ 目录。指向这些具有静态名称的文件的下载链接位于受保护的 index.html 上。但是,如果用户查看第二个php页面的源代码,他们也可以下载文件,因为他们知道路径并且不受保护。
如果删除文件权限,php脚本也将无法读取文件,导致可视化失败(我希望普通用户能够看到可视化)。拥有文件也很重要,因为我有一个 cgi 脚本 (bash + awk) 在文件上运行数学函数,这也需要权限
隐藏文件名也不起作用,因为文件是动态编写的,html 页面的源代码将显示正在写入的隐藏的 csv 文件名。
我怎样才能解决这个问题?我希望不必须为普通用户创建会话和登录等...
【问题讨论】:
-
一方面..一般在网上可以看到的东西可以被盗,你只能希望很难得到这样只有少数尝试和更少成功..你的情况可能您可以将 csv 文件保存在 Web 根目录之外,使用基于会话 var 的 php 文件将它们提供到第二页,确保它只运行一次
-
因为文件是使用 php 脚本编写的,该脚本在用户输入表单提交后查询 MySQL,我仍然可以在 web 根目录之外编写文件吗?谢谢。
-
这取决于您如何分配该目录的权限,而不是它是否存在于 Web 根目录中。所以是的,如果您以正确的方式设置权限,您会的。
-
谢谢米舒。假设我要使用会话变量,即使它只运行一次,我还会遇到同样的问题吗?意思是说,允许查看图表的普通用户将触发将文件提供给第二个 php 页面。发生这种情况时,查看页面的源代码将允许用户找到下载文件的 URL?
标签: php linux permissions