2013-05-13 2 views
0

웹 기반 컴파일러를 개발 중입니다.이 파일을 소스 코드에 전달해야하는 입력을 저장하고 파일에 genereated 출력을 저장해야합니다. 제한하고 싶습니다. 출력 파일의 파일 크기는 최대 값입니다. 내가 파일 크기에 대한 상한을 정의 어떻게파일 크기의 상한선을 정의하십시오

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dir + "/run.sh"))); 
      out.write("cd \"" + dir +"\"\n"); 
      out.write("chroot .\n"); 
      out.write("./a.out <in.txt> out.txt"); 
      out.close(); 

: 여기에 코드입니다?

+1

문장의 시작 부분에 대문자를 추가하십시오. 또한 I라는 단어에는 대문자를 사용하고 JEE 또는 WAR와 같은 약어 및 머리 글자를 사용하십시오. 이것은 사람들이 이해하고 돕는 것을 더 쉽게 만듭니다. –

+0

그건 그렇고,이 코드는 주입에 매우 취약 해 보입니다 ... 예를 들어,'';라는 디렉토리가 있다면? rm -rf.; echo "'? – wchargin

답변

0

하나의 가능성은 ulimit -f을 사용하여 전체 파일 출력 크기를 제한하는 것입니다.

또 다른 가능성은 그런데 dd bs=1 count=NNNNNN


을 통해 파이프를 출력하는 것입니다, 당신은 쉘 스크립트 그런 식으로 실행할 필요가 없습니다. 이처럼 할 수있는 :

exec(new String[]{ 
    "/bin/sh", "-c", 
    "cd \"" + dir + "\" ; chroot . ; ./a.out <in.txt> out.txt" 
}); 

이 비록 "주입"보안 문제를 해결하지 않습니다. 그리고 당신은 정말, 정말 주소가 필요해!

관련 문제