[ruby-list:2938] Re: How to create ext

From: matz@... (Yukihiro Matsumoto)
Date: 1997-05-13 04:35:17 UTC
List: ruby-list #2938
まつもと ゆきひろです.

In message "[ruby-list:2936] How to create ext"
    on 97/05/13, Eiji-usagi-MATSUmoto <ematsu@pfu.co.jp> 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");

    とほぼ同義です.

In This Thread