在PHP中限制用户IP地址的下载数量


Restrict Number of downloads by User IP Adrress in PHP

我正在构建一个PHP网页,其中有一个按钮下载图像。我想限制未签名用户只能下载此图像3次。

我既不想使用会话也不想使用cookie,因为用户可以删除他的cookie !

我想使用IP,所以我使用了$_SERVER全局变量,但这里的问题是IP地址是可变的。它是动态的,每一段时间都在变化。

那么我该怎么办呢?

不是所有的ip都是动态的,这取决于ISP。您的问题是唯一地标识用户,如果不要求用户登录,这是不可能做到的。无论您使用什么,ip, cookie,会话,客户端脚本来执行浏览器指纹或在localStorage中存储令牌,熟练的使用者总是会设法超越您的保护。

你只能让用户感到困难:

  • 运行客户端脚本创建浏览器指纹- https://github.com/Valve/fingerprintjs2 -并将其发送到服务器以帮助您识别用户
  • 生成服务器端令牌并将其发送到客户端,并将其存储在localStorage中,然后将其发送回服务器
  • 将用户的IP存储在DB
  • 使用session/cookies添加额外的安全层
  • 使用一个隐藏的iframe从你拥有的不同的域加载代码,并从那里添加额外的cookie(有时用户不删除所有的cookie,只是那些为你的网站)
  • 在用户可以下载图像之前放置验证码,这样你就不会被机器人废弃

使用以上所有的组合会让用户在没有创建用户帐户的情况下从你的网站下载图片,但并非不可能。