none
Route Ocultar URL RRS feed

  • Pergunta

  • Olá,

    eu estou com um problema de segurança ao editar uma página em uma aplicação MVC4 c#.

    Como poderia fazer para não mostrar ao usuário o "codigo da URL:http://localhost:3055/Login/Edit/4?" ?

      <form action="@Url.Action("Edit", "Login", new {id=@ViewBag.id})" method="get">
              @*<input type="text" value="@ViewBag.id" />*@
                <label>Alterar Login:...</label>
                <input type="submit" value="Entrar" class="btn btn-primary" />
            </form>

     No meu arquivo RouteConfig.cs eu tenho o seguinte código:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
    
    namespace OG
    {
        public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                    namespaces: new[] { "OG.Controllers"}
                );
            }
        }
    }


    • Editado Wilson Boris sexta-feira, 2 de outubro de 2015 19:48 Alteração de conteúdo
    segunda-feira, 28 de setembro de 2015 21:15

Respostas

  • Wilson Boris,

    O usuário no máximo pode alterar a senha e o e-mail, e isso pode ser utilizado com a sessão aberta por esse usuário que no seu código em si não precisa passar nenhum url com paramentos, mas, sim um endereço no qual ele vai alterar e gravar as informações.

    Quando o usuário está logado, você consegue resgatar seus dados facilmente pela Sessão ou Cookie ou o metodo que tu utiliza para autenticação.


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta Wilson Boris segunda-feira, 5 de outubro de 2015 19:43
    segunda-feira, 5 de outubro de 2015 19:09

Todas as Respostas

  • Envie a requisição a essa página via POST!

    Fulvio Cezar Canducci Dias

    segunda-feira, 5 de outubro de 2015 14:24
  • Obrigado pelo retorno Fúlvio,

    Acho que não compreendi corretamente, seria isto?

    <form action="@Url.Action("Edit", "Login")" method="post">
                <input type="hidden" value="@ViewBag.id" />
                <label>Alterar Login:...</label>
                <input type="submit" value="Entrar" class="btn btn-primary" />
     </form>


    CONTROLLER:

     [PermissoesFiltro(Roles = "Administrador, Profissional, Cliente")]
             public ActionResult Edit(int id=0)
            {
                Login login = db.Login.Find(id);
                if (login == null)
                {
                    return HttpNotFound();
                }
            
                     ViewBag.cod_Prop = new SelectList(db.PF, "id", "nome", login.cod_Prop);
                return View(login);
            }
    
            //
            // POST: /Login/Edit/5
    
            [HttpPost]       
            [PermissoesFiltro(Roles = "Administrador, Profissional, Cliente")]
            public ActionResult Edit(Login login)
            {
                if (ModelState.IsValid)
                {
                    db.Entry(login).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index", "Home");
                }
              
                  ViewBag.cod_Prop = new SelectList(db.PF, "id", "nome", login.cod_Prop);
                return View(login);
            }



    • Editado Wilson Boris segunda-feira, 5 de outubro de 2015 15:05 erro
    segunda-feira, 5 de outubro de 2015 14:53
  • Bom depende!

    Mas se você não quer que apareça seria por POST! e colocando os itens em campos hidden.


    Fulvio Cezar Canducci Dias

    segunda-feira, 5 de outubro de 2015 15:19
  • Fúlvio, não estou entendendo como fazer isto.

    Como ficaria o Controller HttpGet e HttpPost ?


    segunda-feira, 5 de outubro de 2015 17:16
  • Na minha visão teria dois HttpPost sendo nomes diferentes! um para resgatar a informação e o outro para Gravar as modificações ...

    Só devo lembrar que estou respeitando a sua pergunta, não quer dizer que eu faria assim!


    Fulvio Cezar Canducci Dias


    segunda-feira, 5 de outubro de 2015 18:40
  • Entendo, mas qual seria a sugestão para que um usuário possa alterar seu login, sem que retorne o id do usuário?

    Tem algum exemplo?

    segunda-feira, 5 de outubro de 2015 18:49
  • Wilson Boris,

    O usuário no máximo pode alterar a senha e o e-mail, e isso pode ser utilizado com a sessão aberta por esse usuário que no seu código em si não precisa passar nenhum url com paramentos, mas, sim um endereço no qual ele vai alterar e gravar as informações.

    Quando o usuário está logado, você consegue resgatar seus dados facilmente pela Sessão ou Cookie ou o metodo que tu utiliza para autenticação.


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta Wilson Boris segunda-feira, 5 de outubro de 2015 19:43
    segunda-feira, 5 de outubro de 2015 19:09
  • Valeu Gigante, obrigado por mais essa.

    Adotei a tua sugestão. 100%.

    segunda-feira, 5 de outubro de 2015 19:43