起初,我只使用该Html.ActionLink
方法创建删除链接。但后来我看到一篇文章说那是错误的。并且不应该那样使用。然后建议Master -> Detail方式。但这似乎很愚蠢。应该有一种方法让我拥有一个删除链接(带有“你确定”提示)并且仍然不是安全漏洞。正确的?
3 回答
是的,使用 GET 方法删除数据是不好的做法。您需要使用 POST 方法,它可以完成,例如使用表单或 jquery/javascript。但请注意,如果您使用带有附加提示的简单链接,用户可以单击中心按钮并删除数据或禁用 javascript。这也是一个安全问题,有人可以给你链接,你从服务器中删除一些数据。
例子:
<a href="/controller/delete/1" onclick="$.post(this.href); return false;">Delete</a>
如果服务器获取到 /controller/delete/x 的 GET,则提供带有 POST 表单的确认页面(在此表单上,我们放置了两个按钮Yes
和No
,第一个按钮提交带有隐藏字段的表单)。如果服务器收到 POST(或者可能是 DELETE)请求,则执行删除。
该问题与链接或 ActionLink 或类似内容无关。问题是您不应该有在 HttpGet 请求上删除的操作方法。
至于为什么你不应该这样做。想象一下,您的老板在您的在线员工档案中输入了谴责。如果您碰巧知道这个应用程序使用Get请求删除记录,那么您只需创建一个特制页面,其中img标签包含删除您谴责的URL,然后将其放在公司主页上。最终,有权删除这些条目的人会进入网页并噗嗤……你有一个明确的记录。
这可能看起来并不那么糟糕。你只是提高了你的地位。但是想象一下,你的同事生你的气,他知道一个类似的技巧,可以让他欺骗你的老板降低你的工资。
不再那么好笑了。
允许这些类型或操作是不安全的,因为它们可以在用户甚至不知道他们在做什么的情况下被触发。
在下面的文章中,他们描述了一种很好的方式来做你正在寻找的事情: Simple jQuery Delete Link For ASP.NET MVC。
但我认为你真正寻找的替代方法是这个帖子: ASP.NET MVC Delete ActionLink with confirm。
所以你有两个选择,我希望它对你有帮助。