我正在开发一个图像银行网站,该网站将保存免版税图像供下载。我想减慢使用机器人或者经常下载的人的速度,所以我有一个每日文件限制并且已经将可变睡眠结合到提供文件的脚本中。我通过将上次下载的完成时间写入数据库,然后检查下次开始下载所用的时间来完成此操作。如果那个小于N秒,那么我将下载延迟M秒,在连续违规时加倍M.这可以正常工作,直到脚本达到服务器的执行时间限制。
我的托管公司确认睡眠时间计入执行时间。
我在开发阶段是否过于谨慎?
有关如何在不使用php睡眠的情况下检测和减慢滥用网站的用户的任何建议?
答案 0 :(得分:3)
我不认为你过于谨慎,但我做认为这是一种谨慎的坏方法。如果睡眠时间计入执行时间,你不是为此付钱吗?它也可能会计入CPU使用率和一堆其他成本因素。此外,慢慢窒息服务不会给你的用户任何迹象表明他们做错了什么,只是让你的服务看起来很慢。
你可能会更好地提供一个友好的信息图像让这个人知道发生了什么,这样他们就可以改变他们的行为(考虑到有些人可能会在完成无辜的活动时偶然触发它,这是特别好的)。如果他们坚持提供超过五次或十次的消息图像,那么它肯定是一个脚本,所以只是完全停止回答他们的请求。
答案 1 :(得分:2)
为什么不简单地让用户知道他/她在做什么“错误”并显示错误?
这样,用户就会知道发生了什么,并可能决定纠正行为。随机延迟,我怀疑你的服务器有问题,也许只是寻找一个更稳定的竞争产品。
答案 2 :(得分:0)
使用带时间计数器的div并在javascript.example中实现此时间机制:(www.rapidshare.com)如果将睡眠时间计算为执行时间,则意味着您很有可能跨越执行时间限制。
答案 3 :(得分:0)
如果任何一个延迟比脚本执行超时长得多,您可能想要在一段时间内(24小时?)完全阻止该用户。
您如何确定谁正在积极下载? IP地址不是100%可靠,因为您可能在NAT后面有许多人似乎都来自同一个IP地址。