私はこの主題がたくさんカバーされていることを知っています.
次のようにセットアップされたユーザー名パスワードログインシステムがあります。
ログインページ: アクションに設定 - checklogin.php
checklogin.php - データベースに対してユーザー名とパスワードをチェックし、ヘッダーで、データベースの列 3 にあるカスタム URL に移動します。したがって、user1 は folder1/ に移動し、user2 は folder2/ に移動します。
正常に動作しているように見えますが、user1 (URL /folder1/) としてログインしているとします。URL ウィンドウに「/folder2/」と入力すると、そのフォルダー インデックス ファイルが表示されます。
したがって、基本的に、任意のユーザー名でログインしている場合、他のユーザーのフォルダー/index.php ファイルを取得できます。
したがって、index.php ページのコードがユーザーを正しく検証していないと思います。
コード(トップは問題ありません。DBに接続するなどなので、省略しました):
checklogin.php:
// Define $username and $password
$username=$_POST['username'];
$password= $_POST['password'];
// To protect MySQL injection
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $username and $password, table row must be 1 row
if($count==1){
// Register $username, $password and redirect to file "index.php"
session_start();
$_SESSION[$username];
$_SESSION[$password];
$_SESSION['loggedin'] = true;
$_SESSION[$id];
$row = mysql_fetch_assoc($result);
$result = mysql_query("SELECT folder FROM users2");
$_SESSION['folder'] = $row['folder'];
if( isset($username) ) {
$_SESSION["loggedin"] = true;
$_SESSION["username"] = $username;
header('Location: clients/'. $row['folder'].'/index.php');
exit();
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
}
?>
受信 URL の index.php ページ:
session_start();
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
// not logged in, move to login page
header("location:../../login.php");
exit;
}
受信「ページ保護」コードの他の多くのバリエーションを試しましたが、どれも正しく機能していないようです。受信コードなのか、チェックログインコードなのか??? 明らかな何かが欠けているように感じます。
よろしくお願いします。- ランディ