我已经看到许多示例,用于扩展signalR hub类的CreateConnectionId
,例如:
http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances/
Storing User On Login then Pushing Data On Demand
但确实将每个用户的connection_id更改为他的UserId(请记住我正在使用开箱即用的标准asp成员资格提供程序)会造成安全威胁吗?我可以看到这样做会有多好,所以我不必保留用户到connection_id的内部映射,但是如果我将它存储在用户浏览器的cookie中,它也会有安全威胁。
答案 0 :(得分:3)
不是不安全,最终会破坏SignalR。
原因是如果你是使用用户的数据库ID并将其存储在cookie中,当您在浏览器中打开第二个选项卡时,将生成相同的连接ID(因为相同的cookie将被发送到服务器)。
这显然很糟糕,只要您打开两个标签页或浏览器窗口就会破坏SignalR,这在您引用的文章中没有提及。此外,正如Icarus所描述的,人们可以更改cookie并接收其他用户的消息。
更好的方法是:
保留默认的GUID连接ID生成器,然后将连接添加到在开始连接后由您自己的ID(例如,数据库ID或电子邮件地址)标识的组。通过这种方式,您可以调用Clients[emailAddress].doSomething()
并将其广播到此用户的所有打开的标签页。
答案 1 :(得分:0)
我冒险回答并说“是”,这看起来不错,因为cookie可以轻松操作,用户可以将其更改为其他随机ID并开始接收不适合他的消息/数据。