From: matz@... (Yukihiro Matsumoto) Date: 2003-10-29T16:53:30+09:00 Subject: [ruby-dev:21752] Re: access ENV on $SAFE==4 まつもと ゆきひろです In message "[ruby-dev:21727] Re: access ENV on $SAFE==4" on 03/10/27, Hidetoshi NAGAI writes: |----< $LOAD_PATH ($:, $-I) >------------------------ | $SAFE >= 4 でのアクセスが禁止される. |---------------------------------------------------- これは採用しましょう。 |----< RUBY_PLATFORM (PLATFORM) >-------------------- | Object.insecure_const(:RUBY_PLATFORM) および | Object.insecure_const(:PLATFORM) として設定されている. |---------------------------------------------------- これも良いと思います。 |----< ENV >----------------------------------------- | ENV.insecure(name) | : 環境変数 name は insecure であると設定する. | : ただし,$SAFE >= 4 で呼ばれた場合は例外を発生する. | : insecure に設定されている環境変数を $SAFE >= 4 で | : 読み出そうとした場合には例外を発生する. | : ( $SAFE >= 4 での書き込みは常に例外を発生することに注意.) | : すべての環境変数のデフォルト設定は「insecure」である. | | ENV.secure(name) | : 環境変数 name を secure であると設定する. | : ただし,$SAFE >= 4 で呼ばれた場合は例外を発生する. | : $SAFE >= 4 で環境変数の値を読み出すためには | : その環境変数が secure に設定されていなければならない. | : そうでなければ例外を発生する. | | ENV.insecure?(name) | : 環境変数 name (文字列指定) への $SAFE >= 4 でのアクセスが | : 禁止されている (insecureである) ならば true を, | : 許可されている (secureである) ならば false を返す. | | ENV.secure?(name) | : ENV.insecure?(name) の否定 | | ENV.insecure_keys | : $SAFE >= 4 でのアクセスが禁止されている (insecureである) | : ような環境変数のリストを得る. | : ただし,$SAFE >= 4 で呼ばれた場合は例外を発生する. | | ENV.secure_keys | : $SAFE >= 4 でのアクセスが許可されている (secureである) | : ような環境変数のリストを得る. | : ただし,$SAFE >= 4 で呼ばれた場合は例外を発生する. |---------------------------------------------------- | |----< Module >-------------------------------------- | Module#insecure_const(const) | : module/class において,定数 const (文字列またはシンボル) が | : insecure であると設定する.(戻り値は const のシンボル) | : ただし,$SAFE >= 4 で呼ばれた場合は例外を発生する. | : insecure とされた定数への $SAFE >= 4 でのアクセスは例外を発生する. | : すべての環境変数のデフォルト設定は「secure」である. | | Module#secure_const(const) | : module/class において,定数 const (文字列またはシンボル) が | : secure であると設定する.(戻り値は const のシンボル) | : ただし,$SAFE >= 4 で呼ばれた場合は例外を発生する. | | Module#insecure_const?(const) | : module/class において,定数 const (文字列またはシンボル) が | : insecure と設定されているばあいは true を, | : 設定されていない場合には false を返す. | | Module#secure_const?(const) | : Module#insecure_const?(const) の否定 | | Module#insecure_constants | : module/class において,insecure に設定されている定数の一覧を返す. | : ただし,$SAFE >= 4 で呼ばれた場合は例外を発生する. | | Module#secure_constants | : module/class において,secure に設定されている定数の一覧を返す. | : ただし,$SAFE >= 4 で呼ばれた場合は例外を発生する. |---------------------------------------------------- 考えるにsecure/insecureは良くないと思います。しばらくたって 記憶が曖昧になった時点で思い返すと、$SAFE>=3で参照できるのは * 信頼できないコードからアクセスされても大丈夫なsecureか * 信頼できないコードからアクセスされちゃうからinsecureか わからなくなるからです。ちょっと考えると前者なんだろうなと分 かるのですが。私だけ? Tcl方面ではそういうのはどういう用語を使っているんでしょう? まつもと ゆきひろ /:|)