Kernel#eval()方法,能够直接执行ruby代码字符串安全
(1)Kernel#binding()方法用来捕获当前做用域返回一个Binding对象,Binding对象表示一个完整的做用域ruby
(2)eval()能够接受两个参数,第一个是代码字符串,第二个是Binding对象,代码会在传入的做用域中执行(*eval()家族均可以)spa
(3)Ruby还提供了一个名为TOPLEVEL_BINDING的预约义常量,他表示顶级做用域的Binding对象。能够在程序的任何地方访问这个顶级做用域命令行
(4) eval()方法会有两个可选参数file和line,传入文件路径以及当前执行代码行号,用于在在代码异常时,打印出堆栈信息对象
(5)因为代码字符串和快很是类似,在不少状况下,能够选择使用任意一种,但能用块尽可能用块。作用域
(6)eval()方法有代码注入攻击的风险,慎用字符串
(7)污染对象和安全级别:it
污染对象包括程序从Web表单、文件盒命令行读入的字符串,甚至包括系统变量,每次从污染字符串运算而来的新字符串,也是被污染的,能够经过调用tainted?()方法判断是否是被污染变量
ruby安全级别,能够经过修改$SAFE全局标量修改,分为0-4,5个级别表单
0--彻底不受约束,大于0,Ruby会拒绝执行污染的字符串,大于2,会禁止巨大部分文件相关工做
能够经过Object#untaint()方法去除污染