1

LDAPActiveDirectoryサーバーを介したユーザー認証を会社のWebサイトに統合することに関するいくつかの質問に遭遇しました。Webサイトは主に、ファイル/PDFへの安全なアクセスを提供するために内部的に使用されます。特定の顧客は注文と確認のためにファイルを表示/アップロードできる必要があるため、このサイトにはネットワークの外部からアクセスできます。内部および外部のサイトへの安全なアクセスのために、SSL証明書を用意しています。

現時点では、サイトはパスワード処理にPHPassを使用し、ユーザー情報をMSSQLServerデータベースに保存しています。サイトへのアクセスが必要なユーザーがこのデータベースに追加され、アカウントレベルが登録され、phpassがパスワードの側面を処理します。この方法は非常に安全であり、現在の使用法(内部の従業員、外部の顧客の分離されたデータ)に対して正常に機能します。ただし、システム全体でより多くの障害点が発生します。IE:ユーザーが覚えておく(または忘れる)ための追加のパスワードと、管理者のための追加のアカウント管理オーバーヘッド。

サイトの認証を合理化することを計画する際に、私はログインに利用されるActiveDirectoryユーザー情報を統合することを任されました。すでにADアカウントを持っているので、これは当社の従業員にとってはうまくいくでしょう。ただし、これ外部のベンダーや顧客には機能しません。これは、外部のベンダーや顧客が認証対象のADアカウントを持っていないためです(すべきではありません)。

これにより、最も簡単な解決策は、(ADに対する)「メイン」形式の認証と、作成済みのSQLユーザーDBに対するフォールバックを使用することであると私は信じています。ADの場合と同じように戻ってきたユーザーは、それらの資格情報を使用します。それ以外の場合は、SQL DBでユーザーを検索します(必要なAD以外のアカウントが含まれます)。

質問:

  • 上記の検証方法は論理的で安全な計画ですか?そうでない場合は、代わりに何をすべきですか?
  • LDAP攻撃/ブルートフォースからどのように保護しますか?
    • PHP / SQLでは、パラメーター化/型キャストクエリ、アカウントのロックアウト/タイムアウト、一般的なエラーメッセージ、適切なパスワードハッシュ方法などを利用して、データベースを保護し、ログインを強制的に試行します。
    • ldap_bindの場合、ユーザー名とパスワードはネットワークを介してLDAPサーバーに平文で送信されますか?
  • このログインはネットワーク全体を対象としているため、ログイン/サイトがセキュリティの最も弱いリンクではないこと、またはパスワード情報へのアクセスが過度に容易にならないようにするにはどうすればよいですか?

注:私の問題はセキュリティのためにPHP Webサイトをプログラミングすることであるため、これはServerFaultではなくStackOverflowに投稿されました。私の質問は、何よりもまず、ADまたはバックアップデータベースへの認証中のユーザーログインのWebサイトへのアクセス、制限、およびアクセス許可の問題に関連しています。

4

2 に答える 2

0

Drupalを見ると、LDAP認証モジュールはほぼ同じことを行います。ユーザー(つまり請負業者)のDrupalアカウントが見つからない場合は、LDAPに移動し、そこで認証を試みます。LDAPの場合、パスワードを独自のデータベースに保存することはありません。そうです、あなたの計画は以前に行われており、多かれ少なかれ受け入れられているようです。私はかつてdrupalログインを使用するdrupalモジュールを作成し、CASシステムがオンラインでない場合はLDAPフォールバックを備えたCASシステムを作成しました。

LDAPサーバーをブルートフォースから保護するには、通常、ドメインレベルのホワイトリストに登録します。私はほとんどすべてにLDAPサーバーを使用している大学で働いており、一部の情報はパブリックドメインにあり、一部はさまざまな連邦法に準拠するために非表示になっています。特定の情報にアクセスできるのは、その情報にアクセスするための十分な権限を持つアカウント(つまり、電子メール、リストにないアドレスなど)でサーバーにバインドされている間、大学ネットワークからの要求によってのみアクセスできます。パスワードが適切で定期的に変更されている限り、問題はありません。認証にLDAPを使用することを特定のサービスのみに制限し、WebサイトまたはLDAPサーバーのいずれかを作成することができます(このように構成できるかどうかはわかりません... しかし、誰が知っていますか?おそらく)失敗したログイン試行の数を追跡し、5回失敗した後にその人を5分か何か待たせることができます。

サーバーと通信するときは、LDAPを使用して平文で送信しないようにする必要があります。Mac用のZendサーバーを使用していない限り、これは非常にうまく機能し(LDAPが好きではなく、サーバーをハングさせる特定のバージョンのPHP)、人々がトラフィックを盗聴してWebサイトを最も弱いリンクにするのを防ぎます。また、ユーザーのパスワードをサイトに保存しないでください。また、ログインページでユーザーがhttpsを使用していることを確認してください。

于 2012-04-26T14:16:51.557 に答える
0

現在LDAPアカウントを持っていないということは、2層アプリケーションを作成する理由ではありません。これは2倍の脆弱性があるだけではありません。独自の認証バックエンドを実装することにより、それに伴うすべてのユーザー管理者も実装する必要があるためです。外部ユーザーのアカウントを追加するだけですが、ワークステーションへのアクセスを許可しないでください。

于 2012-04-26T15:49:42.840 に答える