【转载】Red5流媒体服务基于域的安全策略

2024-01-23 09:18

本文主要是介绍【转载】Red5流媒体服务基于域的安全策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章来之:http://hi.baidu.com/3tion/blog/item/9ce3e219fdd4be4f43a9adb5.html

 

公司出于业务扩展的考虑,准备把原先基于FMS为后台的程序,改为用开源的Red5作为视频音频服务,而由Socket作为数据交换服务。
公司服务端的人忙着处理其他事情,于是公司安排我做Red5的架设工作。在网上找了些资料,Red5配置起来还是比较简单的。网上的教程有一堆,这里就不累述了。
因为flash客户端用NetConnection连接Red5的时候,是不需要像连接socket或者是http那样要提交一个<request-policy-file/>的请求去请求一个crossdomain的字符串。
而视频,音频服务在我们整个服务中所占的IO是最大的。如果Red5服务没有做任何连接的验证,其他人通过反编我们的swf文件,得到我们的red5服务的地址后,就很容易让其他人来使用我们的服务器。
对于这种问题,通常可以使用连接Red5时,要求客户端提交一个由服务端生成的密钥来做验证,但是这样就涉及到Red5和Socket直接的通信问题(或者是通过查询临时表等方法),无疑会给本来已经事情很多的服务端的同事们增加麻烦。
于是我采取通过检测flash客户端的swf文件URL这种基于域的检测方式。
首先,需要自己先写一个Red5的应用,并且把WEB-INF中red5-web.xml里面<bean id="web.handler" class="xxx.xxx.xxxx" />的class指定为你写的这个应用。
让你的应用继承ApplicationAdapter,然后重写connect
我在应用的根目录放置了一个crossdomain.properties文件。


package com._3tion.live;

import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
import java.util.Properties;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
import org.red5.server.api.IScope;
import org.springframework.core.io.Resource;


/**
* @author 3tion
*
*/
public class Application extends ApplicationAdapter {
private static String swfUrl[];

//域检测文件名
private static final String CROSS_DOMAIN_FILE_NAME = "crossdomain.properties";

private static final String SEPARATOR = ";";


@Override
public synchronized boolean connect(IConnection conn, IScope scope,
Object[] params) {

if( swfUrl == null )
{
//检查策略文件
Resource resource = getResource(CROSS_DOMAIN_FILE_NAME);//resource的目录结构是从当前应用的根目录开始
if(resource.exists())
{
Properties props = new Properties();
try {
props.load(resource.getInputStream());
swfUrl = props.getProperty("swfUrl").toLowerCase().split(SEPARATOR);
} catch (IOException e) {
e.printStackTrace();
}

}
else //如果没有域安全文件,则视为所有域都允许通过
{
swfUrl = new String[1];
swfUrl[0] = "*";
}
}

Map<String,Object> map = conn.getConnectParams();
//检查连接参数中swfUrl的地址是否在安全文件中
if( Arrays.binarySearch(swfUrl,"*") > -1 || Arrays.binarySearch(swfUrl, map.get("swfUrl").toString().toLowerCase()) > -1 )
{
return super.connect(conn, scope, params);
}
else
{
return false;
}
}
}

这样,就可以在crossdomain.properties中控制你red5应用允许访问的文件了,如果写*,就允许任意文件访问。
允许http://test/Main.swf和http://test1/Main.swf访问。
则crossdomain.properties:
swfUrl    =    http\://test/Main.swf;\
http\://test1/Main.swf

这篇关于【转载】Red5流媒体服务基于域的安全策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635931

相关文章

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring