gpt4 book ai didi

java - 阻止一个 c 程序启动另一个程序

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:31 24 4
gpt4 key购买 nike

我正在做一个项目,我需要为其编译一个 C 程序,在测试数据上运行它,然后生成它的输出。我使用两个 bash 脚本,第一个是 clearscript.sh,它从当前目录(code.c、输入、输出)中删除临时文件,另一个是 myscript.sh,它编译 code.c,在输入文件上运行它并生成我显示的输出在我的 GUI 的文本区域。

现在我的问题是,我如何阻止用户执行诸如执行 system("rm *") 之类的操作,因为那样做会很糟糕。一种方法是我可以搜索与系统命令对应的字符串,如果找到,我将不允许程序运行。但是我觉得必须有更好的解决方案来停止通过C程序执行外部程序。

另一个问题是当程序运行到死循环时程序停止响应。而且我觉得还有更多的问题,我以后会发现。有没有更好的方法来完成我的程序正在做的事情。

    import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.awt.event.*;



class test2 {

static JTextArea ta1,ta2,ta0;

public static class myEvent implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

try{

Process p = new ProcessBuilder("./cleanscript.sh").start();
p.waitFor();
}
catch(Exception e1)
{}

try{

BufferedWriter bw = new BufferedWriter(new FileWriter("code.c"));
ta1.write(bw);
}
catch (IOException ioe)
{
ioe.printStackTrace();
}



try{
BufferedWriter bw = new BufferedWriter(new FileWriter("input"));
ta0.write(bw);
}
catch(IOException ioe)
{
ioe.printStackTrace();
}





try{
Process pb = new ProcessBuilder("./myscript.sh").start();
pb.waitFor();
}
catch(Exception t)
{}




try {

ta2.read(new FileReader(new File("output")),"fun");
}
catch (IOException ioe2)
{
ioe2.printStackTrace();
}



}
}




public static void main(String args[]) {

JFrame jf;



jf = new JFrame();


jf.setLocationByPlatform(true);

ta0 = new JTextArea("Give Input to the program here,before running the program");
ta1 = new JTextArea("Your C program here",0,100);
ta2 = new JTextArea("Your output will be shown here");

ta2.setEditable(false);




JScrollPane jsp0,jsp1,jsp2;


jsp0 = new JScrollPane(ta0);
jsp1 = new JScrollPane(ta1);
jsp2 = new JScrollPane(ta2);




jf.getContentPane().setLayout(new GridLayout(4,1));

jf.getContentPane().add(jsp1);
jf.getContentPane().add(jsp0);
jf.getContentPane().add(jsp2);



JButton jb = new JButton("Run");

jb.addActionListener(new myEvent());


jf.getContentPane().add(jb);



jf.setSize(1000,400);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}}

cleanscript.sh 代码

     rm code.c
rm input
rm output

myscript.sh 代码

     cc code.c
./a.out < input > output

最佳答案

如果您需要运行一些外部程序,请设置一个允许 程序列表,并检查所提供的程序是否在您的列表中。 不要使用 system(3),它调用 shell 来运行命令(这很容易被骗),使用 exec(3 ) 家庭。关于在安全方面需要注意什么的更多详细信息是 here .

关于java - 阻止一个 c 程序启动另一个程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21647062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com