Webサイトの管理セクションを保護するためのベストプラクティスは何ですか?[閉まっている]


92

特に認証/アクセスの観点から、ウェブサイトの管理セクションを保護するためのベストプラクティスを人々がどのように考えているかを知りたいのですが。

もちろん、SSLを使用したり、すべてのアクセスをログに記録したりするなど、明らかなことはありますが、これらの基本的な手順の上のどこに人々がバーが設定されていると考えているのでしょうか。

例えば:

  • 通常のユーザーに使用するのと同じ認証メカニズムに依存していますか?そうでない場合、何ですか?
  • 同じ「アプリケーションドメイン」で管理セクションを実行していますか?
  • 管理セクションを未発見にするためにどのような手順を踏んでいますか?(または「あいまいな」こと全体を拒否しますか)

これまでのところ、回答者からの提案は次のとおりです。

  • ブルートフォース攻撃を防ぐために、各管理者パスワードチェックに人工的なサーバー側の一時停止を導入します[開発者向けアート]
  • ユーザーと管理者が同じDBテーブルを使用して別々のログインページを使用する(管理エリアへのアクセスを許可するXSRFとセッション盗用を停止するため)[Thief Master]
  • Webサーバーのネイティブ認証を管理領域に追加することも検討してください(例:.htaccess経由) [Thief Master]
  • 多数の管理者ログイン試行の失敗後にユーザーのIPをブロックすることを検討してください[Thief Master]
  • 管理者のログイン試行が失敗した後にキャプチャを追加する[Thief Master]
  • ユーザーと管理者に(上記の手法を使用して)同等に強力なメカニズムを提供します(たとえば、管理者を特別に扱いません)[Lo'oris]
  • 2番目のレベルの認証を検討してください(クライアント証明書、スマートカード、カードスペースなど)[JoeGeeky]
  • 信頼できるIP /ドメインからのアクセスのみを許可し、可能であれば、基本的なHTTPパイプラインに(たとえば、HttpModulesを介して)チェックを追加します。[ジョーギーキー]
  • [ASP.NET] IPrincipalとPrincipalをロックダウンします(それらを不変で列挙できないようにします)[JoeGeeky]
  • フェデレート権限の昇格-たとえば、管理者の権限がアップグレードされたときに他の管理者にメールを送信します。 [ジョーギーキー]
  • 管理者にきめ細かい権限を検討します。たとえば、役割ベースの権限ではなく、管理者ごとに個別のアクションの権限を定義します[JoeGeeky]
  • 管理者の作成を制限-たとえば、管理者は他の管理者アカウントを変更または作成できません。これには、ロックダウンされた「superadmin」クライアントを使用します。[ジョーギーキー]
  • クライアント側のSSL証明書、またはRSAタイプのキーフォブ(電子トークン)を検討する[Daniel Papasian]
  • 認証にCookieを使用する場合は、たとえばadminセクションを別のドメインに配置するなどして、adminページと通常のページに別々のcookieを使用します。[ダニエルパパシアス]
  • 実用的な場合は、管理サイトをプライベートなサブネット上に置いて、パブリックインターネットから切り離すことを検討してください。[ジョンハートソック]
  • Webサイトの管理/通常の使用コンテキスト間を移動するときに認証/セッションチケットを再発行する[Richard JP Le Guen]

2
ただ考えただけです。おそらく管理セクションを保護するための最良の方法は、それを公共のインターネット上に置かないことです。管理サイトをプライベートサブネットにのみ保持することもできます。
John Hartsock、

1
あなたが指定したこれらのアイデアのどれが管理者だけでなく、すべてのユーザーに適用するのは良い考えではありませんか?
ビビアン川

weloginproject.comでWebLoginProjectを確認することをお勧めします。これは、XSS、SQLインジェクション、セッション固定、およびCSRFの脆弱性から保護されるように設計された共同ログインシステムです。ASPとPHPのソースコードがあり、多言語であり、見た目もかっこいいです。多くの開発者が穴を修正するために取り組んでいるので、これはおそらく可能な限り安全に近いです。
10

ひどく間違った "強力なパスワード"(実際には非常に弱いパスワードです)を含めるための-1 提案
o0 '。

@Lohoris-なぜあなたがこの質問に反対票を投じたのか本当に理解できません。あなたが同意しないという誰かの提案を要約したので、あなたは反対票を投じていますか?おそらく、関連する回答の反対票を投じるほうがより建設的でしょう。:/何が問題なのか正確に説明できますか?
UpTheCreek 2012年

回答:


18

これらはすべて良い答えです...私は通常、管理セクションにいくつかの追加レイヤーを追加したいです。私はテーマにいくつかのバリエーションを使用しましたが、通常は次のいずれかが含まれています。

  • 2番目のレベルの認証:これには、クライアント証明書(例:x509証明書)、スマートカード、カードスペースなどが含まれます。
  • ドメイン/ IP制限:この場合、信頼できる/検証可能なドメインからのクライアントのみ。内部サブネットなど。管理領域へのアクセスが許可されています。リモート管理者は、多くの場合、信頼できるVPNエントリポイントを通過するため、セッションは検証可能であり、RSAキーで保護されることもよくあります。ASP.NETを使用している場合は、HTTPモジュールを介してHTTPパイプラインでこれらのチェックを簡単に実行できます。これにより、セキュリティチェックが満たされていない場合にアプリケーションがリクエストを受信できなくなります。
  • IPrincipal&Principal-based Authorizationのロックダウン:カスタムプリンシパルを作成することは一般的な慣例ですが、よくある間違いはそれらを変更可能にしたり、権利を列挙可能にしたりすることです。これは単なる管理者の問題ではありませんが、ユーザーが高い権限を持っている可能性が高い場所なので、より重要です。それらが不変であり、列挙できないことを確認してください。さらに、承認のすべての評価がプリンシパルに基づいて行われることを確認してください。
  • フェデレート権限の昇格:アカウントが選択した数の権限を受け取ると、すべての管理者とセキュリティ担当者にメールですぐに通知されます。これにより、攻撃者が権利を昇格した場合、すぐにそれを知ることができます。これらの権利は一般に、特権、プライバシーで保護された情報を見る権利、および/または金融情報(クレジットカードなど)を中心に展開します。
  • 管理者であっても、権限を慎重に発行します。最後に、一部のショップではこれを少し高度にすることができます。承認権はできるだけ控えめにする必要があり、実際の機能動作を囲む必要があります。典型的なロールベースのセキュリティ(RBS)アプローチは、グループの考え方を持つ傾向があります。セキュリティの観点からは、これは最良のパターンではありません。「ユーザーマネージャー」のような「グループ」の代わりに、さらに細かく分解してみてください(例:ユーザーの作成、ユーザーの承認、アクセス権の昇格/取り消しなど...)。これにより、管理の面で少しオーバーヘッドが増える可能性がありますが、これにより、大きな管理者グループが実際に必要とする権限のみを割り当てる柔軟性が得られます。アクセスが危険にさらされた場合、少なくともすべての権利を取得できるとは限りません。これを.NETとJavaでサポートされているコードアクセスセキュリティ(CAS)アクセス許可でラップしたいのですが、それはこの回答の範囲を超えています。もう1つ... 1つのアプリでは、管理者は他の管理者アカウントの変更を管理したり、ユーザーを管理者にすることはできません。これは、ロックされたクライアントを介してのみ行うことができ、クライアントは数人しかアクセスできません。

19

フォーラムなど、通常のアクティビティと管理者の両方にログインが必要なWebサイトの場合、同じユーザーデータベースを使用する個別のログインを使用します。これにより、XSRFとセッション盗用によって、攻撃者が管理領域にアクセスすることはできなくなります。

さらに、adminセクションが別のサブディレクトリにある場合は、Webサーバーの認証(Apacheの.htaccessなど)でセキュリティ保護することをお勧めします。その場合、誰かがそのパスワードとユーザーパスワードの両方を必要とします。

管理パスを覆い隠しても、ほとんどセキュリティ上の利点はありません。誰かが有効なログインデータを知っている場合、フィッシングまたはキーログを記録したか、ソーシャルエンジニアリングを介して取得したため、管理ツールのパスを見つけることもできます(おそらく、パスも)。

ログインが3回失敗した後にユーザーのIPをブロックしたり、ログインが失敗した後にCAPTCHAを要求したりするようなブルー​​トフォース保護(最初のログインではなく正当なユーザーにとっては非常に煩わしいため)も役立つ場合があります。


8
  • あいまいさを拒否する
  • 1つではなく2つの認証システムを使用するのはやり過ぎです
  • 試行間の人工的な休止は、ユーザーに対しても行う必要があります
  • 失敗した試行のIPのブロックは、ユーザーに対しても行う必要があります
  • ユーザーも強力なパスワードを使用する必要があります
  • captchasが大丈夫だと思うなら、何を推測すれば、ユーザーにも使用できるでしょう。

はい、それを書いた後、私はこの答えが「管理者ログインに特別なものは何もない、それらはすべてのログインに使用する必要があるすべてのセキュリティ機能です」と要約できることに気づきました。


6
答えてくれてありがとう。個人的には、たとえば、「ksd83、」| 4d#rrpp0%27&lq(go43 $ sd {3> 'のようなパスワードで満足するでしょうか?そして、有効なユーザーが不必要な管理/顧客サービス作業を生成するのを忘れている?個人的には、リスクのレベルが異なると、異なるアプローチが正当化されると思います
UpTheCreek

1
管理者パスワードは複雑であるべきですが、過度に複雑であってはなりません。そうしないと、管理者でさえそれを覚えておらず、どこかに書き留めてしまいます(すべてのセキュリティルールを無視するように強要します)。試行が失敗したIPを一時的にブロックすることはかなり標準的です。vbulletinがそれを実行し、phpbbがIIRCを実行します。ユーザーはそれに慣れています。
o0 '。

セキュリティのベストプラクティスとしてphpbbやvbulletinを実際に使用したくありません;)
UpTheCreek 2012年

