2012-12-14 6 views
2

Java 응용 프로그램에서 JRuby를 사용하여 사용자가 스크립트를 실행할 수 있도록합니다. 응용 프로그램의 정상적인 기능에 필요한 일련의 작업은 그리 크지 않습니다. 스크립트는 Java 코드의 일부 변수를 제어하고 실행 중에 프로세스를 변경해야합니다.Java 응용 프로그램에서 허용되는 JRuby 명령을 제한 할 수 있습니까?

그래서 허용 된 작업 수를 제한하고 싶습니다. 예를 들어, 사용자가 파일 시스템에 액세스하지 못하도록하고 싶습니다.

f = File.new("myfile.txt", "w") 
f.puts("Hello!") 
f.close 

이것은 금지되어야합니다.

어떻게 이러한 설정을 수행 할 수 있습니까? 내가 가지고있는 유일한 아이디어는 실행 전에 사용자 스크립트를 구문 분석하고 허용 된 작업의 흰색 목록과 스크립트를 비교하는 것입니다.

답변

4

허용 명령의 화이트리스트를 만드는 것입니다. 흰색 목록에없는 명령이 스크립트에있는 경우 전체 스크립트를 거부해야합니다. 앤드류 톰슨 (Andrew Thompson)이 지적한 보안 관리자는 좋은 추가 계층이지만 보안 계층화의 끝은 아닙니다. 나는 샌드 박스 애플릿에서 실행하는 것이 스크립트가 실제로 유효한지 결정해야하기 때문에 실제로 많은 것을 사려고한다고 생각하지 않습니다. 이 옵션의 제한된 수의가 화이트리스트를 생성 할 때

은 화이트리스트 예

일반적으로/당신은 사용자가 나머지는 폐기되고 선택할 수 있도록하려면 명령. 일부 열거 또는 최종 데이터 구조를 생성하여 악성 프로그램이 런타임 중에 수정하는 기능을 최소화 할 수 있습니다. 당신은 당신이 완전히 원시적 인 다음처럼 작성할 수 foo하지 bar 함수를 호출 할 수있는 옵션이 사용자를 원하지만 개념을 설명하는 경우 :

class WhiteList 
{ 
    allowedCommands = ["foo"]; 
} 

과 같은 주요 뭔가 :

class Main 
{ 
    for(Command command in userInput) 
    { 
      if(command not in allowedCommands) 
      { 
       log security message; 
       continue/break 
      } 
    } 
} 
+0

표준'SecurityManager'로는 충분하지 않을 수 있습니다 (예 : 리소스 사용의 경우 특히 클라이언트 스크립트가 JRE를 무한 루프로 보내는 경우). 이러한 추가주의 사항은 좋은 의미입니다. –

+0

화이트리스트의 아이디어는 훌륭합니다! 이 특정 사례에서 "화이트리스트"가 의미하는 것은 몇 가지 팁이나 URL을 알려주시겠습니까? JRuby의 지원되는 기능으로 수행 할 수 있습니까? 또는 스크립트를 텍스트 구문 분석 수준에서 직접 구현해야합니까? 나는 라이 (Rye)에 대한 화이트리스트의 예를 발견했다. 그것은 JRuby (https://github.com/delano/rye/blob/master/lib/rye/cmd.rb)에 대해 이와 같은 것을 가지고 greate 것입니다 고마워요! – Anton

+1

@Anton 기본 예제로 업데이트했습니다. – Woot4Moo

1

사용자 코드로 SecurityManager 을 설치하십시오. 또는 더 쉽게 모래 상자가있는 애플릿 또는 JWS 응용 프로그램에서 코드를 실행하십시오.

  1. 보안 관리자는 응용 프로그램이 보안 정책을 구현할 수있는 클래스입니다. 이 기능을 사용하면 응용 프로그램에서 안전하지 않거나 민감한 작업을 수행하기 전에 작업이 무엇인지 여부와 작업 수행을 허용하는 보안 컨텍스트에서 시도 중인지 여부를 확인할 수 있습니다. 응용 프로그램에서 작업을 허용하거나 거부 할 수 있습니다. 당신이 무엇을해야

관련 문제