cval
2.0.0
ชั้นของการป้องกันสำหรับการประเมิน
ดูตัวอย่าง·รายงานข้อผิดพลาด
ฉันรู้ว่าหลายคนไม่สนใจเกี่ยวกับแรงจูงใจที่อยู่เบื้องหลังโปรแกรมดังนั้นฉันจึงติดตั้งที่ด้านบน
python3 -m pip install cvalpy - m pip install cvalสคริปต์ที่เรียบง่ายอย่างเหมาะสมที่ใช้นิพจน์ทั่วไปเพื่อเพิ่มเลเยอร์ของการป้องกันในการประเมิน ทำไม ฉันยังคงเห็น "Eval เป็นอันตราย" และ "Eval เป็นวิธีปฏิบัติที่ไม่ดี" ข้อความทั้งหมดเหล่านี้มีความถูกต้องบางอย่างสำหรับพวกเขาและมีวิธีที่ดีกว่าในการทำสิ่งที่คุณต้องการทำให้สมบูรณ์ CVAL จัดการกับความคิด "Eval เป็นอันตราย" หากคุณต้องใช้ Eval สำหรับโครงการสาธารณะใช้ CVAL
ฉัน ขอแนะนำ ให้คุณทำลายสคริปต์รายงานข้อบกพร่องหรือช่องโหว่ใด ๆ ที่นี่ขอบคุณ!
ตัวอย่างเหล่านี้มุ่งเน้นไปที่ความปลอดภัยอย่างหมดจดแล้วตัวอย่างการปฏิบัติในโลกแห่งความเป็นจริง
# :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