3. Security in rdoc
rdocでのSecurityについての説明
== Security
As with all network services, security needs to be considered when
using dRuby. By allowing external access to a Ruby object, you are
not only allowing outside clients to call the methods you have
defined for that object, but by default to execute arbitrary Ruby
code on your server. Consider the following:
参考訳:
あらゆるネットワークサービスと同様に、dRuby を使う場合には
セキュリティを考慮することが欠かせない。
ある Ruby オブジェクトへの外部のアクセスを許すことによって、
そのオブジェクト向けにあなたが定義したメソッドを
外のクライアントが呼び出すことを許しているだけだはなく、
そのままだとあなたのサーバ上で任意の Ruby コードを実行する
ことを許していることになる。
2/10
4. undef and
instance_eval
rdocに載っている方法 (undefと
instance_eval)
# !!! UNSAFE CODE !!!
ro = DRbObject::new_with_uri("druby://your.server.com:8989")
class << ro
undef :instance_eval # force call to be passed to remote object
end
ro.instance_eval("`rm -rf *`")
本当にこのまま試すのは危険
3/10
6. insecure methods
# List of insecure methods.
#
# These methods are not callable via dRuby.
INSECURE_METHOD = [
:__send__
]
drb/drb.rb で禁止されているメソッド
直接呼べない
instance_eval などと組み合わせれば呼べる
send も呼べるのでほとんど制限はない 5/10