gpt4 book ai didi

pubnub - 安全的 Pubnub 订阅者 key 和 channel 名称

转载 作者:行者123 更新时间:2023-12-04 15:10:59 25 4
gpt4 key购买 nike

我有一个应用程序,每个用户必须接收仅与他们自己相关的通知。
为此,我为每个用户创建了一个唯一的 channel 名称。当用户使用 javascript 从浏览器登录时,我订阅了这个 channel 。

pubnub = PUBNUB.init({
subscribe_key : '<subscriber-key>'
});

pubnub.subscribe({
channel: "<unique-channel-name>",
})
我的问题是,如果有人获得了用户唯一 channel 的名称,他们可以设置自己的 pubnub 客户端并在没有任何授权的情况下接收通知吗?基本上, 保护我的用户数据的只是 channel 名称和订阅者 key ,它们在页面 的源代码中公开可用.我查看了 pubnub 的访问管理器,但它也遇到了同样的问题,不是吗?如果有人打开源代码并复制 auth-key,他们可以设置自己的客户端并接收消息吗?
编辑:附加信息
我在每个用户注册时为他们生成并保存一个 channel 名称。此名称是一个随机 UUID,例如“7304cd62-9ba2-4842-98d8-8a5c8e561275”。当我想通知用户,比如说他们收到了好友请求时,我从数据库中提取 channel 名称并发布通知。每当他们登录时,呈现的页面使用 Ruby 将他们的 channel 名称和我的订阅者 key 注入(inject)一个隐藏字段,javascript 使用该隐藏字段来初始化 pubnub。
<%= my_pubnub_subscriber_key %>
<%= current_user.channel.name %>
在这种情况下,使用 Access Manager 意味着除了 channel 名称之外,我还必须存储一个身份验证 key ,并授权该 key 读取 channel 。
John
- john-channel
- john-key-authorizing-read-on-john-channel

Jane
- jane-channel
- jane-key-authorizing-read-on-jane-channel
呈现的页面将具有三个字段来初始化 pubnub:
<%= my_pubnub_subscriber_key %>
<%= john-channel %>
<%= john-key %>
原来的问题依然存在。如果 Jane 去 John 家,打开 John 主页的源代码,复制 3 个 key ,回到家创建自己的客户端,她可以订阅 John 的通知。我不知道我的通知的接收者是否实际登录或只是复制了 key 。
我的想法是否正确,为了防止这种可能性,我应该简单地定期重新生成 channel 名称或身份验证 key ,例如当用户注销时或每天?

最佳答案

使用 ACL/访问管理保护 PubNub 上的数据流

💡 Check the latest docs using PubNub Access Manager - https://www.pubnub.com/docs/security/access-control


您还想保护 PubNub 订阅者 key 和 channel 名称。
通过每个连接级别的细粒度读写访问控制,您
可以为用户、设备和 channel 提供授权和访问控制。

Good Part - With PubNub Access Management and ACL you canprevent someone from setting up their own PubNub clientand receive the notifications without any authorization.


这是通过 PubNub auth_key 完成的。这是一个经过身份验证的访问 token
由您的服务器管理。本质上你想要
Mitigate and Prevent Subscription Sharing用于 PubNub 数据流上的宝贵数据。
保密和安全 - 实时数据流的访问控制
您必须善待您的 PubNub auth_key就像你想要一个 secret 一样
仅供用户使用。
这就像一个允许访问数据流的 session key /ID,
类似于 Netflix、Spotify、Facebook 和 Gmail
提供安全的访问层。
这就是您的 JavaScript 应具有的安全访问控制外观。

Wohhhh Note - There are no access keys stored in the JavaScript file.

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Get User Access Keys from Your Server
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
console.log('getting user login information');
get_user_access( 'https://myservers.com/user/login/', function(user) {
var pubnub = PUBNUB({
subscribe_key : user.subscribe_key,
auth_key : user.auth_key
});

ready( pubnub, user );
} );

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Data Stream Connection Ready to Start
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
function ready( pubnub, user ) {
console.log('ready to subscribe to data stream channel');

pubnub.subscribe({
channel : user.channels,
message : receiver
});
}

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Data Stream Payloads Received
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
function receiver(data) {
console.log('received secure data payload');
}
撤销对恶意事件的访问
如果用户登录两次或打开多个 PubNub 怎么办
数据流连接?
如果您检测到滥用行为,您可以立即撤消访问权限 pubnub.revoke()命令。
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Revoke Access from Your Server
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
pubnub.revoke({
channel : 'CHANNEL_NAME',
auth_key : 'BAD_APPLE_AUTH_KEY',
callback : function(m){console.log(m) }
});
Secure PubNub Subscriber Key and Channel Name

Secure PubNub Subscriber Key and Channel Name bySecuring Data Streams on PubNub with ACL / Access Management


此外,如果您使用 Node.JS 进行访问管理控制,我们会为您提供一个有趣的社区论坛帖子,其中描述了 大规模赠款以合理的速度使用 PubNub Access Manager with Node.JS既好又好。

关于pubnub - 安全的 Pubnub 订阅者 key 和 channel 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27463853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com