MVC保护访问某些操作

时间:2014-01-30 13:30:56

标签: action asp.net-mvc-5

我对某些操作访问有疑问,我不是在这里谈论授权等,而是更多关于直接访问操作的信息。

基本上我有2个问题,1个一般问题和1个上下文:

情境成像我有一个动作:MyArticles / DeleteArticle / id

1)如果有人将这个网址与正确的ID删除文章,我怎么能防止这种情况?我怎么能说它只能用于我网站上的按钮?这个动作应该是获取还是发布? 此刻我使用$ .ajax和GET方法......

2)现在想象我有很多人,如果所有人都注册了,他们可以删除对方的文章,如果我想避免这种情况并让用户只删除他们自己的文章,因为此时例如如果他们可以猜出他们可以直接使用id访问动作的ID并将其删除。

有人可以提供解释和一些提示吗?

2 个答案:

答案 0 :(得分:1)

  

我不是在这里谈论授权等等。

是的,你是。删除文章的授权应该在操作本身内进行,调用代码或显示操作链接的任何UI都不负责。

  

我怎么能说它只能用于我网站上的按钮?

我认为任何方法都会使问题变得非常复杂。了解HTTP请求的工作方式......您的应用程序不会向操作发出请求,用户。他们这样做(在一般情况下)通过单击应用程序提供的界面上的链接,但请求本身来自用户。 (好吧,来自用户的网络浏览器,这是他们无法控制的,而不是你的。)

最直接的方法是将授权封装在动作本身中(或者更好的是,在动作调用的模型功能中......但从逻辑上讲,它仍然是正在执行的“请求”的一部分)。 / p>

当您公开一个并非每个人都应该能够调用的功能时,请将授权放在功能本身而不是调用它的UI上。这样,无论如何调用它,它始终保持授权,而不是仅仅假设某个其他组件维护它。

答案 1 :(得分:0)

对于USER,你在MVC中有很多控制权。要允许用户只删除自己的工作,您必须记住在数据库中写了什么。如果是这种情况 - 并且您知道,那么在操作开始时使用简单的if语句就可以了。