5

私のrubyスクリプトでは、ユーザー名と

  • ログインするためのフォームのプレーンテキストとしてのパスワード。現在、ユーザー名とパスワードの両方がスクリプトに保存されています。

  • スクリプトからログインするサーバーを制御できません。スクリプトはローカルで正常に機能しており、将来的には自分のスクリプトに移動したいと思います

  • ウェブホスティングプロバイダーとそこから実行します(私はsshアクセスがあります)

  • cronを使用します。方法/方法はありますか

  • 万が一誰かがこのスクリプトにアクセスした場合に備えて、パスワードを保護しますか?

4

4 に答える 4

1

私がこれについて考えれば考えるほど、あなたはあなたのホスティングサービスを信頼しなければならないと思います。ホスティングサービスに「ゲーム内のスキン」があることを確認します。つまり、信頼できないと判断された場合(アカウントの紛失や販売において)非常にコストがかかるほどの「注目度の高い」アカウントをホスティングします。

そして、ホスティングサービスが信頼できると思うかどうかにかかわらず、ターゲットアカウントが危険にさらされた場合に備えて計画を立てる必要があります。誰に通知するか、そのアカウントをどのように無効にするかなど。

私が考えることができる唯一の技術的解決策-手動でログオンし、Cookieをキャプチャし、そのCookieをスクリプトに提供する-はパスワードを保護しますが、おそらく敵対的なホストはそのCookieを使用して、ターゲットに必要な損害を与える可能性がありますパスワードの変更など、そのCookieに付加されている特権を使用するシステム。したがって、それはまったく解決策ではありません。

ああ、特権について言えば、自動化する必要のあるタスクは、読み取り専用アカウントなどの特権が低下したターゲットアカウント、またはプロファイルを変更できないターゲットアカウントで実行できますか?ホスティングサービスに低特権のクレデンシャルだけがあると、リスクが低くなります(または、多音節の群衆が言うように、「露出」)。

境界線より下で、実行不可能であることが判明した以前の回答。


さらに別のパスワードを使用して、ユーザーIDとパスワードを暗号化できます。実行するには、スクリプトにパスワードを指定する必要があります。そのパスワードを使用して、Webサービスのユーザー名とパスワードを復号化します。スクリプトのパスワードがどこにも保存されないようにしますが、メモリに保持されるだけで、最終的なユーザーIDとパスワードを復号化するのに十分な時間だけ保持されます。

それが本当に重要な場合は、スクリプトを実行するための接続が暗号(ssh、sslなど)であることを確認し、スクリプトがログオンにhttpsのみを使用することを確認してください。

これにより、ボックスのroot権限を持つユーザーに対して無防備になることはありません(ある時点で、プレーンテキストのユーザーIDとパスワードがメモリ内にあるため、脆弱になります)が、ユーザーができるようになるには、より多くの作業が必要になります。ユーザーID/パスワードを取得します。

更新:これを自動化する必要があるため、上記のソリューションは適切ではありません。

于 2010-02-14T11:05:57.223 に答える
1

より安全なスキームを使用するために変更できないと思われるフォームにパスワードを渡す必要がある場合は、パスワードを難読化してすぐにわからないようにする以外にできることはほとんどありません。ただし、スクリプト自体にアクセスできる人は誰でも、フォームに渡された場所を見つけて、そこにパスワードを出力するコマンドを挿入するだけで済みます。パスワードを渡すには、その時点で「復号化」する必要があります。 .

プログラマー以外から保護するために、XOR を使用したり、文字をある程度回転させたりすることができますが、プログラミングの初歩的な理解を持つほとんどの人にとっては無駄になるため、これにはあまり時間をかけません。代わりに、スクリプト自体を他のユーザーから保護してください (ファイル アクセス権を適切に設定する、Web から見えるディレクトリに配置しないなど)。また、サーバーの管理が信頼できない場合は、そこにアップロードしないでください。

于 2010-02-15T01:27:24.700 に答える
1

自動化されたスクリプトでパスワードを使用して何かを実行する必要がある場合は、スクリプトで読み取れるようにする (他の誰かがそれを読み取る可能性が生じる) か、自動化で提供しないようにする必要があります。

秘訣は、1 回限りの起動で「自動化」部分をバイパスすることです。定期的に起動して実行する小さな継続的なプロセスとしてスクリプトを実行します。起動時に、または他の種類の API リクエストを介してプロセスにパスワードを要求させます (コマンド ラインではありません!)。

サーバーが再起動すると、ログインして再度パスワードを入力するまで、パスワードは失われます。このように、パスワードはファイル システムではなく、メモリ内にのみ存在します。

cron ジョブでプロセスをチェックし、プロセスが実行されていない場合は警告することができます。

于 2010-02-14T20:57:26.603 に答える
0

パスワードのハッシュ バージョンをデータベースに保存する必要があります。ハッシュは一方向の暗号化であるため、ロジックを使用してハッシュされたパスワードからパスワードを推測することはできません。

パスワードをハッシュするメソッドを作成し、次のようにします。

require "digest/sha1"
class User
  attr_accessor :password

  def initialize(password)
    @password = hash_password(password)
  end

  def hash_password(password)
    Digest::SHA1.hexdigest(password)
  end

  def valid_password?(password)
    @password == hash_password(password)
  end
end

u = User.new("12345")
p u.password # => "8cb2237d0679ca88db6464eac60da96345513964"
p u.valid_password?("not valid") # => false
p u.valid_password?("12345") # => true

フォームから平文のパスワードを取得したら、それをvalid_password?メソッドに渡します。これにより、パスワードが保存されたときと同じ一方向の暗号化が行われます。したがって、一方向の暗号化されたパスワードが比較されます。これは、実際のパスワードへの参照をどこにも保存しないことを意味します。これは大きなメリットです。

于 2010-02-14T11:12:08.100 に答える