我预见到允许客户通过 PayPal 从我这里购买某些内容会出现问题。我将提供多种无形商品。当有人完成对这些商品之一的购买后,他们将被重定向到一个登陆页面——我们称之为“thank_you.php”——它将自动排队下载并允许一个链接排队下载,以防它没有自动启动。这将通过将唯一项目 ID 传递到下载页面(“download.php”)来完成。
此方法本质上是对这些线程的热门答案的模仿:
PHP generate file for download then redirect
但是,我担心一旦用户打开“thank_you.php”,他们就可以下载他们的项目,然后使用 Firebug(或等价物)编辑项目 ID 并下载另一个不同的项目:
<a href="download.php/38a205ec300a3874c867b9db25f47c61">Download Here</a>
到
<a href="download.php/7c8ddc86c0e4c14517b9439c599f9957">Download Here</a>
我需要你们这些在这方面比我强得多的人的想法和帮助:我可以实现什么(以及如何)作为一个解决方案,仍然允许相同的客户访问和休闲,同时防止这种操纵?
编辑:ID 哈希用于预览和引用整个网站的项目,我不担心人们猜测,而是他们在单独的选项卡中浏览网站以获取其他 ID并继续下载不同的项目。
最佳答案
虽然这些其他答案假设您有一个 session ,使用用户名,但听起来好像您刚刚创建了一个文件哈希以隐藏文件名。换句话说,您还不如在键盘上放一把猴锤,然后将其作为您拥有的每个文件的文件名。
这听起来像是您担心用户会过来,敲击键盘,并以某种方式最终与您的猴子所做的完全匹配。这不太可能。
更有可能的是有人会复制粘贴您的链接并分享。听起来好像您需要在身份验证方案中至少再添加一层(例如,对用户名和商品 ID 进行哈希处理),或者让链接在使用后过期。
从您的评论看来,您似乎也在使用哈希值来识别您网站另一部分上的项目,这意味着用户可以通过查看您网站另一部分的源代码来确定项目的哈希值网站。在这一点上,你通过默默无闻来获得安全感就像我在与某人闲聊并说“鱼和猫正在亲热”时使用密码词(例如“鱼意味着约翰,猫意味着丽莎”),同时还有一张纸放在一边,写下任何人都可以看到的映射。听起来您只是想隐藏文件名,以免人们猜到它们。这被称为 security through obscurity ,并没有给你带来太多好处。
大多数其他答案都假设一个项目存在,并且它将有多个不同的散列指向它(例如 file1,将有 hash1、hash2 和 hash3 都是指向它的有效链接)。在这种情况下,他们创建了多个散列,每个散列对于特定用户和项目都是唯一的。我认为他们还假设网站上的每个人都将下载项目称为 item1
而不是 hash1
,这听起来像你在做什么?
您最好只在代码中某处创建一个字典,在项目名称和散列之间进行映射,然后只在下载页面上用散列代替名称。再次重申,这只是通过隐匿性实现的安全性,链接可以共享,但人们无法仅在浏览您的网站时获得哈希值。
关于PHP:让用户只下载购买的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12718685/