智云课堂直播流鉴权分析

省流:几乎完全没有鉴权。

只有一部分教室的直播流可以用此方法获取和使用。

直播流地址获取需鉴权

为了获取直播流地址,你需要在登陆状态下获取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地址或网络可以访问直播流。