From: matz@... (Yukihiro Matsumoto) Date: 1997-05-13T13:35:17+09:00 Subject: [ruby-list:2938] Re: How to create ext まつもと ゆきひろです. In message "[ruby-list:2936] How to create ext" on 97/05/13, Eiji-usagi-MATSUmoto writes: |うさぎです。 |今だまともなrubyのscriptを書いた事がないのに、rubyの拡張moduleを |作ろうとしています。 |以外と簡単にできるので、かんどーしてます。 でしょ? 私の知っているスクリプト言語の中では一番簡単だと思い ます. | rb_secure(4) | |なんですが、これって何のために使われているのでしょうか? これはですね.セキュリティレベルが4以上の時にはこの操作を禁 止するという意味です.たとえば,外部ファイルへの書き出しとか を行う関数ではrb_secure(4)が入ります.dbmはファイルの書き出 しを行いますから,これが入っているわけですね. せっかくですから,ここでセキュリティ周りに関してまとめておき ます. * $SAFE セキュリティレベルを表す変数.レベルは以下の通り 0 - 外部からの文字列は汚れている(デフォルト) 1 - 汚れた文字列では危険な操作が行えない 2 - いくつかのプロセス操作が禁止される 3 - 全ての文字列が汚れる 4 - 大域変数の変更ができない/外部ファイルへの直接出力ができない 5 - インスタンス変数も変えられない * rb_secure(int) $SAFEの値が引数以上だと例外を発生します.このチェックを あちこちに散りばめることで$SAFEによるセキュリティを実現 しています. * rb_taint(VALUE) 文字列を汚します. * rb_tainted(VALUE) 文字列が汚れている時,真を返します. * Check_SafeStr(VALUE) 文字列が汚れていない文字列であるかどうかをチェックします. Check_Type(value, T_STRING); if (rb_tainted(value)) Raise(eSecurityError, "Insecure operation"); とほぼ同義です.