首页新闻找找看学习计划

asp.net mvc 删除操作的一个问题。

0
[待解决问题]
  public ActionResult Delete(int id = 0)
        {
           //..具体的删除操作
        }

假如在 Homecontroller 中有个这么一个action 传入id就直接删除数据,按这种方式的话就会出现一个问题,只要人家知道你这个controller和action名称,估计就可以把你数据都删除掉。比如人家直接输入http://www.xxx.com/Home/Delete/2 类似这样就把第二个数据删除掉了。请问这样有没有什么比较好的方式防止这样的问题。

再假设一种场景。有一个表订单A中有一个字段是UserId, 这个id是用户的id。订单表里面可能有很多用户有订单,如果按上面的这种删除方式,可能一个人就把所有用户的订单都给删除掉了。要解决这样的问题,请问如果处理较好。当然有想过进页面的时候将用户id存入页面的隐藏域中,然后删除的时候在将隐藏域中的用户id和数据Id都传入对应的action ,然后在验证要删除的id是否属于隐藏域中的用户id。表面上看起来好像是解决了问题,其实问题还是没解决,很多专业的人,是可以通过工具来修改页面中隐藏域或者是其他控件的值,这么看来的话,好像还是没有解决问题。有没有高手有较好的方法。

yzy的主页 yzy | 菜鸟二级 | 园豆:309
提问于:2014-07-03 00:25
< >
分享
所有回答(5)
0

就是权限管理问题,去院子里找下权限管理的实现方案看看吧

吴瑞祥 | 园豆:28736 (高人七级) | 2014-07-03 07:26
0

 

你只要明白HTTP是基于TCP的,假如我用TCP去连接你的HTTP服务器,HTTP的协议头我都是可以随便改的。你只能通过登陆的方式来验证该当前登陆的用户是否有权限来进行删除。毕竟Session保存在服务器,客户端又不能改服务器端的数据。

 MVC默认Filter不是可以轻松解决这个问题么?AuthorizeAttribute,继承重写一下方法就可以了,具体搜索一下就明白了。

番茄炒西红柿 | 园豆:177 (初学一级) | 2014-07-03 08:15
0

这要看对安全性的要求了,一般判定权限的话是无法删除记录的,但是如果获取了权限那就可以了。如果真是要提高安全,用任何技术手段,都无法弥补用户的大意,而且这种删除方式并不违规,是正确的删除方式,这样子做没有任何侵入的特征。

佩恩六道 | 园豆:199 (初学一级) | 2014-07-03 09:00
0

你删除前先判断一下这个用户是否有删除这条数据的权限在删除!

刘宏玺 | 园豆:14004 (专家六级) | 2014-07-03 10:14
0

你可以考虑一下权限管理,删除操作至少应该是已注册用户才能进行的,每次删除之前判断一下用户Id,并且当前当前删除的订单或者数据的Id是不是属于当前这个用户的,是的话再进行删除,这样能避免误删除其他用户的数据。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-03 11:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册