2014-02-16 29 views
3

我有一个单页webapp,我正在写,将采取用户名和API密钥,并将做REST完整的API调用。由于用户使用apikey作为帐户,因此无需登录。我不使用cookies ether。CSRF保护,而不使用模板引擎 - Javascript和Flask

在后端,我使用了一个简单的瓶服务器。前端是一个没有框架的自定义书写框架,主要使用html和vanilla JavaScript。我不确定如何在不使用框架的情况下实施CSRF保护。我可以使用Javascript来动态生成一个令牌,并将其作为隐藏元素放在HTML表单域中。但我不知道如何将这个标记放到烧瓶服务器上,以便它可以进行比较。如果不使用模板引擎,我怎么能做到这一点?

+0

由于它使用的API密钥的POST请求,我不知道你为什么会需要CSRF保护。 – thefourtheye

+0

我的印象是,html表单可能被利用,并且信息可能被重定向(如api键)。在我的情况下,这可能没有CSRF令牌吗? – dman

+2

但是,您不应该在表单字段中设置API密钥。 – thefourtheye

回答

1

首先,您需要从服务器生成csrf令牌,客户端可以通过简单的请求获取它,然后在发送请求时将其传回。您可以使用下面的方法来生成令牌。

flask_wtf.csrf.generate_csrf(secret_key=None, time_limit=None) 

例如,

@app.route('/token') 

def token(): 

    token=generate_csrf(time_limit=10) 

    return jsonify({'token':token}), 201 

然后用头'X-CSRFToken'