【问题标题】:Protecting csv files used for plotting visualizations dynamically via PHP保护用于通过 PHP 动态绘制可视化的 csv 文件
【发布时间】: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


【解决方案1】:

如前所述,很难在网络上隐藏任何内容,尤其是当您需要将其发送到 javascript 时。你可以尝试破解它,可能会花费你一些性能,但会对不精通网络的人起到威慑作用......但也可能被其他人视为挑战:)

一个粗略的例子是......

$csv = fgetcsv("/var/www/thepage/secure/file.csv");

echo "<script type'text/javascript'>";
echo json_encode($csv);
echo "</script>";

这里有点生疏,但是 javascript 应该将 json 解释为一个对象,您可以在代码中使用它。您可以更进一步,将 php 数组拆分为多个部分,然后再将其发送出去,这样就更难知道发生了什么。

就像我说的。这很粗糙,但它可能是一个解决方案。

【讨论】:

    【解决方案2】:

    我认为最好的方法是将文件存储在 Web 浏览器(Web 根目录之外)无法访问的安全目录中。然后,您可以通过下载链接向经过身份验证的用户显示可用文件的列表。当他们单击链接时,您可以检查他们是否已登录,如果已登录,则开始下载文件。

    PHP readfile - 可以帮忙

    【讨论】:

    • 感谢您的回答。问题是,javascript 使用这些文件来生成图形。如果我将它们移动到对普通用户安全的目录,则 javascript 将无法访问它们。我希望普通用户仍然可以看到图表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多