1

以下のコマンドラインオプションが実際にどのように使用されているか理解できませんでした。

-T[level=1]

私はこのコードを試しました:

#commandoptionstest.rb
puts "hello world"

さまざまなSAFEレベルで:

出力はOKです

@ubuntu:~/script$ ruby -x commandoptionstest.rb
# => hello world

なぜエラーですか?commandoptionstest.rbで許可する-xには何をする必要があり-Tますか?

@ubuntu:~/script$ ruby -x -T commandoptionstest.rb
# => ruby: no -x allowed in tainted mode (SecurityError)

出力が来ています

@ubuntu:~/script$ ruby -T commandoptionstest.rb
# => hello world

出力が来ています

@ubuntu:~/script$ ruby -T1 commandoptionstest.rb
# => hello world

出力が来ています

@ubuntu:~/script$ ruby -T2 commandoptionstest.rb
# => hello world

出力が来ています

@ubuntu:~/script$ ruby -T3 commandoptionstest.rb
# => hello world

繰り返しますが、なぜエラーですか?

@ubuntu:~/script$ ruby -T4 commandoptionstest.rb
# => commandoptionstest.rb:15:in `write': Insecure operation `write' at level 4 (SecurityError)
#   from commandoptionstest.rb:15:in `puts'
#   from commandoptionstest.rb:15:in `puts'
#   from commandoptionstest.rb:15:in `<main>'

上記のコードの助けを借りて、レベルが印刷されているのにレベルが印刷されていない理由を説明していただけSAFEますか?レベルでの書き込み操作を許可するには、ここで何を行う必要がありますか?123"hello world"SAFE4SAFE4

4

2 に答える 2

2

レベルを設定し$SAFEます。

これは、環境変数、I/O、スレッド、例外、インタープリターのコマンドライン引数などに関する他の多くのこととともに、入力の処理方法を決定します。

http://www.ruby-doc.org/docs/ProgrammingRuby/html/taint.html

IMO ドキュメントは、開始するのに適した場所です。特定の行動について質問がある場合は、尋ねてください。


コメントと編集に対処するには:

はい、できますが、ドキュメントもできます

なぜ機能し-xないのですか?

ドキュメントはそうしないと言っているので:

$SAFE >= 1
   * コマンドライン オプション -e、-i、-I、-r、-s、-S、および -x は使用できません。

[~]$ ruby​​ --help 使い方: ruby​​ [switches] [--] [programfile] [arguments] # 省略 -T[level=1] 汚染チェックを有効にする

したがって、-T数値なしで が指定されている場合のデフォルト レベルは です1。これは$SAFE >= 1、ドキュメントが言うことを正確に意味する :-x許可されていないことを意味します。

なぜ機能しないputsのですか?

実行しているコードを実際に提供していないため、言うのは難しいですが、ドキュメントにあるように、おそらく次のようになります。

$SAFE >= 4
   * ファイルまたはパイプに書き込めません。

于 2013-02-13T22:26:48.900 に答える
0

perl CGI FAQは、これについて私ができるよりもはるかにうまく説明しています。基本的に、これはパラメーターが検証済みであることを確認する方法です。

于 2013-02-13T22:26:55.950 に答える