C# 在ASP.NETMVC中删除记录的安全方法
我想从我的ASP.NETMVC5网站上删除一个产品。我想知道添加C# 在ASP.NETMVC中删除记录的安全方法,c#,asp.net-mvc,asp.net-mvc-5,antiforgerytoken,C#,Asp.net Mvc,Asp.net Mvc 5,Antiforgerytoken,我想从我的ASP.NETMVC5网站上删除一个产品。我想知道添加[AntiForgeryToken]和[Authorize]是否足以确保删除操作的安全 查看 <p>Delete: @Model.Name</p> @using (Html.BeginForm("Delete", "ProductController", FormMethod.Post, new { ProductId = Model.ProductId })) { @Html.AntiForg
[AntiForgeryToken]
和[Authorize]
是否足以确保删除操作的安全
查看
<p>Delete: @Model.Name</p>
@using (Html.BeginForm("Delete", "ProductController", FormMethod.Post, new { ProductId = Model.ProductId }))
{
@Html.AntiForgeryToken()
<button type="submit">Delete</button>
}
删除:@Model.Name
@使用(Html.BeginForm(“Delete”,“ProductController”,FormMethod.Post,new{ProductId=Model.ProductId}))
{
@Html.AntiForgeryToken()
删除
}
控制器
[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public ActionResult Delete(long ProductId)
{
/* Do I need to check if the logged in User has permission to delete the product?
var product = ProductRepository.Get(Id);
if (product.Creator == User.Identity.GetUserId<long>())
{
ProductRepository.Delete(ProductId);
}
*/
// or, can I avoid the trip to DB and just delete the record?
ProductRepository.Delete(ProductId);
}
[HttpPost]
[授权]
[ValidateAntiForgeryToken]
公共操作结果删除(长ProductId)
{
/*我是否需要检查登录用户是否具有删除产品的权限?
var product=ProductRepository.Get(Id);
if(product.Creator==User.Identity.GetUserId())
{
ProductRepository.Delete(ProductId);
}
*/
//或者,我可以避免去DB而直接删除记录吗?
ProductRepository.Delete(ProductId);
}
场景:一名黑客在我的网站上注册并创建一个有效帐户。现在,黑客查看自己的产品,显然他有一个反伪造令牌。他现在可以在浏览器中更改ProductId并发布删除其他人产品的请求吗 简短的回答。这还不够 Antifforgery令牌只是说发出原始页面请求的人就是进行更新的人 基本authorize属性只是验证用户是否已登录 您需要的是数据安全性。在微软自己的网站上有一个这样的例子 正如您在上一段中所述,黑客可以注册一个帐户,创建他们自己的产品列表,并根据您在url中显示的内容,猜测其他合法记录以进行编辑 假设你有一个url 阻止用户/黑客猜测的是什么 或 如果没有数据级别的安全性,即用户可以或不能访问/更新哪些记录,则会遇到恶意用户可以查看或编辑各种信息的情况 这正是我们发现的公开其他客户端信息的场景 从文章中 Hermansen已经注册,可以在任何时候收到新交易的电子邮件提醒 发布到他的帐户,他注意到网站为他分配了一个警报 具体的“事件编号”。凭直觉判断这些事件编号 可能按顺序分配,而其他记录可能 如果直接请求,可用,Hermansen请求相同的页面 再次但首先在他的浏览器中编辑网站的代码,以便 事件编号减少了一位数
非常感谢@Fran。所以,如果我使用第一种方法(检查Product.Creator),那么就足够了?这取决于您的场景。如果用户只能编辑其记录,则为“是”。您可能会遇到这样的场景:一个人可以将访问权限委托给另一个用户。您可能有一位经理,可以查看其直接员工的所有记录。这个问题没有标准答案。