この特定の分野については本当にたくさんの質問があります。session
しかし、基本的には、最も効率的で安全な php通信方法を作成する方法を知りたいだけです。私はこれについて話している非常に多くのウェブサイトを読みましたが、それらは私の現在の状況に同意または関連していないようです.
私の問題は、ログイン、セッション、Cookie、登録などを適切に作成して、高いセキュリティレベルに合わせる方法がわからないことです。これがこれまでの私の考えです。
1. PHP セッション
ログイン後、セッションを開始します。これらを処理するにはさまざまな方法があることはわかっていますが、現時点では、セッション$_SESSION['user']
中にユーザーの電子メール アドレスを保存できるようなセッション変数を作成しました。次に、セッションがサーバーで終了するときに問題が発生します。それは私を次の物件に導きます。
2. クッキー
Cookie を使用すると、電子メール アドレスとハッシュ エンコードされたパスワードを保存し、これらのログイン情報に基づいてセッションを再作成できます。
<?
session_start();
require_once('config.php'); //retrieved from the servers include folder specified on the apache server.
// if session is closed that means that there wouldn't be stored a session variable called 'user' anymore.
if ($_SESSION['user'] == '') {
// if the cookie hasn't been set..
if ($_COOKIE['user'] == '') {
// ... close the session and return to the login page
session_destroy();
header('Location: login.php?err=4'); // err=4 means session ended
} else {
// We don't know wether the user has logged in using e-mail or username, so that's why we connect using either email or username.
$sql = 'SELECT * FROM login WHERE (email = :user and password = :psw) or (username = :user and password = :pass)';
$statement = $conn->prepare($sql);
$statement->bindParam(':user', $_COOKIE['user'], PDO::PARAM_STR);
$statement->bindParam(':psw', $_COOKIE['psw'], PDO::PARAM_STR);
if ($statement->execute() && $row = $statement->fetch()) {
$_SESSION['user'] = $_COOKIE['user'];
} else {
// Failed to retrieve data somehow.
}
}
}
?>
しかし、これsession_id()
もクッキーに保存された値であり、セッションを再作成するたびに同じになることを読みました。したがって、実際には値をサーバーに再度一致させる必要はありません。セッションを再度開始して、終了した場所から続行できるためです..しかし、これはセキュリティ上の問題と考えsession_id()
ています。 、同じものを使用して接続できるようになりますsession_id()
。
3. 他のドメインの値も使用する必要がある
Facebook や Google などの別の Web サイトから同じログイン情報を使用できることはわかっています。使用しているすべてのドメインで同じログイン情報を再利用できるようにしたいのですが、自分のドメインだけを保護するにはどうすればよいですか (登録済み) ドメインはログイン情報にアクセスできますが、他のサイトにはアクセスできませんか?
4. 他に安全な方法はありますか?
これは実際に私の質問です。私がやった、または計画したことが非常に安全であるかどうか確信が持てません。また、私の初心者の経験が、ログインで安全なデータベース接続を作成するのに十分であるとは絶対に思いません. したがって、PHP でログイン情報を最も効率的かつ安全な方法で保存および使用するための正しい方法の公式ページに誰かが私をリンクできるかどうかを知りたいです。