当登录用户时(通过open-id),我们创建一个名为“UID”的会话变量,并在其中存储唯一的user-id。稍后我们将检查会话以查看用户是否已登录。我认为这不是正确的方法,但我无法强制团队更改此内容,因为我无法显示如何破解此实现。任何人都可以告诉我为什么(如果是)这个实现是不好的?
答案 0 :(得分:3)
我看不出你应该担心通过客户端漏洞获取服务器端会话值的情况。由于缺乏OpenID的地位,假冒OpenID提供商欺骗用户传递凭证一直存在一些担忧,但通常是没有根据的。
实现似乎可以接受,但鉴于您使用的是ASP.NET,您应该考虑使用IIdentity和ASP.NET OpenID提供程序:
http://code.google.com/p/dotnetopenid/
经过充分测试,并且内置了相当多的安全代码和API支持。
答案 1 :(得分:1)
我的第一个问题是,是什么让你认为这不是正确的方法?
以这种方式存储数据非常常见,安全且专门针对用户进行本地化。如果您不喜欢将会话用于其他原因,例如在多个服务器上处理会话或者必须将会话序列化/反序列化到数据存储(假设是非内存会话)那么这是一个不同的争论,但安全部分不应该'是问题。
还要记住使用会话的简单性。它使数据访问您需要在整个应用程序中持续,标准和一致地访问的用户特定数据。
根据评论编辑:
当我开始使用MVC时,我也想知道同样的事情,它似乎完全没问题。我找不到任何违背这个想法的东西。我甚至问过this question,因为我的自定义授权属性必须访问会话,并且我在其中存储了特殊的角色类型,即开箱即用的授权不太合适。
答案 2 :(得分:0)
正如Nissan Fan所说,我认为你没有理由担心被利用的服务器端会话值。
出于好奇,你有什么理由认为这不是正确的方法?