防止下载链接被爬虫抓取,有没有最好的方法?

2017-11-12 10:14:44 +08:00
 Reign

目前服务器上几百个 G 的文件全都是静态文件下载地址,只要是幼儿园大班毕业的人都可以不费吹灰之力写个爬虫爬下来,如果想要彻底屏蔽爬虫,包括 Googlebot、bingbot 之类的全都屏蔽了,只允许普通用户用浏览器正常点击后下载,有哪些办法,我目前想了一些办法都不成熟:

  1. 用户注册登录后才能下载,注册页面加上 recaptcha,弊端就是一个“注册登录”会烦掉很多用户,况且 recaptcha 在大陆没法使用
  2. 输入验证码后下载,感觉繁琐而麻烦
  3. 客户端 js 生成一个 token 和服务器端 php 进行校对,这个能屏蔽很多 file_get_contents,但是对于 phantomjs 等无头浏览器无能为力
  4. Google 了一下有很多检验客户端是否为 headless 浏览器的方法,但感觉这些方法随着 phantomjs 不断升级都会不断失效,于是我在想对一个下载按钮比如:“点此下载文件”,每次点击记录鼠标的坐标,如果每次鼠标的坐标像素值( e.pageX 和 e.pageY )都一模一样,就判断为爬虫然后返回脏数据,就是不知道这种原理该怎样实现?用 cookie 来记录?
  5. 蜜罐法,这个貌似很不靠谱,因为我写爬虫第一时间都是去看它的 robots 有没有蜜罐

上面就当抛砖引玉吧,不知道各位 V 友有没有好点的办法?不胜感激

9052 次点击
所在节点    程序员
51 条回复
jugelizi
2017-11-12 10:30:05 +08:00
只能说过滤大部分
没有技术能百分百

js 生成动态下载链接 一次性 复制出来过期就失效
Reign
2017-11-12 10:35:39 +08:00
@jugelizi 对 phantomjs 来说,你这个不成立
jamfer
2017-11-12 10:37:46 +08:00
给下载链接生成一次性下载地址,XX 分钟后失效
xmcp
2017-11-12 10:37:53 +08:00
recaptcha 在大陆可以用,参见 waifu2x.udp.jp 。此贴终结。
dong3580
2017-11-12 10:43:35 +08:00
一次性 hash 链接,后端给出链接下载,链接一旦生成在请求就失效了,所以你需要一个表记录。
Reign
2017-11-12 10:46:04 +08:00
@jamfer
@dong3580 这些防不了 phantomjs 啊
Kilerd
2017-11-12 10:51:21 +08:00
phantomjs 使用得恰当,跟真人访问无差。

如果楼主找到一个能防 phantom 的方法,请麻烦告诉我一下,谢谢
skyjerry
2017-11-12 10:51:49 +08:00
点击下载弹出 confirm 哈哈
kimown
2017-11-12 10:56:02 +08:00
简化注册登陆流程,比如说只支持微信扫码登陆,虽然本人极为讨厌这种方法,但可以解决问题
fiht
2017-11-12 11:07:10 +08:00
上个滑动验证码能解决很大一部分爬虫。---别的都是扯淡
crab
2017-11-12 11:12:23 +08:00
手机发短信才能获取一次性 hash 下载链接。
alvinbone88
2017-11-12 11:16:37 +08:00
下载页加 ReCaptcha
附一个国内能用的 ReCaptcha API 地址
https://recaptcha.net/recaptcha/api.js
vicki
2017-11-12 11:18:59 +08:00
做 ip 时间 次数等限制
lianyue
2017-11-12 11:21:25 +08:00
一个 ip x (分钟,小时,天)内下载数量 超过 x 次 加验证码就好了 ,, 拖拽验证的那种或者 ReCaptcha
zea
2017-11-12 12:09:36 +08:00
"幼儿园大班毕业"这个有点……
opengps
2017-11-12 12:11:58 +08:00
ua 信息过滤,reffer 过滤,ip 过滤(排斥来自阿里云腾讯云的网段),下载链接有效期设置等方法
won
2017-11-12 12:12:31 +08:00
中间加个 token 服务器,被破解了就换 token
colincat
2017-11-12 12:18:06 +08:00
滑动验证码
xeis
2017-11-12 12:30:41 +08:00
后台用不显示的字符混淆链接,发到前端,只允许复制,不可以点击
wk110
2017-11-12 12:38:00 +08:00
做一个限制搜索引擎的 roobts,限制在你的那个下载文件的目录里。这样可能会好一点,针对所有爬虫

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/405660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX