2011-01-06 7 views
0

Webアプリケーションを自動的に(つまりcron実行時に)設定して、リモートウェブサイトリモートWebサイトでは、POSTデータの一部としてユーザー名とパスワードの組み合わせを送信する必要があります。私は、WebアプリケーションがリモートWebサイトのPOST要求を、POSTデータと共に送信されるパスワードをユーザーが要求する度に、要求が行われるたびに行うことができないようにします。Webアプリケーションを設定して、HTTPを介してリモートWebサイトに自動的にリモートWebサイトを実行するように設定する

これを行う唯一の方法は、パスワードをデータベースに直接格納することです。そのため、cronの実行では、パスワードをPOSTデータの一部として含むPOST要求を実行できるようになります。データベースに何らかの形でパスワードを格納しなければ、要求が行われるたびにユーザーがパスワードを提供しない限り、POSTデータにパスワードを入力することは不可能であるようです。

質問1:私は誤解して何らかの理由で論理的なものを見落としていますか? 質問2:パスワードをデータベースに保存しなければならないと仮定した場合、最も安全な手順は何ですか? (MD5などの一方向の暗号化は、POSTリクエストで暗号化されていないパスワードを送信する必要があるため、明らかに機能しません)

ありがとうございました!

答えて

0

SSL(HTTPS)を使用することをお勧めします。サーバー側で認証局を作成し、生成したクライアント証明書にこの認証局が署名するようにすることができます。新しく作成された認証局を信頼するようにHTTPサーバーが構成されていることを確認します。

これが完了したら、クライアント側で証明書をインストールする必要があります。クライアントは、HTTPサーバーと通信するときに証明書を提示する必要があります。セキュリティ保護されたURLにPOSTするときは、信頼できる証明書を要求するようにHTTPサーバーを構成する必要があります。

Apache HTTPDでこれを行う方法の素晴らしい例は、right hereです。

私がリンクしているドキュメントには、認証局の設定方法と自己署名証明書の作成方法は記載されていませんが、多くの例があります。例えば、hereです。

。これは良い解決策です:クライアントの証明書の秘密鍵が盗まれたり侵害された場合はパスワードが明確な

  • に格納されていない

    • 、あなたはサーバー側
    • にそれを取り消すことができます

    ここで重要な点は、クライアントがサーバーに資格情報を提供していることです。これは通常ブラウザのコンテキストで行われていることとは逆です。クライアントに新しく作成された認証局を信頼させて、正しいサーバーと話していることを知って、真ん中の人ではないことを知ることもできます。

  • +0

    これは、データベースにパスワードを保存する以外に唯一実行可能なソリューションのようです。しかし、サーバー/認証局がリモートWebサイト(自分が所有していないか制御していない)にパスワードを送信する必要があることを考えると、このソリューションが実際にサーバーが実際のパスワードをリモートWebサイトPOSTリクエストで明確にするために、実際には、(A)ユーザー、(B)サーバー、(C)リモートWebサイトの3つのアクターがあります。 (C)が(B)からのパスワードを期待しているので、毎回(A)と話をしなくてもそれを提供できるようにしたい。 –

    +0

    送信するパスワードはありません。証明書はパスワードでロック解除する必要はありません。 http://en.wikipedia.org/wiki/Secure_Sockets_LayerでSSLについて読む。 Subversionを使った便利な具体例はhttp://joseph.freivald.com/linux/2009/05/14/subversion-ssl-and-apache-for-secure-passwordless-user-based-repository-access-controls/です。 – sjr

    +0

    リモートWebサイトは認証機関を実装しません。 Tumblrは役に立ちました。私はTumblrと通信するサイトを構築しています。彼らは、POSTデータとしてユーザー名とパスワードを提出する必要があります。 APIの要件です。 –

    1

    a。あなたがパスワードを知らない場合...あなたは認証できません、それはパスワードのアイデアです!

    b。パスワードを知る必要がある場合は、パスワードを復号化可能な方法で保存する必要があります。

    c。サイトを所有している場合は、タイムアウト値が非常に長いCookieを使用できますが、少なくとも1回は認証する必要があります。

    d。お金やロケット科学を守っていない限り、パスワードを暗号化してDBに格納し、使用するたびに解読する必要があります。少なくとも、あなたはDB盗難から守られています。

    e。パスワードがクリアテキストとして送信されないように、セキュリティで保護されたチャネル(https)で認証されていることを確認してください。

    +0

    ありがとうございます。ですから、パスワードを暗号化したバージョンをデータベースに保存しておく必要があります。実装できる双方向暗号化方式をお勧めしますか?あなたはそのような方法を私がどのようにインストールするかを記述する情報源を知っていますか?役立つなら、私はHerokuに配備されたRailsサイトで作業しています。 (それが助けにならなければ、私たちは要約に問題を残すことができます。)ありがとうございます! –

    +0

    +1クッキーについて語っているので、ログイン/パスワードポスト認証がクッキーストレージを扱うことは確実にsesionsクッキーに基づいています。そしてすべてがそこにあります。私は、cronジョブが別のデータベースアクセスとWebアプリケーションとして別のコードで実行できるので、cronジョブだけがアクセスできる場所(別のテーブルのdb?file?)にこれらのパスワードを保存できると付け加えます。 – regilero

    +0

    @モリス - あなたの質問に - あらゆる暗号化は良いです、それはあなたが何を守っているか、そして誰にかかっているかによって異なります。強力な暗号化は素晴らしいですが、あなたが鍵を守らなければ、価値がありません。今、どこで鍵を隠すのか - 最終的には、攻撃者がどこで攻撃するかを決める必要があります。 – Dani

    0

    パスワードをクリアテキストで送信し、ユーザーとのやりとりなしに繰り返し行う必要がある場合、データストア(ファイル/データベース/メモリ)からパスワードを保存して取得する必要があります。

    あなたが本当に考慮する必要があるのは、パスワードストアの最終行セキュリティです。

    暗号化するかどうかは関係ありません。データまたは暗号鍵にアクセスできる人/プログラムは、そのパスワードを読み取ることができます。

    この問題を整理して文書化してください(これがアプリのセキュリティポリシーになります)。

    セキュリティは、リスクを軽減するために実装するレベルの難しさです。

    +0

    ありがとう、ライアン。あなたのアプローチでは、データベースにパスワードを格納することは、本質的に避けるべき習慣ではありませんが、そのようなストレージを避けることが自分のサイトにセキュリティを提供する最良の方法であるかどうかを検討するべきです。これは私が安全な方法でパスワードを保存できると思うようになります。私は双方向の安全な方法が必要です(つまり、私のWebアプリケーションはパスワードを解読できますが、他の方はできません)。このようなものはありますか?何かお勧めできますか?助けてくれてありがとう。 –

    +0

    >「これは安全な方法でパスワードを保存できると思うようになります。 - 「自分の目的のために十分に安全」を読むべきです。そのため、パスワードを暗号化して鍵を保護することができます。鍵を安全にする最後の手段です。この鍵をセキュリティで保護する方法では、Webアプリケーションだけがアクセスできると思うように、あなたの解決策があります(はい、セキュリティレベルになります)。その方法に関連する可能性のあるリスクを受け入れる必要があります少なくとも1つは、私を信頼してください)。セキュリティに対する終わりはなく、受け入れるリスクのレベルだけです。 –

    0

    幸いにも、Tumblrはこの問題を解決するOAuthを実装しています。

    関連する問題