停止Facebook/其他应用通过私有共享链接抓取我的web应用程序
编辑:建议的答案不起作用,因为机器人不仅仅是从我的索引中随机爬行,而是在FB消息中输入某个特定链接时访问该链接 我在Flask on App Engine中创建了一个基本的聊天应用程序。它允许用户通过添加他们的ID或给他们一个私人共享链接来邀请其他人,该链接会自动添加曾经访问过它的人(类似于youtube或google drive) 我发现的一个严重缺陷是,如果用户将链接发布到facebook消息中,facebook将抓取/访问该链接,并根据我的系统设计,将他们作为用户添加到对话中。突然,你会看到3个随机用户加入到对话中 我的聊天系统是完全匿名的,设计为临时的,因此除了在会话中为每个用户保存的唯一密钥外,没有登录或身份验证 Facebook机器人访问该链接,获得一个ID,并在对话中获得身份验证,因为他们使用了用户共享链接,我有没有办法通过Flask/Python或App Engine阻止这种情况?我可以禁止使用facebook吗 一些代码为了代码,对每一个新访问者都这样做:停止Facebook/其他应用通过私有共享链接抓取我的web应用程序,facebook,google-app-engine,flask,Facebook,Google App Engine,Flask,编辑:建议的答案不起作用,因为机器人不仅仅是从我的索引中随机爬行,而是在FB消息中输入某个特定链接时访问该链接 我在Flask on App Engine中创建了一个基本的聊天应用程序。它允许用户通过添加他们的ID或给他们一个私人共享链接来邀请其他人,该链接会自动添加曾经访问过它的人(类似于youtube或google drive) 我发现的一个严重缺陷是,如果用户将链接发布到facebook消息中,facebook将抓取/访问该链接,并根据我的系统设计,将他们作为用户添加到对话中。突然,你会看
def requires_session(f):
@wraps(f)
def decorated(*args, **kwargs):
if 'profile' not in session:
user_ref = fs_database.collection('users').document()
data = {
'id': user_ref.id,
'date': datetime.now(timezone.utc)
}
# add the user to the database
user_ref.set(data)
# save their id to their session
session['profile'] = data.get('id')
# create a hash for later on to create a sharelink
session['share'] = hashlib.sha256(data.get('id').encode('utf-8')).hexdigest()
return f(*args, **kwargs)
return decorated
如果Facebook bot:return False,我可能会先加上一个检查。对于你的情况,我想说,你可以在自己或谷歌云平台方面避免这种情况。更准确地说,您可以拒绝代码中的某些连接,也可以为应用程序引擎实例设置防火墙规则以拒绝来自特定IP的连接。在公共文档中,您可以找到有关使用GAE时防火墙规则的更多信息:
- 使用环境
- 使用环境
最后一个可能的选项是身份验证,但由于聊天是匿名的,我想这不是您要寻找的解决方案。接受的答案引导我找到这个答案,我用一个装饰器保护路由,该装饰器将获取传入连接的“用户代理”,并查看其来源。如果它来自Facebook,请重定向它
def检查机器人(f):
@包装(f)
def装饰(*args,**kwargs):
如果“非机器人”未在会话中:
agent=request.headers.get('User-agent')
if request.headers.getlist(“X-Forwarded-For”):
ip=request.headers.getlist(“X-Forwarded-For”)[0]
其他:
ip=request.remote\u addr
#共享对话链接时阻止机器人爬行
#也可以使用IPs
如果代理中的“facebook”或代理中的“Slackbot”:
返回“无机器人,谢谢”
#真正的人会来到这里,继续前进
会话['not_a_机器人']=True
返回f(*args,**kwargs)
回报
@应用程序路径(“/”)
@检查机器人的位置
def索引()
返回“你好,人类”
此问题也会出现在任何消息服务中,这些服务会抓取您的链接以在聊天信息中显示数据(WhatsApp、Slack等)
这也暴露了这些消息服务中的一个漏洞,因为它们现在将不正确的元数据返回到聊天服务中,但嵌入了您提供的链接,即钓鱼、点击劫持@siamsot facebook是否遵守robots.txt?我想是的,这似乎不起作用,我想更多的是为了停止一般的爬行,所以我要用IP禁止来自Facebook的请求。很有趣知道!