もちろん@UpTheCreek、同意する!「有効なユーザーが不必要な管理/カスタマーサービス作業を生成することを忘れたことによってトリガーしたIPブロックをリセットしないのという質問をしたところです。 <-ユーザーは既に使用されているため、問題になるとは思いませんこのような機能に。
o0 '。

3

通常のユーザー特権と管理者特権の両方を持つユーザーに対して単一のログインのみを使用する場合は、レベルが変更されたときにセッション識別子(CookieまたはGETパラメータなど)を再生成します。特権...少なくとも。

そのため、ログインした場合、通常のユーザー操作を行ってから管理ページにアクセスし、セッションIDを再生成します。その後、管理ページから通常のユーザーページに移動した場合は、IDを再生成します。


これが何を達成するか説明していただけますか?
Denis Pshenov 2016


これはあなたが思うほど助けにはならないと思います。攻撃者が通常のユーザーページで現在のセッションIDを取得できる場合、攻撃者はそれを使用して管理ページにアクセスし、自分自身に新しいセッションIDを生成できます。私が間違っていたら訂正してください。
Denis Pshenov 2016

1
しかし、攻撃者はパスワードなしでは管理ページにアクセスできません。認証が完了するまで、特権レベルに変更はありません。セッションIDの再生成に失敗すると、安全でない方法で作成されたセッションを再利用して認証を回避できるようになります。
Richard JP Le Guen 2016

