0

ここで私のソフトウェアで状況が発生し、多くの頭痛の種になる可能性があります。できる限り説明しようと思います。

実際には 3 つの環境があり、3 つの環境すべてで同じ登録、ログイン、および回復システムを使用しています。しかし、それらのそれぞれは適切に分離されています。構造が次のようになっているとしましょう。

  • 管理者/
  • 店/
  • サプライヤー/

上記の構造には、クラスに Register、Log In、および Recovery メソッドが含まれていますが、コードは同じです。まとめて作成され、それらを分離するための識別コードが作成されることはわかっていましたが、ソフトウェアがこのように成長することは計画されていなかったため、状況が発生しました。;(

たとえば、管理者アカウントにログインしたときに最初に問題が発生し、セッションなしで Store/ 環境 (アカウント) にアクセスしようとしました (もちろん、使用されたセッションは管理者アカウントでした)。私はアクセス権を取得しましたが、あるサプライヤが問題について知っていたり、ストアの顧客がこれについて知っていたりするのは安全ではありません。

この種の問題を防ぐにはどうすればよいですか? コードを書き直しますか?または、セッションコードに書き込める回避策はありますか?

ありがとう!

4

1 に答える 1

2

を使用session_name()して、セッション ID を保存するために使用する Cookie 名を定義できます。この方法で、同じホストの下で異なる環境に名前を付けて分離できます。呼び出す前に使用してくださいsession_start()

たとえばsession_start()、管理エリアでのすべての呼び出しは、次のように開始する必要があります。

session_name("ADMINSESSID");
session_start();

そして、Store と Supplier と同様のことを行います。

別々の$_SESSION環境で機能しますが、そのセキュリティ面については完全にはわかりません (たとえば、サプライヤー セッション ID を管理者セッション ID として使用するように Cookie を編集するなど)。おそらく、$_SESSIONそれが属する環境をそれぞれマークする必要があります。

ログイン時:

// if user authenticated successfully to that environemnt
$_SESSION['environment'] = session_name();

同じサイト エリア内の他の場所:

if ($_SESSION['environment'] != session_name())
    die('Access violation.');
于 2013-06-28T23:41:20.377 に答える