routes - 在 Flask 中阻止特定路由上的引荐来源网址

标签 routes flask http-referer

是否可以在 Flask 中阻止来自站点本身外部引用的特定路由(例如 /data)?

最佳答案

request.referrer 包含请求的引荐来源网址,因此您可以基于此应用一些逻辑。

from flask import Flask, request, redirect, url_for, render_template_string

app = Flask(__name__)

@app.route('/')
def home():
    return render_template_string('''
        <a href="{{ url_for('data') }}">Correctly Referred</a>
    ''')

@app.route('/data')
def data():
    print request.referrer
    if request.referrer != 'http://127.0.0.1:5000/':
        return abort(403) # Forbidden
        # or maybe: return redirect(url_for('home'))
    return 'Woo!'


if __name__ == '__main__':
    app.run(debug=True)

我确信操作系统和设备中的不同浏览器会通过引用网址做一些稍微奇怪的事情,因此值得了解一下它们的特性。也许最好在他们访问您的主页/入口路由时设置 session 值,然后使用 before_request 检查 session 值是否设置,几乎就像自动登录一样。

因此,如果您想保护除 home 路由之外的所有页面 - 您可以这样做:

@app.before_request
def check_session():
    print request.endpoint
    if not session.get("legit") and request.endpoint is not 'home':
        return redirect(url_for('home'))

然后在您的家乡路线上,只需添加一个session["legit"] = True。现在,每当用户访问该网站时,如果他们是新用户,他们都会被重定向回主页,或者如果 session 仍然处于事件状态,他们将能够看到所有内容。有点像酒店/咖啡馆的无线热点。

关于routes - 在 Flask 中阻止特定路由上的引荐来源网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26557310/

相关文章:

python - Flask 应用程序回溯未显示在服务器日志中

python - 如何用连字符或下划线替换具有路径参数的 URL 中的空格

python - 将关系转换为查询对象

php - HTTP_REFERER 空白,需要替代

http-referer - 为什么网站需要引用 header (并且默默地失败)?

grails - 默认情况下如何使Grails 3使用复数路由

authentication - Flutter - onGenerateRoute 与 Await for auth Guard

javascript - 为什么我不能走子组件的路线?

c# - IFrame 引用问题 - asp.net c#

javascript - UI5路由不会实例化 View