繁体   English   中英

如果我不使用表单标签,是否需要使用 csrf 保护?

[英]Do I need to use csrf protection if I am not using form tags?

我正在制作一些 forms 来申请组织成员资格。 我没有使用表单标签,它只是一堆输入(字符串、选择和检查),信息通过 ajax 发送到 Flask 服务器。 这样安全吗? 我没有使用 forms 所以我不确定如何处理 csrf 值

问题

考虑一些恶意网站,它所做的只是:

window.onload = function() {
  var body = {
    action: "payment", amount: 500
  }
  $.ajax("https://your-api.com", body)
}

因此,如果您登录您的站点并访问此页面,则会成功地代表您发出请求。

解决方案

为了缓解这种情况,请添加一个csrf参数,该参数仅对您的服务器及其服务的页面已知。 您渲染的 HTML 页面将如下所示:

var csrf = "secret-8-digits-value-from-session-of-user";

// and on any request add this param
var body = {
  action: "payment", amount: 500, csrf: csrf
}
$.ajax("https://your-api.com", body)

// now server will verify `csrf` from *request* against `csrf` from *session*
// if no match, then reject the request.

现在您可以再次访问恶意网站。 他们不知道您的 session csrf代码。 所以他们的恶意代码将不起作用,因为您的服务器会拒绝请求中的csrf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM