From: matz@... (Yukihiro Matsumoto) Date: 2003-10-25T03:01:39+09:00 Subject: [ruby-dev:21712] Re: access ENV on $SAFE==4 まつもと ゆきひろです In message "[ruby-dev:21704] Re: access ENV on $SAFE==4" on 03/10/24, Hidetoshi NAGAI writes: |----< $LOAD_PATH ($:, $-I) >------------------------ | $SAFE >= 4 でのアクセスが禁止される. | | ...としていますが,ENV の許可レベルに連動させるという選択も | ありという気がします. |---------------------------------------------------- ま、これは良いとして。 |----< ENV >----------------------------------------- | ENV.secure_level | : 環境変数へのアクセス許可レベルを返す. | : 環境変数にアクセスするためには,現在の $SAFE が | : この値よりも小さくなければならない. | | ENV.secure_level=(level) | : 環境変数へのアクセス許可レベルを level に設定する. | : 変更できるレベルは level >= $SAFE ,かつ, | : level <= [現在のアクセス許可レベル] でなければならない. | | ENV.allow?(name) | : 環境変数 name (文字列指定) への現在の $SAFE でのアクセスが | : 許可されていれば true を,許可されていなければ false を返す. | | ENV.allows | : 現在許可されている環境変数のリストを得る. | : ただし,現在の $SAFE でのアクセスが許可されていなければ | : 例外を発生する. | | ENV.allow(name) | : 環境変数 name への $SAFE >=4 でのアクセスを許可する. | : ただし,現在の $SAFE でのアクセスが許可されていなければ | : 例外を発生する. | | ENV.deny(name) | : 環境変数 name への $SAFE >=4 でのアクセスを禁止する. | : ただし,現在の $SAFE でのアクセスが許可されていなければ | : 例外を発生する. |---------------------------------------------------- 基本的には反対ではないのですが、この仕様はちょっとしっくりき ません。ENVのアクセスレベルって不要じゃありません? どうせallow/denyが効果を持つのは $SAFE >= 4 なんですから。 |----< Module >-------------------------------------- | Module#secure_const(const_sym, level = 4) | : module/class において,シンボル const_sym で表される定数の | : アクセス許可レベルを level にする. | : 変更できるレベルは level >= $SAFE ,かつ, | : level <= [現在のアクセス許可レベル] でなければならない. | | Module#secure_const?(const_sym) | : module/class において,アクセス許可レベルが設定されている場合は | : そのレベルを,設定されていない場合には false を返す. | | Module#secure_constants | : module/class において,アクセス許可レベルが設定されている定数の | : 一覧を { [定数シンボル]=>[許可レベル], ... } のハッシュで返す. |---------------------------------------------------- これも面白いんですし、PLATFORMだけ特別扱いするよりもずっと良 いのですが、名前が。むしろinsecure_constじゃないですか? レベルが指定できて嬉しいかどうかもちょっと疑問。 まつもと ゆきひろ /:|)