gpt4 book ai didi

security - AntiForgeryToken 是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 06:28:18 24 4
gpt4 key购买 nike

我正在将安全性应用于我的 .net 3.5 mvc2 Web 应用程序。我的网站不包含任何用户身份验证,并且由 .js 文件中的许多 ajax 调用组成

在我的 .aspx 文件中我写道

<%= Html.AntiForgeryToken() %>   

在我的 .js 文件函数中我编写了

$(document).ready(function() {

var token = $('input[name=__RequestVerificationToken]').val();

$.ajax({
url: "/Home/getCurrentLanguage/" + Math.random(),
cache: false,
type: "POST",
async: false,
data: {"__RequestVerificationToken":token},
success: function(data) {
if (data == "mr") {
alert("its Marathi");
} else {
alert("its English huh !!!");
}
return false;
},
error: function(data) {
alert("some Error" + data);
}
});

});

在我的 Controller 中我写了

    [AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken]
public JsonResult getCurrentLanguage(string id)
{
return new JsonResult
{
Data = "mr"
};

}

这对我来说效果很好,但我有两个问题
Q1.这是正确的做法吗?如果我查看页面源代码,我会找到这段代码

<input name="__RequestVerificationToken" type="hidden" value="WFd+q5Mz0K4RHP7zrz+gsloXpr8ju8taxPJmrLO7kbPVYST9zzJZenNHBZqgamPE1KESEj5R0PbNA2c64o83Ao8w8z5JzwCo3zJKOKEQQHg8qSzClLdbkSIkAbfCF5R6BnT8gA==" /> 

但是当我创建外部 html 文件并复制 __RequestVerificationToken 的值并传入 ajax 调用时,我收到此错误
未提供所需的防伪 token 或该 token 无效。然后
Q2。运行时如何知道此页面正在提供复制的 __RequestVerificationToken?

最佳答案

这个“AntiForgeryToken”的存在是为了防止 Cross-Site Request Forgery攻击。如果您的应用程序存在跨站点脚本漏洞,则该系统可能会被攻击者破坏。

此 token 可防止 CSRF 攻击,因为 same-origin policy攻击者可以发送请求,但无法从页面读取 token 以使请求成功(除非他有 xss 漏洞)。

对于 Q2,该值对于每个用户必须是唯一的,因此每次页面加载时都会更新。如果它只是一个静态值,那么它在阻止 CSRF 方面毫无用处,因为攻击者会知道这个相同的静态值。

关于security - AntiForgeryToken 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11722137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com