Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Estou com dúvida no curso de ASP.NET MVC: Desenvolvendo para Web, no exercício do capítulo Lidando com Formulários e o Cadastro de Produtos.

eu não entendi muito bem qual a utilidade permitir ou bloquear o preenchimento de alguns campos utilizando o model binder.. e tambem não entendi o que aconteceu la no github.. alguém pode por favor me explicar? o link citado no exercicio é esse:

http://blog.caelum.com.br/seguranca-de-sua-aplicacao-e-os-frameworks-ataque-ao-github/
2 respostas
solução

Olá Rafael

Imagine que temos uma aplicação que faz cadastro de usuários onde pedimos por exemplo as informações: nome, email, cpf e senha.

Além disso, nessa aplicação temos uma tela onde o usuário pode alterar suas informações cadastrais, porém ele não pode atalizar o campo CPF. Então podemos fazer um formulário onde vamos permitir apenas a entrada das informações nome, email e senha:

<form action="/Usuario/Altera" method="post">
  <input name="u.Nome"/>
  <input name="u.Email"/>
  <input name="u.Senha" type="password"/>
  <input type="submit"/>
</form>

Agora no controller vamos receber as informações em um usuário:

public class UsuarioController : Controller
{
  public ActionResult Altera(Usuario u)
  {
    // implementação
  }
}

Na implementação do método, podemos por exemplo atualizar todas as informações não nulas que vieram no modelo. Como o formulário não envia o CPF, não atualizaremos essa informação no banco.

Mas o cliente pode modificar o código de um formulário utilizando as ferramentas de desenvolvedor que estão incluidas no navegador. Ele pode por exemplo, inclui no formulário um novo campo com name u.CPF. Quando esse formulário modificado for enviado para o servidor, o objeto usuário que é recebido pelo controller conterá um valor para o CPF e por isso ele será modificado no banco de dados.

Perceba que o problema foi permitirmos o envio de qualquer parâmetro no formulário. Para evitar esse problema utilizamos o BindAttribute para proibir o envio do CPF:

public class UsuarioController : Controller { public ActionResult Altera([Bind(Exclude="CPF")]Usuario u) { // implementação } } ```

Com isso o usuário não terá o cpf preenchido mesmo quando o parâmetro for enviado na requisição.

Olá Rafael

a sua dúvida foi respondida?