上篇的疑问:怎么只对一台设备进行指令下发呢?专门搞个主题??不实际啊
去看了下公司的IOT平台,及咨询了下开发,其实就上篇提到的代理服务器的转发策略,发送的消息带上设备id,根据设备id转发消息,这样可以达到针对性的下发指令。
再思考:高危风险在哪里?
1、代理服务器主要可以管设备、认证鉴权、执行下发等,一些大的层面的管控,这里其实跟web后端的类似的
2、指令的执行业务要看客户端的实现,这个前面也提到了,难点可能也是在这里了,客户端程序现在都是实现SDK,再或者就是agent,跟常规app安全一样了,客户端代码安全、对输入的处理等
3、一般都是连接代理服务器,这种架构解耦了客户端,那可以直连客户端吗?这样我是不是可以直接下发指令呢??那不行的,监听端口都没,连个寂寞
目录
Topic
通配符单级 +:相当于模糊匹配,仅匹配单级,仅用于主题订阅,不能用于发送消息,myhome/groundfloor/+/temperature
多级 #:多级模糊,直接#可订阅所有主题topic := "topic/#"
以$开头的主题$:以 $ 符号开头的主题有不同的用途,如topic := "topic/$SYS/broker/clients/total
内置主题有哪些??
持久连接
客户端与代理服务器的持久连接,注意到一个特性就是如果客户端与代理服务器的连接中断了,那此前订阅的主题都会丢失,需要下次连接时重新订阅,
为了解决这个问题
客户端可以在连接到代理时请求一个持久会话。持久会话将所有与客户端相关的信息保存在代理上。客户端在与代理建立连接时提供的clientId标识会话
所以clientId相当于Web的会话cookie了
那如果我知道了这个clientId???嘿嘿嘿~
安全性
1、broker连接dos(长连接,只有发起断开才会断开连接)
2、账号密码明文传输(可以使用证书客户端认证,或是TLS加密传输通道)
3、连接无认证,topic无鉴权
4、订阅所有主题,窃取消息数据
5、clientId枚举,即会话劫持
这是根据MQTT特性整理出来的
参考资料:
基础知识
安全性
持久连接