智云课堂直播流鉴权分析
省流:几乎完全没有鉴权。
只有一部分教室的直播流可以用此方法获取和使用。
直播流地址获取需鉴权
为了获取直播流地址,你需要在登陆状态下获取https://classroom.zju.edu.cn/courseapi/v3/portal-home-setting/get-sub-info?course_id=<COURSE_ID>&sub_id=<SUB_ID>。
智云课堂不会检验<COURSE_ID>与<SUB_ID>是否匹配,在<response>.data.live_url.output中记录了对应课堂的直播流。
通过<response>.data.room_name和<response>.data.live_url.output.m3u8可以拿到教室名-M3U8地址的对应。
直播流地址与教室对应,不与课程对应
换言之,不同的课程,只要教室相同,直播流地址就相同。也就是说,这个地址可以“一次获取,终身使用”。
直播流地址没有任何鉴权
直播流最后的authid=xxxxx参数没有任何作用,删除不影响获取。
直播流获取时不检查Cookie,不检查Token,不需要登陆状态。
直播流Cors-Allow-Origin是*,并且对于一切情况均为*,不会要求访问Origin必须为智云课堂网址。
直播流可以在校外访问,不要求访问者来自内网。
将会带来的后果
数据泄露:任何人都可以访问直播流,这可能导致敏感信息泄露,比如学生的个人信息、课堂内容等。
服务滥用:可能会导致服务被滥用,比如被用于商业用途或其他非教育目的,这可能会违反服务条款,导致法律问题。
带宽和资源消耗:如果直播流可以被任何人访问,可能会导致大量的非授权访问,增加服务器的带宽和资源消耗,影响服务的稳定性和性能。
如何使数据更加安全
配置Referer防盗链:配置Referer黑名单或白名单后,CDN会根据名单对播放请求中携带的Referer字段进行识别,允许或拒绝播放请求。
配置Key防盗链:观众使用租户提供的带加密串的鉴权播放地址向CDN请求直播播放,CDN会根据请求地址中携带的鉴权信息进行检验,只有通过校验的请求才会被允许。
IP黑白名单鉴权:配置IP黑名单或白名单后,CDN会根据名单对推流请求者的IP进行识别和过滤,允许或拒绝推流请求。
限制跨域资源共享(CORS):不要将Access-Control-Allow-Origin设置为*,而是应该设置为具体的域名或者使用更精细的控制策略。如果需要支持跨域请求,确保Access-Control-Allow-Credentials设置为true,并且正确处理Cookie。
限制直播流访问:直播流可以在校内访问,不要求访问者来自内网。可以通过配置域名的访问控制列表(ACL)来限制只有特定IP地址或网络可以访问直播流。