2009-10-18 3 views
2

사전 정의 된 객체 세트를 새 객체로 집계해야합니다. 그러나 사용자가이를 위해 사용자 지정 함수를 지정해야합니다. Ruby/Rails 응용 프로그램에서 사용자 정의 스크립트 허용

는 이제 본래의 접근법은 내가 분명히이해야 할

def foo; end 

objects = [1,2,3] 
# result = eval(user_script) 
result = eval("objects.inject {|sum, n| sum + n }") 

하지 않으 어떤 것! $SAFE = 4 (here 참조)에 대해 읽었지만이 정도면 충분하지 않습니다. 특히 사용자 정의 스크립트는 여전히 foo과 같은 다른 함수를 호출 할 수 있기 때문에 특히 그렇습니다. 나는 위험하지 않은 기본적인 Ruby 핵심 기능에 대한 액세스 만 허용하려고합니다.

Ruby가 사용자 정의 스크립트를 안전하게 실행할 수있는 기능이 있습니까? Ruby 구문 일 필요는 없습니다. 그래도 괜찮을거야.

답변

2

Sven Fuch의 safemode 플러그인 (overview here)을 보았습니까? GitHub의 page입니다.

$ SAFE가하는 위험한 방법을 블랙리스트에 추가하는 대신 들어오는 코드를 구문 분석하고 허용 목록에없는 모든 메서드를 제거합니다. 플러그인에는 this file에서 볼 수있는 사전 정의 된 허용 목록이 제공됩니다.

개인적으로이 플러그인을 사용한 적이 없지만 작성자가 Ruby 커뮤니티에서 활발히 활동 중입니다. 질문하신 내용에 대한 답변을 제공해 드릴 것입니다.

+0

대단하군요! 루비우스 (rubyverse)에서 이런 것들을 찾기가 어렵습니다. –

0

세상에서 가장 좋은 자물쇠는 세계의 모든 사람들에게 열쇠를 제공하기로 선택하면 장님이 될 수 있습니다.

+0

사실 나는 사회자에게 그러한 코드를 추가 할 수있는 권리만을 부여합니다. –

관련 문제