如果 cookie 设置了 HttpOnly 标头,如何在 JavaScript 函数中检索防伪令牌?

问题描述

我在 ASP.NET MVC 4.7 框架上编写了一个 Web 应用程序,我正在尝试将防伪令牌正确添加到我的 JavaScript AJAX 调用中。

我正在学习 Owasp 和 Microsoft 文档。 根据微软的这篇文章,在 AJAX 中防止 CSRF 的最好方法是使用防伪令牌。

https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks

目前在我的应用程序中,当有表单提交时,会调用一个 JavaScript 函数来处理对我的 API 的 AJAX 调用。如果 JavaScript 被禁用,则会向 C# 函数发出常规 http 请求,该函数也使用 AJAX 调用 API。

本文展示了一些 C# 代码,它可以检索令牌,以便通过 AJAX 调用传递令牌。我在这里遇到的问题是,为了混合 C# 和 JS 函数,他们使用了 razor 语法和内联脚本。

出于安全原因,我不使用内联脚本,而且我还为所有 cookie 设置了 HttpOnly 标头。因此,为了避免内联脚本,这些 JavaScript 函数在单独的 .js 文件中运行,这意味着我不能使用任何 C# 代码来检索令牌。此外,由于 cookie 上的 httpOnly 标头,我不相信我可以使用纯 javascript 检索令牌。

在 c# 实现中传递和验证令牌工作正常,但我没有看到在 javascript 中执行此操作的方法

谁能告诉我我错在哪里?或者我缺少什么?

如果对此无能为力,那么我可能不得不完全删除 JavaScript 提交功能,但这意味着客户端验证将受到限制。

提前感谢您的任何帮助。

(P.S.)出于两个原因,我不能将令牌传递给 JavaScript 函数

一,我不想在网页中将令牌作为纯文本参数传递,因为这样令牌在 html 中将始终是纯文本。

第二,我根本没有使用“OnClick”,因为它被视为内衬脚本。这是对侦听器事件的处理,因此无论如何我都无法准确地将参数传递给该函数

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)