如何创建无法共享的链接?

时间:2016-07-11 18:00:14

标签: http cookies cgi

我们在网站上有一个表格,访问者必须提交他们的电子邮件地址 然后我们通过下载链接向该地址发送电子邮件 这个想法是阻止人们共享链接,而是要求他们输入他们的电子邮件地址。

我能想到的是当用户提交表单并在处理下载链接时检查该cookie时设置cookie。
这有两个缺点,相同的用户无法从不同的设备下载相同的文件,并且鉴于用户选择删除他们的cookie的情况,他们不再能够下载该文件。
更好的解决方案? (这并不要求访问者使用任何登录名或密码)

注意:
我认为这是一个糟糕的营销策略,但它是客户的要求 人们创建免费的电子邮件帐户只是为了获取文件,或者他们可以共享文件本身超出了这个任务的范围,所以基本上我们不关心那些posibilites,因为我们无法做到关于那一切。

1 个答案:

答案 0 :(得分:1)

在这种情况下,我会发送带有邮件本身的用户链接或一些生成的令牌作为GET参数(例如http://my-site.com/download?mail=a@a.a)。然后用户打开邮件,并且很可能在共享之前访问此链接。因此,我们可以保存HTTP的“Referer”标题,并且对于所有进一步的访问都需要完全相同的“Referer”。因为每个邮件提供商的“Referer”相同(例如,Gmail会打开http://google.com?q=http://a.com之类的链接,然后会打开http://a.com,而“Referer”将始终等于“http://google.com?q=http://a.com”,并且因为这种机制也适用于Gmail / Inbox本机应用程序,并且对于大多数提供商来说,即使在不同的设备上也是如此。

有4个问题:

  1. 用户只能通过他的邮件打开链接。
  2. 如果用户将链接复制到剪贴板然后将其粘贴到新的空白标签中,则“Referer”将为空,并且分享仍然很容易。
  3. 可以复制像http://google.com?q=http://a.com这样的链接,但仍然可以进行共享,但对普通用户来说却变得有点棘手。
  4. 某些服务可能会在不同的设备/浏览器上为您提供不同的“Referer”。
  5. 您可以通过添加过滤和分类用户代理来解决第4个问题。例如,假设普通用户不超过1台Mac,1台Win PC,1台Linux PC,1台iPhone,1台Android。在这些设备上,他有不同的浏览器,因此我们必须区分OS X Safari,OS X Chrome,OS X Firefox,Win Safari,Win Chrome,Win Firefox等。如果您收到不合适的“Referer”请求,但是使用者 - 来自未填充类别的代理,将其视为合法请求。

    现在第4个问题已解决,2个拥有相同操作系统浏览器系列的用户无法共享链接。但问题是:

    1. 使用不同的OS浏览器系列分享链接变得更加容易。
    2. 它禁止同一个用户在他的两个iPad上打开链接。
    3. 禁止同一用户在访客设备上打开链接(仅当您的服务应支持此功能时)。