使用提取API发送POST请求时处理CSRF安全性

时间:2019-04-04 16:06:58

标签: javascript service-worker web-notifications

我正在为Django / Python网络应用实现网络通知。

其中一项要求是记录目标用户的“接收通知”行为。

要记录此指标,我正在使用fetch API,如下所示:

function log_notif_reception(status_code) {

  fetch('/1-on-1/push-notif/received/', {
    "method": 'POST',
    "headers": {
      'Accept': 'application/json',
      'Content-Type':'application/json'
    },
    "credentials": 'include',
    "body": JSON.stringify({'status_code':status_code})

  })
  .then(function(response) {
    if (!response.ok) {
      throw new Error('Bad status code from server.');
    }
  });

}

这很简单。

问题在于,此POST请求的接收方在服务器端的view期望csrf token来确保它不是Cross-Site Request Forgery攻击。

但是,在此场景中没有document对象可以从中提取csrf令牌。收到通知的用户可能无法打开Web应用程序。嗯,我无法执行以下操作:

function get_cookie(name) {
  if (!name) { return null; }
  var value = "; " + document.cookie;
  var parts = value.split("; " + name + "=");
  if (parts.length >= 2) return parts.pop().split(";").shift();
}

为避免这种情况,我不得不制作服务器端视图csrf_exempt。我觉得这不是很安全。

所以我想问一下专家,他们将如何处理这种情况的安全性?

顺便说一句,这里的服务器端开发人员不得不涉足JS,而且还不了解他。对于菜鸟问题​​(如果有的话)表示歉意。

0 个答案:

没有答案