cval
2.0.0
평가를위한 보호 층
예를보기 ·보고 버그
많은 사람들이 프로그램의 동기에 관심이 없다는 것을 알고 있으므로 설치를 최상위에 올렸습니다.
python3 -m pip install cvalpy - m pip install cval정규 표현식을 사용하여 평가를 위해 보호 계층을 추가하는 괜찮은 간단한 스크립트. 왜? 글쎄, 나는 "평가는 실제로 위험하다" 고 계속보고 있으며 "평가는 나쁜 관행"입니다 . 이 모든 진술에는 그들에게 약간의 타당성이 있으며, 당신이 끊임없이 원하는 일을하는 더 좋은 방법이 거의 있습니다. CVAL은 공개 프로젝트 사용 CVAL을 사용해야하는 경우 "Eval Is Really Is Danger" 사고 방식을 다룹니다.
내 대본을 깨고 버그 나 취약점을 여기에보고 하는 것이 좋습니다. 감사합니다!
이 예는 실제 사례보다는 보안에 순전히 초점을 맞추고 있습니다.
# :NOTE: modules is False by default, and the reason we allow function calls
# is to see the error given when trying to import a module.
cval ( '__import__("os")' , calls = True , modules = False ) cval.IllegalSource: Cval panicked due to an attempted illegal import of the module "os"
cval ( '__import__("os")' , allowed_modules = [ "os" ], allowed_calls = [ "import" ]) cval ( 'print("Hello, World!")' , calls = False ) cval.IllegalSource: Cval panicked due to an illegal function call in source! Attemped call to "print"
cval ( 'print("Hello, World!")' , allowed_calls = [ "print" ]) foo = "bar"
def foobar ():
# :NOTE: `globals` doesn't need to be passed in this case
# this is only done here for clarity
cval ( 'print(foo)' , globals = globals (), allowed_calls = [ "print" ]) # Will not be able to access "foo"
foobar () cval.SuspiciousSource: Cval found global variable "foo" in the source, killing for safety.
foo = "bar"
def foobar ():
cval ( 'print(foo)' , globals = globals (), allowed_global_vars = [ "foo" ], allowed_calls = [ "print" ])
foobar () bar
foo = "bar"
bar = "foo"
def foobar ():
cval ( 'print(bar+foo")' , globals = globals (), allowed_global_vars = [ "*" ], allowed_calls = [ "print" ])
foobar () foobar
def fizzbuzz ():
fizz = "buzz"
cval ( 'print(fizz)' , locals = locals ()) # Will not be able to access "fizz"
fizzbuzz () cval.SuspiciousSource: Cval found local variable "fizz" in the source, killing for safety.
def fizzbuzz ():
fizz = "buzz"
cval ( 'print(fizz)' , locals = locals (), allowed_local_vars = [ "fizz" ], allowed_calls = [ "print" ])
fizzbuzz () buzz
def fizzbuzz ():
fizz = "buzz"
buzz = "fizz"
cval ( 'print(buzz+fizz)' , locals = locals (), allowed_local_vars = [ "*" ], allowed_calls = [ "print" ])
fizzbuzz () fizzbuzz