【问题标题】:storing pdf files on server securely将 pdf 文件安全地存储在服务器上
【发布时间】:2013-10-04 15:34:10
【问题描述】:

我正在部署一个用户可以从中购买 pdf 的网站。现在我正在寻找存储pdfs 的方法,以便只有在付款完成后才能下载它。 我遇到了一种方法,我可以将 pdf 存储到 Mysql 数据库中,并在所需凭据满足时生成它的路径。

有没有其他方法可以做到这一点,并且指向 pdf 文件的链接应该是动态的和加密的,以便无法预测到其他书籍的其他链接。

我使用的服务器端语言是PHP

【问题讨论】:

标签: php mysql pdf encryption payment


【解决方案1】:

我愿意:

  • 拒绝对文件的任何访问 - 即使用 .htaccess 文件(这样,没有人可以访问该文件)

  • 开发一个 PHP 脚本:

    • 接收文件标识符(例如文件名;或可以与文件对应的某些标识符)
    • 验证用户(使用一些登录名/密码字段),如果用户是有效的,并且可以访问文件(这是如果不同的用户无权访问同一组文件),从您的 PHP 脚本中读取文件的内容,并将其发送给用户。

优点是您的 PHP 脚本可以访问数据库——这意味着它可以允许用户登录、注销,它可以使用会话,...

这是来自堆栈用户的另一个适合此问题的答案:Creating a Secure File Hosting Server for PDFs

【讨论】:

    【解决方案2】:
    1. 您需要将文件存储在您的网站根目录之外的某个位置,如 Dagon 所述。上传文件时使用move_uploaded_file 移动它。您可以将文件命名为您想要的任何名称(在操作系统限制内)并将真实名称保留在数据库中。
    2. 然后,当用户支付了图书费用后,将用户支付的图书费用添加到数据库中的表中。
    3. 为用户提供他已支付的所有书籍的列表,例如:/download/filename.pdf
    4. 如果您使用 Apache(或其他 Web 服务器的等效项),其中 /download/.* 被重定向到 download.php 或控制器,请添加 mod_rewrite。
    5. 在下载页面上,检查用户是否已登录并有权访问该文件。如果没有,请重定向到该书的购买页面。
    6. 如果下载正常,请将 header 设置为 http status,您需要:Content-Length、Content-Type、Date、Status (200),可能还有 Content-Encoding。
    7. 使用readfile 将文件输出给最终用户。

    【讨论】:

    • 感谢回复..现在我有一个问题,如何在根目录之外上传文件....我想从浏览器界面上传文件,这些文件将使用 php 编写脚本,而不是像上传客户端一样文件...
    • @nikhil 回答了你的问题
    【解决方案3】:

    有没有其他方法可以做到这一点,并且指向 pdf 文件的链接应该是动态的和加密的,以便无法预测到其他书籍的其他链接。

    1. 最好的办法,是付款后生成文件的密钥。
    2. 创建一个像这样的页面 www.site.com/download.php?key=key (这里你不需要有书的 id,因为 你可以通过 key 在数据库上查看什么是客户购买的书
    3. 在download.php里面读取key,查询数据库找到哪个文件和key链接了
    4. 读取文件,并将其发送给客户。也就是说,如果密钥有效,您将把 php 标头作为内容类型发送为 pdf,并且(php 代码)以二进制形式读取文件并将其发送到消息正文中。

    希望this code 有所帮助

    <?php
    // We'll be outputting a PDF
    header('Content-type: application/pdf');
    
    // It will be called downloaded.pdf
    header('Content-Disposition: attachment; filename="downloaded.pdf"');
    
    // The PDF source is in original.pdf
    readfile('original.pdf');
    ?>
    

    【讨论】:

      猜你喜欢
      • 2012-05-18
      • 2015-07-01
      • 1970-01-01
      • 2011-06-03
      • 2012-10-19
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 2015-10-11
      相关资源
      最近更新 更多