2012-03-04 7 views
0

私はすべてのテストを自動的に実行し、失敗をチェックしています(単純に "ruby file.rb"でテストを実行して出力を解析します) ):ハッキングからスクリプトを保護する(ディレクトリを読み込んでファイルを変更する)

def failures?(test_file) 
    io = IO.popen("ruby #{test_file}") 
    log = io.readlines 
    io.close 

    # parsing output for failures "1 tests, 1 assertions, 0 failures, 0 errors" 
    log.last.split(',').select{ |s| s =~ /failures/ }.first[/\d+/] != "0" 
end 

puts failures?("test.rb") 

しかし、誰かが簡単に「test_file」にいくつかの悪質なコードを配置して、すべてをつぶすことができます。このようなハッキングからRubyスクリプトを保護するための方法である

Dir.glob("*") 
Dir.mkdir("HACK_DIR") 
File.delete("some_file") 

何?

+1

異なるOSには異なる権限モデルがあります。どのOSを使用していますか? –

+0

私は繰り返すことができます:あなたが安全にしたいならば、受け入れられた答えに示された助言に従わないでください。あなたはハッキングされます。 –

答えて

0

私はそれに似ていますが、「サンドボックス」という概念を使用しました。

最初に、あなたのOSファイル(もちろんテストファイルでもない)にもアクセス権のないテストユーザーを作成します。

テストシステムはまず、テスト用のルートフォルダ全体をサンドボックス(たとえば一時的な場所に作成)にコピーし、このサンドボックスに対してテストユーザーのアクセス許可を与え、テストユーザーとしてテストを実行します。

したがって、テスト実行ファイルの作成/変更/削除はこのサンドボックスに限定されています。また、このサンドボックスに残った死後のすべてのテストの後半で分析することができます。

これはLinuxで/ tmpディレクトリにフォルダを作成し、 "tester"という特別なユーザーを使って簡単に行いました。

これが役に立ちます。

+1

あなたの説明はサンドボックスではありません。コードは '/ etc/passwd'や潜在的に機密性の高いデータを含む設定ファイルのようなシステムファイルに対する読み取り権限を引き続き持っています。また、コードはインターネットに接続してコマンドを実行することもできます。たとえば、悪意のある人物がサーバーを試して悪用するために使用するリバースシェルを作成することができます。これはお勧めできません。少なくともRBACシステムや仮想マシンと組み合わせてRubyサンドボックスソリューションと組み合わせて、少なくともchroot、あるいはそれ以上のものを使用してください。 –

+0

非常に論理的な解決策、thanx!私はRubyを使ってこのようなスムースを実装しようとします。 – makaroni4

+0

Rubyのサンドボックスに関するプレゼンテーションをいくつか見つかりました: http://www.youtube.com/watch?v=6XxCOYco3Eg http://www.bestechvideos.com/2009/06/04/pivotal-labs-talks再生中にアップロードされたruby-code-in-a-sandbox – makaroni4