Я реализую веб-уведомления для веб-приложения Django / Python.
Одним из требований является регистрация акта «получения уведомления» целевым пользователем.
Для регистрации этой метрики я использую 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.');
}
});
}
Это достаточно просто.
Проблема в том, что view
на стороне сервера, которая находится на приемной стороне этого запроса POST, ожидает csrf token
, чтобы гарантировать, что это не атака Cross-Site Request Forgery
.
Однако в этом сценарии нет объекта document
, из которого я мог бы извлечь токен csrf. Пользователь, получающий уведомление, вероятно, не сможет открыть веб-приложение. Ergo, я не могу запустить что-то вроде следующего:
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 и находится вне его глубины. Извиняюсь за вопрос нуба (если он есть).