Ruby安全级别、Procs与Lambdas详解
1. Ruby安全级别
Ruby的安全模型由受污染数据和安全级别两部分组成。安全级别用整数0到4表示,不同级别对操作的限制不同,具体如下:
| 安全级别 | 描述 |
| ---- | ---- |
| 0 | 默认级别,不采取任何安全预防措施,对任何类型的数据操作无限制 |
| 1 | 有一些限制,如执行系统调用、评估代码、包含库、打开文件、建立网络连接时不能使用受污染数据 |
| 2 | 在级别1的基础上增加限制,改变目录和文件、生成进程和包含外部Ruby文件都受限,无论是否涉及受污染数据 |
| 3 | 在级别2的基础上,将所有对象视为受污染(除预定义的全局对象),硬编码的字面量也会被标记为受污染,且不能使用 untaint 方法改变状态 |
| 4 | 最高安全级别,极大限制对大多数对象的访问和修改,不能更改环境变量,禁止文件输入输出,元编程方法被禁用 |
$SAFE 全局变量存储当前安全级别,可以在脚本中更改以提高安全性,但只能提高,不能降低安全级别,示例如下:
$SAFE = 1
也可以在执行Ruby脚本时使用 -T 标志更改安全级别,示例如下:
ruby -w -T1 scriptname.rb
如果尝试执行安全级别不允许的操作,会抛出
超级会员免费看
订阅专栏 解锁全文
4

被折叠的 条评论
为什么被折叠?



