我在asp.net mvc5中有以下操作方法,我定义为ChildActionOnly: -
[ChildActionOnly]
public ActionResult GetChildRecords(int customerid)
我在以下视图中将其称为: -
<div>@Html.Action("GetChildRecords", "Customer", new {customerid = Model.CustomerID})</div>
但我有以下问题: -
我需要在我的子操作方法之前添加[Authorize]注释吗?或者我可以肯定,因为它的父母被授权,所以儿童行动方法也将被授权?
用户或黑客可以直接直接调用ChildActionOnly吗?
用户或黑客可以修改Html.Action参数吗?例如,在下面的html中传递不同的customerid: -
@ Html.Action(“GetChildRecords”,“Customer”,new {customerid = Model.CustomerID})
?
答案 0 :(得分:3)
属性[ChildActionOnly]
的本质是确保仅使用Action
或RenderAction
调用它,并且无法直接从浏览器调用。
对于问题1:如果调用操作已具有[Authorize]
属性,则无需担心
对于问题2:黑客(或任何人)无法直接访问它。
对于问题3:因为他们无法直接调用该动作,所以我不确定是否需要担心。但是在服务器端始终验证您获得的任何输入(表单,查询字符串等)。
答案 1 :(得分:1)
我同意@scartag对问题2和3的回答:
2 - 这是一个子动作,因此无法直接调用
3 - 攻击者无法通过干预来修改参数,因为它们被传递给子操作,因此父操作中的初始验证就足够了。但是,这可能会导致封装不良,因为子操作的某些逻辑可能会泄漏到父级中。
关于问题1,我认为授权儿童行动是一种很好的辩护: