有人能澄清csrf保护和空烧瓶的形式吗

  • 本文关键字:保护 csrf html flask flask-wtforms
  • 更新时间 :
  • 英文 :


我有一个关于烧瓶中csrf跨站点请求伪造攻击的问题。

我发现了一个很好的youtube视频。基本上,在视频中:

  • 有人在登录时通过登录路径/功能更新了某人的电子邮件,该功能在登录时更新了电子邮件
  • 然后有人在csrf令牌不存在时更新电子邮件,并最终使用HTML文件插入数据

在视频中,他们只显示登录路线需要它。

我没有登录时需要它吗?此外,我是否需要获得请求的csrf保护?我想不是因为什么都没有提交。

另外,我可以有一个空的WTForms吗?下面的代码能工作吗?

空窗体示例:

forms.py

class EmptyForm(FlaskForm):
pass

路线.py

@app.route('/random_route')
def some_route_function()
if request.method == 'GET' :     
form = EmptyForm()
return render_template ( 'random_route.html', form=form )

random_route.html

<form validate="" id="random_route" method="GET"> 
<!-- Make the secret key work -->
{{form.csrf_token}}
<h1>Random message this is the only thing the form does. </h1>
</form>  
I also have a layout.hmtl which contains the html.

跨站点请求的工作方式如下:攻击者向用户发送恶意链接,然后用户做一些用户不想做的事情。例如:

假设你的flask应用程序中有一个URL,允许用户更新他们的电子邮件。URL为https://mygreatapp.com/updatemail?email=mail@example.com.

现在,我(攻击者(诱骗您的用户单击以下链接:https://mygreatapp.com/updatemail?email=attacker@attacker.com。由于你登录了你的应用程序,这将起作用,并将你的电子邮件重置为攻击者的电子邮件,然后攻击者可以请求重置密码。

如果您使用CSRF保护,则表单/链接需要一个额外的CSRF令牌,该令牌在每次为用户生成表单时都会新生成。

因此,如果你的用户想更改他们的电子邮件,他们会向你请求emailChangeForm,你会用随机生成的csrf令牌"abcdefg"将其发送给他们。现在,当用户发回表格时,它不仅必须包含更新的电子邮件地址,还必须包含您随表格发送的确切csrf令牌。如果没有,您就知道不是用户填写了表格。

最新更新