ruby元编程——编写代码的代码




Kernel#eval()方法,可以直接执行ruby代码字符串

(1)Kernel#binding()方法用来捕获当前作用域返回一个Binding对象,Binding对象表示一个完整的作用域

(2)eval()可以接受两个参数,第一个是代码字符串,第二个是Binding对象,代码会在传入的作用域中执行(*eval()家族都可以)

(3)Ruby还提供了一个名为TOPLEVEL_BINDING的预定义常量,他表示顶级作用域的Binding对象。可以在程序的任何地方访问这个顶级作用域

(4) eval()方法会有两个可选参数file和line,传入文件路径以及当前执行代码行号,用于在在代码异常时,打印出堆栈信息

(5)由于代码字符串和快非常相似,在很多情况下,可以选择使用任意一种,但能用块尽量用块。

(6)eval()方法有代码注入攻击的风险,慎用

(7)污染对象和安全级别:

        污染对象包括程序从Web表单、文件盒命令行读入的字符串,甚至包括系统变量,每次从污染字符串运算而来的新字符串,也是被污染的,可以通过调用tainted?()方法判断是不是被污染

        ruby安全级别,可以通过修改$SAFE全局标量修改,分为0-4,5个级别

        0--完全不受约束,大于0,Ruby会拒绝执行污染的字符串,大于2,会禁止巨大部分文件相关工作

        可以通过Object#untaint()方法去除污染


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值