2012-03-08 65 views
3

我目前正在使用ASP .Net MVC3构建电子商务网站。在结帐过程结束时,我有一个视图,显示订单摘要,包括客户的联系信息(姓名,电子邮件,地址,联系方式等)。公开用户信息时的安全性

我在查询字符串中使用GUID,用于从数据库中检索信息并将其显示在页面上(例如www.site.com/Checkout/Complete?ID={GUID)。这在安全性方面被认为是不好的做法?有人需要猜测GUID才能访问任何客户信息,这看起来几乎是不可能的。在显示信息之前,我是否应该努力认证用户?

非常感谢

回答

1

用户应进行身份验证,您的代码应检查当前登录的用户是否有权访问该信息。

2

GUID本身是非常难以猜测或蛮力。 125个可能的GUID有2个(不是2^128,因为有些位有fixed meaning)。

较大的问题将得到

  • 许多浏览器暴露浏览器历史记录(见hereherehere)无关的网页。
  • 如果用户书签结账页面,他的特殊GUID可以从书签中检索。
  • 中间人攻击(尽管大概您在这一点上使用SSL,那么问题就更少了)。

如果目的是允许某人回到他们先前放置的订单,我会允许GUID预先填充用户名以方便使用,但仍需要密码。

如果在浏览会话期间发生这种情况,并且出于某种原因,您需要一个GUID(不能将该信息存储在用户的会话中?),我倾向于为此创建一次性GUID,而比暴露用户的唯一ID。将一次性GUID映射到服务器代码中用户的实际唯一ID(可以是实际GUID的盐味散列,或可映射到映射表中)。

+0

谢谢埃里克。一些有用的信息,非常感谢。 – Tas 2012-03-09 01:54:09

相关问题