纯JAVA实现Online Judge--3.SecurityManager安全管理器

本文探讨了在在线编程比赛中如何使用JAVA的SecurityManager来安全管理用户提交的代码,防止恶意行为如非法退出JVM、滥用系统资源等。通过自定义SecurityManager并复写checkPermission和checkExit方法,实现代码运行时的权限控制和异常处理,确保服务器安全。
摘要由CSDN通过智能技术生成

前言

    上一篇的博文中,我们通过自己编译用户提交的代码,再通过自定制的类加载器将编译出来后的class信息加载进JVM中,最后再通过反射调用用户代码的main,实现了运行用户代码的目的。具体如何运行用户的代码的部分,将会在后面的博客(多线程跑题)中展开述说,里面将介绍我如何利用多线程的方式,同时对同一份用户代码跑多份测试用例,提升效率的同时,如何解决多线程中遇到的冲突问题。

    现在首先要解决的是安全问题,既然我们运行用户提交的代码了,这就存在一个风险,如果用户想恶意攻击我们的服务器怎么办?比如用户在提交的代码中,打开远程连接连上远程的服务器,打开网络连接不断下载东西,再或者不断新建文件并写入大量数据,更有甚者直接调用System.exit(status);退出JAVA虚拟机等等。

    因为我们直接运行了未知的代码,我们就必须保证我们的服务器安全,不然我们的系统都还没判题几个就被别人搞垮了。我们利用JAVA实现这个安全管理还是挺容易的,因为JAVA提供了SecurityManager安全管理器。每一个JAVA程序在启动的时候,其实内部就设置了一个默认SecurityManager,我们这里只需要继承它,并复写相应的方法即可。


<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值