Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何确保我的asp.net mvc web应用程序中的攻击者用户未修改对象ID_Asp.net Mvc 3_Security - Fatal编程技术网

Asp.net mvc 3 如何确保我的asp.net mvc web应用程序中的攻击者用户未修改对象ID

Asp.net mvc 3 如何确保我的asp.net mvc web应用程序中的攻击者用户未修改对象ID,asp.net-mvc-3,security,Asp.net Mvc 3,Security,我有两个对象具有一对多关系LabTest和LabTestDetail。当我想添加一个新的LabTestDetail对象时,我将LabTestID和父ID传递给Ajax.actionlink中的LabTestDetail创建操作方法,如下所示 @Ajax.ActionLink("+ Add New Lab Test Detail", "Create", "LabTestDetail", new { labtestid = Model.LabTestID }, new Aj

我有两个对象具有一对多关系LabTest和LabTestDetail。当我想添加一个新的LabTestDetail对象时,我将LabTestID和父ID传递给Ajax.actionlink中的LabTestDetail创建操作方法,如下所示

@Ajax.ActionLink("+ Add New Lab Test Detail",
      "Create", "LabTestDetail",
      new { labtestid = Model.LabTestID },

new AjaxOptions
{

    InsertionMode = InsertionMode.Replace,
    HttpMethod = "Get",
    UpdateTargetId = "replace",
    LoadingElementId = "progress"
})
LabTestDetail创建操作方法如下所示;其中,我将labtestid的值存储在viewbag中:-

然后在创建视图上,我将Viewbag的值存储在隐藏的html字段中,如下所示:-

<input type= "hidden" name = "labtestid" value = @ViewBag.labtestid />
[Authorize(Roles = "Doctor")]    
[HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Create(LabTestDetail ltr, int labtestid)
            {
                try
                {
                    if (ModelState.IsValid)
                    {
                        ltr.LabTestID = labtestid;
                        repository.AddLabTestDetail(ltr);
                        repository.Save();
                        return PartialView("_datails", ltr);
                    }
                }
    //code goes here
当我测试labtestid时,上面的操作对我来说很好,,,但我最关心的是如何确保labtestid的值在以下操作期间没有被攻击者修改:-

当我将labtestid值从ajax.action链接传递到createaction方法时

当我将labtestid值作为视图包传递时

最后,当我将labtestid值赋给html隐藏字段时

致意 提前感谢您的帮助。
BR

如果您使用身份验证,并且只有经过身份验证的用户才能执行这些操作,那么在应该执行更新的操作中,您可以验证当前经过身份验证的user.Identity.Name是否是实验室测试的所有者。要实现这一点,意味着您需要将这些实验室测试ID与用户关联。

是的,在操作方法“我更新我的原始代码”之前,我正在使用[AuthorizeRoles=Doctor],但是任何医生都可以添加LabTestDetails,而不管他是否是LabTest对象的所有者。但我担心的是,如果我的应用程序允许专业攻击者修改ID值,那么这可能会导致我可能不知道的安全问题。。所以我想防止攻击者修改ID只是为了给我的应用程序提供一个新的安全层,那么有没有办法做到这一点??
[Authorize(Roles = "Doctor")]    
[HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Create(LabTestDetail ltr, int labtestid)
            {
                try
                {
                    if (ModelState.IsValid)
                    {
                        ltr.LabTestID = labtestid;
                        repository.AddLabTestDetail(ltr);
                        repository.Save();
                        return PartialView("_datails", ltr);
                    }
                }
    //code goes here