我正在将安全性应用于我的 .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);
}
});
});
在我的控制器中我写了
[AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken]
public JsonResult getCurrentLanguage(string id)
{
return new JsonResult
{
Data = "mr"
};
}
这对我来说很好,但我有 2 个问题
Q1。这是正确的方法吗?如果我看到页面源代码,我发现了这段代码
<input name="__RequestVerificationToken" type="hidden" value="WFd+q5Mz0K4RHP7zrz+gsloXpr8ju8taxPJmrLO7kbPVYST9zzJZenNHBZqgamPE1KESEj5R0PbNA2c64o83Ao8w8z5JzwCo3zJKOKEQQHg8qSzClLdbkSIkAbfCF5R6BnT8gA==" />
但是当我创建外部 html 文件并复制 __RequestVerificationToken 的值并传入 ajax 调用时,我收到此错误
A required anti-forgery token is not provided 或无效。
然后
是 Q2。运行时如何知道此页面正在提供复制的 __RequestVerificationToken?