我有一个应用程序,每个用户必须接收仅与他们自己相关的通知.
为此,我为每个用户创建了一个唯一的频道名称.当用户使用javascript从浏览器登录时,我订阅了此频道.
pubnub = PUBNUB.init({
subscribe_key : '<subscriber-key>'
});
pubnub.subscribe({
channel: "<unique-channel-name>",
})
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果有人获得用户唯一频道的名称,他们可以设置自己的pubnub客户端并在没有任何授权的情况下接收通知吗?基本上,保护用户数据的一切都是在页面源代码中公开提供的频道名称和订阅者密钥.我查看了pubnub的访问管理器,但它遇到了同样的问题,不是吗?如果有人打开源代码并复制auth-key,他们可以设置自己的客户端并接收消息吗?
我为每个用户注册时生成并保存了一个频道名称.此名称是随机UUID,如"7304cd62-9ba2-4842-98d8-8a5c8e561275".当我想通知用户时,他们说,他们有朋友请求,我从数据库中提取频道名称并发布通知.每当他们登录时,呈现的页面都使用Ruby将他们的频道名称和我的订阅者密钥注入一个隐藏字段,javascript用它来初始化pubnub.
<%= my_pubnub_subscriber_key %>
<%= current_user.channel.name %>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,使用Access Manager意味着除了频道名称之外我还必须存储一个auth密钥,并授权密钥读取频道.
John
- john-channel
- john-key-authorizing-read-on-john-channel
Jane
- jane-channel
- jane-key-authorizing-read-on-jane-channel
Run Code Online (Sandbox Code Playgroud)
然后,渲染页面将有三个字段来初始化pubnub:
<%= my_pubnub_subscriber_key %>
<%= john-channel %>
<%= john-key %>
Run Code Online (Sandbox Code Playgroud)
最初的问题仍然存在.如果Jane去John的家,打开John主页的源代码,复制3个键,回家并创建自己的客户端,她可以订阅John的通知.我不知道我的通知的接收者是否实际登录或只是复制了密钥.
我的想法是正确的,为了防止这种可能性,我应该只是定期重新生成频道名称或授权密钥,例如当用户退出或每天?
pubnub ×1