阻止Facebook/其他应用程序通过私人共享链接抓取我的Web应用程序



编辑:建议的答案不起作用,因为机器人不仅仅是从我的索引中随机爬行,当在FB消息中输入特定链接时,它们正在访问特定链接。

我在 App Engine 上的 Flask 中创建了一个基本的聊天应用程序。它允许用户通过添加他们的ID或给他们一个私人共享链接来邀请其他人,该链接会自动添加访问它的人(类似于YouTube或Google云端硬盘(。

我发现的一个严重缺陷是,如果用户将链接发布到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

对于您的情况,我会说您可以在自己或Google云平台方面避免这种情况。更准确地说,您可以拒绝代码中的某些连接,也可以为 App Engine 实例设置防火墙规则以拒绝来自特定 IP 的连接。在公共文档中,您可以找到有关使用 GAE 时的防火墙规则的更多信息:

  • 使用弹性环境。
  • 使用标准环境。

在代码方面,您可以在此 github 存储库中检查,该存储库解决了阻止某些 IP 进入 Flask 应用程序的问题。

最后一个可能的选择是身份验证,但由于聊天是匿名的,我想这不是您正在寻找的解决方案。

接受的答案使我得出了这个答案,我用一个装饰器保护了路由,该装饰器将获取传入连接的"用户代理"并查看它来自哪里。如果它来自Facebook,请将其重定向出去。

def check_for_robot(f):
@wraps(f)
def decorated(*args, **kwargs):
if 'not_a_robot' not in session:
agent = request.headers.get('User-Agent')
if request.headers.getlist("X-Forwarded-For"):
ip = request.headers.getlist("X-Forwarded-For")[0]
else:
ip = request.remote_addr
# Stop robots from crawling when sharing conversation links
# Could use the IPs too
if 'facebook' in agent or 'Slackbot' in agent:
return 'No Robots Thanks'
# Real people will get to here and continue on
session['not_a_robot'] = True
return f(*args, **kwargs)
return decorated
@app.route('/')
@check_for_robot
def index()
return 'hello human'

任何抓取您的链接以在聊天消息中显示数据的消息服务(WhatsApp、Slack 等(也会发生此问题。

这也暴露了这些消息传递服务中的一个漏洞,因为它们现在将不正确的元数据返回到聊天服务,但嵌入了您提供的链接,即。网络钓鱼、点击劫持

最新更新