我的一个视图中有一个网格,并在其中创建了一个Actions列。在该列中是用于编辑和删除的按钮。当用户单击删除按钮时,我使用jQuery访问其click事件。
以下是我的ajax删除内容:
$(document).on('click', '.btnDeleteRole', function (e) {
e.preventDefault();
if (confirm("Are you sure you want to delete this record?")) {
var $this = $(this); //store $(this) to a variable
var roleId = $this.attr('data-role-Id');
$.ajax({
type: "POST",
url: "/admin/roles/delete",
data: { id: roleId },
dataType: "html",
success: function (data) {
// rebind kendo grid
}
});
}
});
以下是我的删除操作方法:
// POST: Roles/Delete/5
[Route("roles/delete")]
[HttpPost]
public async Task<IActionResult> RoleDelete(string id)
{
IdentityRole role = await _roleManager.FindByIdAsync(id);
await _roleManager.DeleteAsync(role);
return RedirectToAction("RoleIndex");
}
由于删除按钮不是表单的一部分,因此我无法在ActionMethod上面使用AntiForgeryToken注释。
删除此类物品是否安全?
答案 0 :(得分:4)
不,这不安全。如果您不使用antiforgerytoken,您将面临CSRF攻击,如here所述。
您只需要在网格删除帖子中发送主表单隐藏令牌。每行不需要一个令牌,因为您拥有表单的隐藏令牌和cookie的令牌,这就是您所需要的。