Может ли хакер изменить любые параметры, отправленные как часть вызова Ajax.ActionLink - PullRequest
1 голос
/ 18 февраля 2012

У меня есть следующая ссылка Ajax.action внутри представления, чтобы добавить ответ на вопрос: -

 @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); } 

поэтому мой вопрос: сможет ли хакер изменить параметр new { questionid = question.QuestionID},, отправленный по ссылке ajax? и если да, как я могу избежать этого. BR

Отредактировано: - я делаю следующую проверку, используя вспомогательный метод (IsauthorizedBy) в методе пост-действия, чтобы проверить, авторизован ли пользователь на вопрос или нет: -

            [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);}

так будет и с хакером, который попытается изменить идентификатор вопроса и ответить на вопрос, на который он не уполномочен отвечать. BR

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Да, но вы хотите убедиться, что на стороне сервера у них есть доступ к этому вопросу, запросив свои разрешения и определенную схему базы данных, обеспечивающую им доступ к этому.Если это невозможно, вы можете использовать Html.AntiModelInjectionFor от mvcsecurity.codeplex.com плюс [ValidateAntiModelInjection ()]

0 голосов
/ 18 февраля 2012

Вы никогда не доверяете ничему со стороны клиента. Все может быть изменено в пути, либо в скриптах, либо в сети.

Поскольку это только идентификатор, вам нужно быть осторожным и делать дополнительные проверки на сервере

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...