我想从ASP.Net MVC 5网站上删除产品。我想知道添加var name = from nm in xelement.Elements("Version")
where (string)nm.Element("Trunk") == ComboBox1.Text
select nm;
和[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>
}
场景:一名黑客在我的网站上注册并创建了一个有效帐户。现在,黑客查看了自己的产品,显然他拥有一个AntiForgeryToken。他现在可以只在浏览器中更改ProductId并发布删除他人产品的请求吗?
答案 0 :(得分:3)
简短回答。这还不够。
反伪造令牌只是说发出原始页面请求的人就是进行更新的人。
基本授权属性仅验证用户已登录。
您正在寻找的是数据安全性。在微软自己的网站上有example个
。您在上一段中所说的,黑客可以注册一个帐户来创建自己的产品列表,并根据您在url中显示的内容猜测其他合法记录也可以编辑
说您有一个网址
https://example.com/product/edit/13
阻止用户/黑客猜测
的原因https://example.com/product/edit/12 要么 https://example.com/product/edit/14
如果在数据级别没有表明用户可以访问或不能访问/更新的记录的安全性,则会遇到恶意用户可以查看或编辑各种信息的情况。
这是FISERV发现公开其他客户信息的确切情况
文章
Hermansen已注册,可以在每次新交易时获取电子邮件警报 发布到他的帐户,他注意到该站点为他的警报分配了一个 特定的“事件编号”。直觉地认为这些事件编号 可能会顺序分配,而其他记录可能是 如果直接请求,则可用,Hermansen请求相同的页面 再次但首先在他的浏览器中编辑了网站的代码,以便他 事件编号减少了一位。