了解しました。ユーザーが通常のコンテキストと管理コンテキストを切り替えたときに、ユーザーが再ログインする必要がないシナリオについて説明したと思っていました。
Denis Pshenov 2016

1

適切な管理者パスワードを用意してください。

"123456"15文字から20文字など、十分に長い文字、数字、特殊文字のシーケンスではありません。のように"ksd83,'|4d#rrpp0%27&lq(go43$sd{3>"

ブルートフォース攻撃を防ぐために、パスワードチェックごとに一時停止を追加します。


「一時停止」とは何かについて少し説明してもらえますか?Thread.Sleep(5000)のようなことを行って、時間をつぶすだけですか?
地球人

5
これは愚かです:覚えるには複雑すぎるパスワードはどこかに書き留められる(または保存される)ため、本当に良いパスワード(つまり、コピーして貼り付けるのではなく覚えておくために入力されるパスワード)を許可する場合よりも事態はさらに悪化します。 )。
o0 '。

3
ああ、私はこのがらくたを石器時代にまで下げることができればいいのに、それはとても愚かなので、間違っています...このような誤報を広める人々は嫌いです。
o0 '。

1
@ Lo'oris:あなたが反対することは何ですか?

2
私はそれを書いた...上のようなコメント...
o0 '。

1

考慮すべきその他の事項を以下に示します。

  1. 特に管理者のコンピューターを管理している場合、または技術的に優れている場合は、SSL認証に基づいたものをクライアント認証に使用することを検討してください。RSAキーフォブやwhatnotを使用して、セキュリティを強化することもできます。
  2. おそらく認証/セッショントークンのためにCookieを使用している場合、おそらくCookieが管理ページにのみ送信されるようにする必要があります。これにより、レイヤー1/2の侵害またはXSSによってCookieを盗むことで、サイトにもたらされるリスクを軽減できます。これは、adminの部分を別のホスト名またはドメインに配置し、Cookieでセキュアフラグを設定することで簡単に実行できます。
  3. IPによる制限もスマートになり、ユーザーが参加できる信頼できるVPNがあれば、インターネット全体にユーザーがいる場合でもこれを行うことができます。

