当前位置: 首页 > wzjs >正文

excel如何做超链接网站班级优化大师使用心得

excel如何做超链接网站,班级优化大师使用心得,seo网站推广如何做,克拉玛依市区建设局网站在看这一期之前,需要先看上一期的文章: Java 原生实现代码沙箱(OJ判题系统第1期)——设计思路、实现步骤、代码实现-CSDN博客 Java 程序可能出现的异常情况 1、执行超时 占用时间资源,导致程序卡死,不释…

在看这一期之前,需要先看上一期的文章:

Java 原生实现代码沙箱(OJ判题系统第1期)——设计思路、实现步骤、代码实现-CSDN博客

Java 程序可能出现的异常情况

1、执行超时

占用时间资源,导致程序卡死,不释放资源:

/*** 无限睡眠(阻塞程序执行)*/
public class SleepError {public static void main(String[] args) throws InterruptedException {long ONE_HOUR = 60 * 60 * 1000L;Thread.sleep(ONE_HOUR);System.out.println("睡完了");}
}

2、占用内存

/*** 无限占用空间(浪费系统内存)*/
public class MemoryError {public static void main(String[] args) throws InterruptedException {List<byte[]> bytes = new ArrayList<>();while (true) {bytes.add(new byte[10000]);}}
}

3、读文件,文件信息泄露

/*** 读取服务器文件(文件信息泄露)*/
public class ReadFileError {public static void main(String[] args) throws InterruptedException, IOException {String userDir = System.getProperty("user.dir");String filePath = userDir + File.separator + "src/main/resources/application.yml";List<String> allLines = Files.readAllLines(Paths.get(filePath));System.out.println(String.join("\n", allLines));}
}

4、写文件,越权植入木马

/*** 向服务器写文件(植入危险程序)*/
public class WriteFileError {public static void main(String[] args) throws InterruptedException, IOException {String userDir = System.getProperty("user.dir");String filePath = userDir + File.separator + "src/main/resources/木马程序.bat";String errorProgram = "java -version 2>&1";Files.write(Paths.get(filePath), Arrays.asList(errorProgram));System.out.println("写木马成功,你完了哈哈");}
}

5、运行程序

