将pdf文件安全地存储在服务器上

时间:2013-09-28 10:34:22

标签: php mysql pdf encryption payment

我正在部署一个用户可以购买pdf的网站。现在我正在搜索存储pdfs的方式,这样只有在付款完成后才能下载。{1}} 我遇到过一种方法,我可以将pdf存储到Mysql数据库中,并在需要的凭据实现时生成它的路径。

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

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

3 个答案:

答案 0 :(得分:2)

我会:

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

  • 开发一个PHP脚本:

    • 接收文件标识符(例如文件名;或某些可与文件对应的标识符)
    • 对用户(有一些登录/密码字段)进行身份验证,如果用户有效,则对数据库中存储的数据进行身份验证,并且可以访问该文件(这是因为不同的用户无权访问同一组文件),从PHP脚本中读取文件的内容,然后将其发送给用户。

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

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

答案 1 :(得分:2)

  1. 您需要将文件存储在网站根目录之外的某个位置,如Dagon所述。上传文件时,使用move_uploaded_file移动文件。您可以将文件命名为任何名称(在操作系统限制内),并将实名保留在数据库中。
  2. 然后,当用户付费购买书籍时,将用户已支付的书籍添加到数据库中的表格中。
  3. 向用户提供他所支付的所有图书的清单,例如:/download/filename.pdf
  4. 如果您使用Apache(或等效于其他网络服务器),请将/download/.*重定向到download.php或控制器,添加mod_rewrite。
  5. 在下载页面上,检查用户是否已登录并有权访问该文件。如果没有,请重定向到该图书的购买页面。
  6. 如果下载正常,请为您需要的header设置http status:内容长度,内容类型,日期,状态(200),可能是内容编码。
  7. 使用readfile将文件输出给最终用户。

答案 2 :(得分:2)

  

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

  1. 最好的方法是在付款后生成文件的密钥。
  2. 创建一个这样的页面www.site.com/download.php?key=key(这里你不需要拥有本书的id,因为按键你可以查看数据库的内容是客户购买的书
  3. 在download.php里面读取密钥,查询数据库以查找与密钥链接的文件
  4. 读取文件,并将其发送给客户。这是,如果密钥有效,您将发送php标头作为内容类型为pdf,并且(PHP代码)以二进制方式读取文件并将其发送到邮件正文中。
  5. 我希望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');
    ?>