黑客可以修改作为Ajax.ActionLink调用的一部分发送的任何参数

时间:2012-02-18 02:05:23

标签: asp.net-mvc-3 security jquery

我在视图中有以下Ajax.actionlink以在问题下添加答案: -

 @Ajax.ActionLink("Add Answers",
 "Create", "Answer",
new { questionid = question.QuestionID},

new AjaxOptions
{

    InsertionMode = InsertionMode.Replace,
    HttpMethod = "Get",
    UpdateTargetId = "removetable"
})

while会调用以下操作方法: -

public ActionResult Create(int questionid)
    {

        ViewBag.IsRight = new SelectList(repository.FindAllAnswerDescription().ToLis(), "IsRight", "description", 1);
        ViewBag.questionid = questionid;
         Answer answer = new Answer();
         return PartialView("_answer",answer); } 

所以我的问题是黑客是否能够修改ajax链接发送的new { questionid = question.QuestionID},参数?如果是,我怎么能避免这种情况。 BR

编辑: - 我正在使用帮助方法(IsauthorizedBy)对post action方法进行以下检查,以检查用户是否有权回答问题: -

            [HttpPost]
            public ActionResult Create(int questionid, Answer a)
            {
    q = repository.findquestion(questionid);
    if ((q == null) ||  (!q.IsauthorizedBy(User.Identity.Name))){
return ("error");}
                if (ModelState.IsValid)
                {
                repository.AddAnswer(a);
                    repository.Save();
                    return PartialView("_details",a);
                }
return(a);}

因此,如果黑客会尝试修改问题ID并回答他无权回答的问题,那么它是否会受到影响? BR

2 个答案:

答案 0 :(得分:2)

是的但你想确保在服务器端通过查询他们的权限和一些数据库方案来确保他们有权访问这个问题。如果它不可行则可以使用 来自的Html.AntiModelInjectionFor  mvcsecurity.codeplex.com加 [ValidateAntiModelInjection()]

答案 1 :(得分:0)

你永远不会相信来自客户端的任何东西。无论是在脚本中还是在网络上,一切都可以改变。

由于它只是一个id,你需要小心并在服务器上做额外的检查