/*** 运行其他程序(比如危险木马)*/
public class RunFileError {public static void main(String[] args) throws InterruptedException, IOException {String userDir = System.getProperty("user.dir");String filePath = userDir + File.separator + "src/main/resources/木马程序.bat";Process process = Runtime.getRuntime().exec(filePath);process.waitFor();// 分批获取进程的正常输出BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));// 逐行读取String compileOutputLine;while ((compileOutputLine = bufferedReader.readLine()) != null) {System.out.println(compileOutputLine);}System.out.println("执行异常程序成功");}
}

Java 程序安全控制

1、超时控制

private static final long TIME_OUT = 5000L; // 定义超时时间为5000毫秒(5秒)// 启动一个新线程进行超时控制
new Thread(() -> {try {// 让当前线程休眠TIME_OUT指定的时间Thread.sleep(TIME_OUT);// 超时后打印消息System.out.println("超时了,中断");// 终止运行中的进程runProcess.destroy();} catch (InterruptedException e) {// 如果线程在休眠期间被中断,抛出RuntimeExceptionthrow new RuntimeException(e);}
}).start(); // 启动线程

2、限制资源分配

我们不能让每个 java 进程的执行占用的 JVM 最大堆内存空间都和系统默认的一致(鱼皮的 JVM 默认最大占用 8G 内存),实际上应该更小(执行用户的题目代码也不需要这么多),比 如说 256MB。在启动 Java 程序时,可以指定 JVM 的参数: -Xmx256m(最大堆空间大小) 示例命令如下:

String runCmd = String.format("java -Xmx256m -Dfile.encoding=UTF-8 -cp %s Main %s", userCodeParentPath, inputArgs);

 小知识 - 常用 JVM 启动参数

1. 内存相关参数:
  • -Xms: 设置 JVM 的初始堆内存大小。
  • -Xmx: 设置 JVM 的最大堆内存大小。
  • -Xss: 设置每个线程的栈大小。
  • -XX:MaxMetaspaceSize: 设置 Metaspace(元空间)的最大大小。
  • -XX:MaxDirectMemorySize: 设置直接内存(Direct Memory)的最大大小。
2. 垃圾回收相关参数:
  • -XX:+UseSerialGC: 使用串行垃圾回收器。
  • -XX:+UseParallelGC: 使用并行垃圾回收器。
  • -XX:+UseConcMarkSweepGC: 使用 CMS(并发标记清除)垃圾回收器。
  • -XX:+UseG1GC: 使用 G1 垃圾回收器。
3. 线程相关参数:
  • -XX:ParallelGCThreads: 设置并行垃圾回收使用的线程数。
  • -XX:ConcGCThreads: 设置并发垃圾回收使用的线程数。
  • -Xss 或 -XX:ThreadStackSize: 设置每个线程的栈大小。注意:-Xss 和 -XX:ThreadStackSize 是等效的。
4. JIT 编译器相关参数:
  • -XX:TieredCompilation: 启用分层编译模式。
  • -XX:TieredStopAtLevel: 设置 JIT 编译器停止编译的层次。
5. 其他资源限制参数:
  • -XX:MaxRAM: 设置 JVM 可以使用的最大物理内存。

说明:

  • -Xss 和 -XX:ThreadStackSize 都用于设置线程的栈大小,通常情况下两者是等效的。
  • -XX:MaxRAM 参数在较新的 JDK 版本中引入,用于自动配置 JVM 的内存使用。

3、限制代码 - 黑白名单

先初始化字典树,插入禁用词:

 private static final List<String> blackList = Arrays.asList("Files", "exec");private static final WordTree WORD_TREE;static {// 初始化字典树WORD_TREE = new WordTree();WORD_TREE.addWords(blackList);}

 校验用户代码是否包含禁用词:

  //  校验代码中是否包含黑名单中的命令FoundWord foundWord = WORD_TREE.matchWord(code);if (foundWord != null) {System.out.println("包含禁止词:" + foundWord.getFoundWord());return null;}

限制权限 - Java 安全管理器

Java 安全管理器(Security Manager)是 Java 提供的保护 JVM、Java 安全的机制,可以实 现更严格的资源和操作限制。

 1.所有权限放开

/*** 默认安全管理器*/
public class DefaultSecurityManager extends SecurityManager {// 检查所有的权限@Overridepublic void checkPermission(Permission perm) {System.out.println("默认不做任何限制");System.out.println(perm);
//        super.checkPermission(perm);}
}

2.所有权限拒绝

/*** 禁用所有权限安全管理器*/
public class DenySecurityManager extends SecurityManager {// 检查所有的权限@Overridepublic void checkPermission(Permission perm) {throw new SecurityException("权限异常:" + perm.toString());}
}

3.限制权限

public class MySecurityManager extends SecurityManager {// 检查所有的权限@Overridepublic void checkPermission(Permission perm) {
//        super.checkPermission(perm);}// 检测程序是否可执行文件@Overridepublic void checkExec(String cmd) {throw new SecurityException("checkExec 权限异常:" + cmd);}// 检测程序是否允许读文件@Overridepublic void checkRead(String file) {System.out.println(file);if (file.contains("C:\\code\\yuoj-code-sandbox")) {return;}
//        throw new SecurityException("checkRead 权限异常:" + file);}// 检测程序是否允许写文件@Overridepublic void checkWrite(String file) {
//        throw new SecurityException("checkWrite 权限异常:" + file);}// 检测程序是否允许删除文件@Overridepublic void checkDelete(String file) {
//        throw new SecurityException("checkDelete 权限异常:" + file);}// 检测程序是否允许连接网络@Overridepublic void checkConnect(String host, int port) {
//        throw new SecurityException("checkConnect 权限异常:" + host + ":" + port);}
}

测试:

/*** 测试安全管理器*/
public class TestSecurityManager {public static void main(String[] args) {System.setSecurityManager(new MySecurityManager());FileUtil.writeString("aa", "aaa", Charset.defaultCharset());}
}

在运行java程序时,指定安全管理器的路径、安全管理器的名称:

private static final String SECURITY_MANAGER_PATH = "C:\\code\\code-sandbox\\src\\main\\resources\\security";private static final String SECURITY_MANAGER_CLASS_NAME = "MySecurityManager";String runCmd = String.format("java -Xmx256m -Dfile.encoding=UTF-8 -cp %s;%s -Djava.security.manager=%s Main %s", userCodeParentPath, SECURITY_MANAGER_PATH, SECURITY_MANAGER_CLASS_NAME, inputArgs);

至此,第二期结束,但是安全管理器有一定缺点:

1. 如果要做比较严格的权限限制,需要自己去判断哪些文件、包名需要允许读写。粒度太细 了,难以精细化控制。

2. 安全管理器本身也是 Java 代码,也有可能存在漏洞。本质上还是程序层面的限制,没深 入系统的层面。

所以下一期我们来讲一下,代码沙箱 Docker 实现

 

http://www.dtcms.com/wzjs/460697.html

相关文章:

  • 拼多多刷销量网站开发公司网址
  • 江苏省建设招标网站网站发布平台
  • 黄页网络的推广网站有哪些好零售客户电商网站
  • 杭州网站设计 site网推公司干什么的
  • site网站连通率0%怎么解决关键词提取
  • 企业网站内容更新怎么操作淘宝seo优化是什么意思
  • 网站初期做几个比较好济南seo网站优化公司
  • 昌平哪有做网站的公司市场营销策划方案3000字
  • 哪个新闻网站做的好东莞网络营销公司
  • 企业网站开发 外文文献2021年网络营销考试题及答案
  • 深圳网站建设定制平台邀请注册推广赚钱
  • 哪里有建设网站中的视频谷歌seo 优化
  • 三合一网站品牌推广策划方案怎么写
  • 源码快速建站建个网站费用大概多少钱一年
  • 外贸网站建设加推广360关键词推广
  • 鞍山手机网站建设软文营销经典案例200字
  • 大连网站建设制作公司宁波seo网络推广外包报价
  • 网站建设 客户定位网站优化推广软件
  • yellow免费观看高清seo优化排名工具
  • 网站建设公司推销网站seo关键词排名推广
  • 北京建设质量协会网站做百度推广效果怎么样
  • 网站建设推广视频短视频营销成功的案例
  • 网站设计作用百度宣传推广费用
  • 珠海市网站建设开发公司品牌运营具体做什么
  • 国内做外贸网站的有哪些资料网络优化推广公司哪家好
  • 找网站建设公司seo推广怎么学
  • 设计说明100字通用免费的电脑优化软件
  • 知名的网站建设公司考证培训机构
  • 济南微网站开发个人网页设计作品欣赏
  • 打码网站怎么做接口sem培训班学费哪个好