1

Windows Authentication管理者アクセスに使用します。これは、一般的なエンドユーザーに適用されるものから認証を分離しながら、管理領域を保護する最も実用的な方法です。システム管理者は、管理ユーザーのアクセス資格情報を管理し、ドメインユーザーアカウントにパスワードポリシーを適用します。


-1

厳密な方法は、データベース、サーバー、およびすべてを含む2つの完全に異なる "ファーム"を用意し、データを1つのファームから別のファームに移動することです。最新の大規模システムのほとんどがこのアプローチを使用しています(ビネット、SharePointなど)。通常、「編集ステージ」->「プレビューステージ」->「配信ステージ」と呼ばれます。この方法では、コード(dev-> qa-> prod)と同じ方法でcontent / configを処理できます。

それほど偏執狂的でない場合は、単一のデータベースを使用できますが、「編集」サーバーで使用できるのは管理セクションのみです。つまり、編集サーバーに置かれているのは編集スクリプト/ファイルのみです。

当然のことながら、編集段階はローカルイントラネット上またはVPNを使用してのみ利用できます。

これは少しやり過ぎに見えるかもしれませんが、すべての使用例にとって最も簡単な解決策ではないかもしれませんが、物事を行うための最も確実な方法です。

「強力な管理者パスワードを持っている」などの方法は便利ですが、管理者はあらゆる種類のスマートな攻撃に開放されたままであることに注意してください。


これは、データを処理するのではなく、コンテンツをプッシュしている純粋なCMS /公開の状況でのみ実際に役立つ/実用的だと思います。
UpTheCreek

たぶん、しかし、私はこれが処理とユーザー入力のためにも行われる状況を知っています(そして見ました)。個別の編集サーバーを備えた単一のファームの場合、それは簡単です。複数のファームの場合、サイトからの入力がキュー(DBなど)に送られ、外部プロシージャを使用して処理され、「編集」サーバー/ DBにコピーされます。これにより、システムに何が入るかをより詳細に制御できます。ただし、実装は複雑です。
Nir Levy

-2

保護するデータの種類(法的要件など)に大きく依存します。

  • 提案の多くは認証に関するものです。ログインとしてOpenId / Facebook認証を使用することを検討する必要があると思います。(彼らはおそらくあなたよりも認証セキュリティに多くのリソースを費やすでしょう)

  • 変更を保存するとともに、データベースの値を更新します。これにより、ユーザーXから、または日付XとYの間の変更をロールバックできます。


1
Webサイトの管理セクションのFacebook認証...本当にそれが良いアイデアだと思いますか?一般ユーザー向け、はい...しかし、管理セクション用ですか?私に少し危険を感じます...
Richard JP Le Guen

よく分かりません。このサイトはopenid認証のみを実行していると思います。そして、Facebookの認証とopenidの間に(理論的には)大きな違いはないと思います。しかし、私はライセンス契約などを読んでいません。
Carl Bergquist、2010年

1
管理者認証のopenidが非常に悪い考えです。また、ほとんどの場合、ロールバックは不可能であり、悪者はシステム内ですべて準備ができています...どのようなロールバックですか?
アリストス

あなたが悪いと思う理由を自由に説明してください。まあ管理者としてログオンすると、データベースとバックアップへの完全なアクセス権が与えられれば、ロールバックするのは困難ですが、その場合はすべての準備ができなくなります。私の提案はcmsischサイトを対象にしています。
Carl Bergquist、2010年

-3

管理者パスワードの保存/検証について言及している人は誰もいませんでした。PWをプレーンテキストで保存しないでください。できれば元に戻すことができるものも含めないでください。少なくとも、誰かがたまたま保存されている「パスワード」を取得した場合に備えて、ソルト MD5ハッシュのようなものを使用してください。彼らがあなたのソルトスキームも持っていない限り、ものすごく便利なもの。


1
md5の場合は-1。md5ingに関する他の問題を超えてさえ、あなたはパスワードの高速ハッシュを望んでいません。bcryptはより良いオプションです。
Kzqai

-4

パスワードフィールドと、最初のガールフレンドの名前など、管理者が知っているセキュリティの質問を追加するか、管理パネルを表示するたびに質問をランダム化します。

おそらく、管理セクションを大きなディレクトリに常に置くことができます。

http://domain.com/sub/sub/sub/sub/sub/index.php

しかし、それは本当に良いことではありません。

おそらく、次のようにホームページにクエリ文字列を含めることができます。

http://domain.com/index.php?display=true

その場合、ユーザー名とパスワードのフィールドが表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.