web-dev-qa-db-ja.com

セキュリティ上の理由から、アプリケーションをユーザー部分と管理部分に分割しますか?

私は現在、ユーザーを管理する機能を必要とするアプリケーションを開発しています。ハッカーが管理セクションにアクセスできる場合、彼は機密情報にアクセスでき、ユーザーアカウントなどを削除することができます。

そのため、アプリケーションを2つのアプリケーションに分割するというアイデアがありました。1つはユーザーのパブリックサーバーでホストされ、もう1つは特定のネットワーク内からのみアクセス可能なプライベートサーバーでホストされます。

私はアプリケーションのセキュリティにかなり慣れていないので、これが良いアイデアであるかどうか、またそうでない場合は、なぜ誰かに教えてもらえますか?

14
Jonas Wirth

はい、それは良い考えです。アプリケーションで許可されている場合、たとえば、管理インターフェースにのみアクセスできることを確認することで、展開に 最小権限の原則 を適用できるようになります。安全な」ネットワーク。

スタック全体に同じ原則を適用することでさらに改善できます。OSとデータベースセキュリティシステムを使用して、アプリケーションのさまざまな要素が本当に必要なデータの部分にのみアクセスできるようにします。

主なリスクは、全体をオーバーエンジニアリングすることです。アプリケーションを分割することは、異なる部分が互いに通信するためのメカニズム(API)を定義することを意味します。これは、潜在的な攻撃者の攻撃面を増やす可能性がある、アプリケーションセキュリティの見落とされがちな側面です。

21
Stephane

ステファンのように、それはあなたのセキュリティを助けることができると私は同意しますが、それは例で行きます:

アプリケーションのどこかに「メールアドレス」、「ユーザー名」、「パスワード」を保持する「ユーザーデータ」があるとします。 (おそらくDB内)

2つのDBアカウントを作成できます。 1つのアカウントは「Nobody」と呼ばれ、もう1つは「Admin」と呼ばれます。

「Nobody」は通常のサイトで使用されており、次のことができます。

  • アカウントを作成する
  • DBにユーザーとパスワードの組み合わせが正しいことを確認します
  • 古いパスワードが新しいパスワードと共に提供されている場合は、パスワードを変更します

一方、「管理者」はそのテーブルへの完全なアクセス権を持ち、必要なことをすべて実行できます。

この方法で行うことの利点は、公開サイトが危険にさらされている場合でも、ハッシュされたすべてのパスワードに攻撃者が(まだ)フルアクセスできないことです。クリーンアップはまだ混乱しますが、彼がユーザーアカウントを自由に読み取ったり変更したりできる場合に比べて、混乱は少なくなります。

そして、はい、私は、誰かが自分のパスワードを忘れた場合にどうなるかなど、多くの詳細を無視しています。

1
Patrick M