【发布时间】:2019-12-21 21:57:03
【问题描述】:
编辑:建议的答案不起作用,因为机器人不只是从我的索引中随机爬取,当它在 FB 消息中输入时,它们正在访问特定链接。
我在 App Engine 上的 Flask 中创建了一个基本的聊天应用程序。它允许用户通过添加他们的 ID 或通过给他们一个私人共享链接来邀请其他人,该链接会自动添加访问过它的人(类似于 youtube 或 google drive)。
我发现的一个严重缺陷是,如果用户将链接发布到 Facebook 消息中,Facebook 将抓取/访问该链接,并根据我的系统设计将他们作为用户添加到对话中。突然间,您会看到 3 个随机用户加入对话。
我的聊天系统是完全匿名的,并且是临时设计的,因此除了保存在会话中的每个用户的唯一密钥之外,没有登录或身份验证。
因此,Facebook 机器人访问该链接,分配一个 ID 并在对话中进行身份验证,因为他们使用了用户共享链接,有没有办法通过 Flask/Python 或 App Engine 阻止这种情况?我可以 IP 禁止 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
我可以先添加一张支票if Facebook-bot: return False
【问题讨论】:
-
@siamsot facebook 是否遵守 robots.txt?
-
我希望是的
-
似乎没有用,我认为它更多是为了停止一般抓取,所以我将使用来自 Facebook 的 IP 禁止请求。
-
有兴趣知道!
标签: facebook google-app-engine flask