gpt4 book ai didi

php - 使用 php 限制对 pdf 页面的访问

转载 作者:行者123 更新时间:2023-12-02 07:42:07 25 4
gpt4 key购买 nike

我正在使用 PHP 开发一个脚本,一旦脚本通过验证就会生成一个契约(Contract)。

契约(Contract)是一个用 TCPDF 生成的 pdf 文档,我将它保存到服务器的一个带有用户 ID 的子目录中。例如,“contracts/132/1.pdf”将是 ID 为 132 的用户的 #1 账单。

但是,我只希望用户 132 能够访问该文件,因为它包含个人信息。如何将每个子文件夹中的 pdf 文档的访问权限限制为各自的用户(使用 php 或 htaccess,以最有效的为准 - 我对 htaccess 不是很熟悉)?

最佳答案

最简单的方法可能只是拥有一个需要存在有效 session 的 PHP 脚本(就像生成器脚本一样),其功能是 readfile("/path/to/contract.pdf") ;

这样,您就可以让 PDF 包装器脚本验证正在下载的契约(Contract)是否是 session 中人员的正确契约(Contract),而不仅仅是目录中的契约(Contract)。

目录上基于 .htaccess 的解决方案的问题在于,任何对该目录具有读取权限的人都可以下载任何合约。

给定一个像 http://example.com/contract.php?user=132&bill=1 这样的 URL,你可以:

<?php

$user = $_GET['user'];
$bill = $_GET['bill'];
# do input validation on $user and $bill. No really, do it.

if ($user != $_SESSION['user']) {
die("Security error; the black choppers are on their way.");
}

header("Content-type: application/pdf");
header('Content-Disposition: attachment; filename="Contract-$user-$bill.pdf"');

readfile("/path/to/pdfspool/$user/Contract-$user-$bill.pdf");

中间的 if () block 验证所请求的 $user 对当前用户是否有效。显然,您可能希望在该用户首次登录时存储 $_SESSION['user']。

当然,您真的不需要保留假脱机文件。如果生成 PDF 的过程不会使您的 Web 服务器不堪重负(如果确实存在其他问题),则根据要求从头开始重新生成每个 PDF 可能会更容易。这就是我现在处理公司发票的方式,每张发票都有一个 6 点的页脚,说明它是何时生成的,以及来自哪个 IP 地址的请求。 :)

关于php - 使用 php 限制对 pdf 页面的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10004486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com