2013-02-28 27 views
1

页的详细信息,我想通过保险ID到控制器,同时获得保险的细节,它看起来像从查询字符串,而不是控制器:如何通过值id同时获得在MVC

// GET:/保险/详细资料/ 123456789

但出于安全原因,我不想在查询字符串中传递此id号123456789。 有人可以建议我最好的方法。我是MVC的新手。

谢谢

+0

如果你有权访问表单,我会使用'FormMethod.POST',它将发布没有queryString的表单的细节。但实际上如果有人想要修改ID,他们可以很容易地修改HTML来实现这一点。 – Qpirate 2013-02-28 16:04:36

+0

我不确定这是否是一种安全的方式。 – user1882705 2013-02-28 16:11:37

+0

没有办法阻止一个人改变一个网页HTML到客户端,但你可以做的是添加'Authorisation'功能来查看他们是否被允许访问请求的数据,但这是一个不同的方面。如果你要问的是隐藏'QueryString'中的值,那么最好的办法就是'将'Post'后面的值。 – Qpirate 2013-02-28 16:24:12

回答

0

尝试通过POST提交值作为隐藏参数。您需要使用表单来执行POST提交。你不能使用链接。

<form method="POST" action="/Insured/Details"> 
    <input type="hidden" name="insuredid" value="123456789"/> 
    <input type="submit"/> 
</form> 

你会再拿到通过请求参数的值。如果使用Java servlets,它看起来是这样的:

String myInsuredId = request.getParameter("insuredid"); 

我想它会和其他平台类似。

注意:尽管将值作为隐藏参数传递会隐藏数据,但这并不妨碍人们嗅探提交的数据或检查页面的HTML源代码。如果你真的想要这样做,你需要使用某种形式的加密/安全性。尝试查看HTTPS帖子。

0

您需要清理控制器中的输入,例如,如果客户已登录,您可以检查传递给控制器​​的ID是否属于客户。

任何在请求中可传递的内容(无论是POST还是GET)都是可欺骗的。

您还应该考虑通过HTTPS提供页面服务。

E.g. (asp.net MVC/C#)

public ActionResult Details(string id) 
{ 
    if (Check(id) == false) 
    { 
     // Handle invalid input 
     throw new HttpException(404, "HTTP/1.1 404 Not Found"); 
    } 

    // create the model 
    ... 
}