3

我已经看到了许多扩展CreateConnectionIdsignalR 集线器类的示例,例如:

http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances/

在登录时存储用户,然后按需推送数据

但是将每个用户的 connection_id 更改为他的 UserId(请记住,我使用的是开箱即​​用的标准 asp 会员提供程序)是否会构成安全威胁?我可以看到这样做有多好,因此我不必保留从用户到 connection_id 的内部映射,但我还认为如果我将其存储在用户浏览器上的 cookie 中,它可能会带来安全威胁。

4

2 回答 2

3

不,它不安全,最终会破坏 SignalR。

原因是如果您使用用户的数据库 ID 并将其存储在 cookie 中,当您在浏览器中打开第二个选项卡时将生成相同的连接 ID(因为相同的 cookie 将被发送到服务器)。

这显然很糟糕,一旦您打开两个选项卡或浏览器窗口,就会破坏 SignalR,这在您引用的文章中没有提到。此外,正如 Icarus 所描述的,人们可以更改 cookie 并接收其他用户的消息。

更好的方法是:保留默认的 GUID 连接 ID 生成器,而是在启动连接后将连接添加到由您自己的 ID(例如数据库 ID 或电子邮件地址)标识的组。这样您就可以调用Clients[emailAddress].doSomething()并将其广播到该用户的所有打开的选项卡。

于 2012-08-08T18:50:59.630 回答
0

我会冒险回答并说是的,这看起来是个坏主意,因为 cookie 很容易被操纵,并且用户可能会将其更改为其他一些随机 id 并开始接收不适合他的消息/数据。

于 2012-08-08T17:31:42.537 回答