adminまたはお客様がにログインしているかどうかを確認するコードがありますが、解決できない問題が1つあります。 顧客のアカウントを使用してログインします。たとえば、顧客のログインページにアクセスするために顧客のユーザー名としてredhoodを使用します。しかし、管理者のアカウントを使用して、たとえば管理者のユーザー名としてwolfpackを使用すると、adminログインページではなく顧客のログインページにリダイレクトされます。しかし、私はどちらがのPHPコード私は変更する必要がありますかわからない。誰でもこの問題を解決できますか?ありがとう!管理者とお客様のログインはPHPで
MySQLデータベース:
Signin.html
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/signin/signin_desktop.css">
<link rel="stylesheet" type="text/css" href="css/signin/signin_tablet.css" media="screen and (max-width:768px)">
<link rel="stylesheet" type="text/css" href="css/signin/signin_mobile.css" media="screen and (max-width:480px)">
</head>
<body>
<div id="wrapper">
<header>
<nav id="mainMenu">
<img src="logo/logo.png" id="logo">
<ul>
<li><a href="home.html">Home</a></li>
<li><a href="about.html">About</a></li>
<li><a href="rates.html">Booking Rates</a></li>
<li><a href="facilities.html">Recreation</a></li>
</ul>
</nav>
</header>
<section id="banner">
<div id="ritu" class="shadow">
<img src="images/content_pure.jpg">
<img src="images/Sports-Hub-Gym.jpg">
<img src="images/gym.jpg">
<img src="images/ClubFitt2jpg.jpg">
</div>
</section>
<section id="content">
<div id="sign">
<div class="user">
<h2>Existing User</h2>
<form action="checkuser.php" method="post">
<p style="color:white;">Username:</p>
<input type="text" name="uname" size="25" maxlength="20" placeholder="Please enter your username" required><br><br>
<p style="color:white;">Password:</p>
<input type="password" name="pword" size="25" maxlength="20" placeholder="Please enter your password" pattern=".{6,}" required><br><br>
<input type="submit" name="loginbtn" value="">
</form>
<?php
if(isset($_GET['uname']) && isset($_GET['pword']))
{
echo "<script>alert('Invalid Username and Password.')</script>";
}
?>
</div>
<div class="user">
<h2>New User</h2>
<a href="createacc.html"><img id="create" src="button/CREATE%20ACCOUNT.png"></a>
<p style="color:white;">Ads:</p>
<div id="ads">
<div class="row">
<div class="image">
<img id="minilogo" src="logo/logo.png">
<div id="advt">
Download Now
</div>
</div>
<div class="image">
<img id="apps" src="images/myActiveSG%20APP.jpg">
</div>
</div>
</div>
</div>
</div>
</section>
<footer>
<p>© Copyright 2016 SportLab. All Rights Reserved.</p>
<nav id="submenu">
<ul>
<li><a href="#">Sitemap | </a></li>
<li><a href="contact.html"> Contact |</a></li>
<li><a href="term.html">Term of Use </a></li>
<li><a href="privacy.html">| Privacy </a></li>
</ul>
</nav>
</footer>
</div>
</body>
</html>
PHP
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Check Login</title>
</head>
<body>
<?php
if(isset($_POST["loginbtn"]))
{
$u=$_POST['uname'];
$p=$_POST['pword'];
$conn=mysqli_connect("localhost", "root", "" , "M3_156020K_Syahri_SportFacility");
$sql = "SELECT * FROM create_user WHERE username='" .$u. "' AND password='" .$p. "' ";
$search_result=mysqli_query($conn, $sql);
$userfound=mysqli_num_rows($search_result);
if($userfound >= 1)
{
session_start();
$_SESSION['MM_Username']= $u;
$row=mysql_fetch_assoc($search_result);
if($row['role'] == 1)
{
header("Location: login_admin.html");
}
else
{
header("Location: login_cust.html");
}
}
else
{
header("Location: signin.html?uname=" . $u . "&pword=" . $p);
}
mysqli_close($conn);
}
?>
[otp-thing by microvb](https://github.com/microvb/otp-thing)のようなすべてのACL問題を処理するフレームワークの使用を検討しましたか?また、あなたのコードで目立った問題は、セッションを初期化していて、既に出力を送信した後でその値を変更しようとしているかどうかです。 –
よく似たテキストのパスワード...悪い考え... PHPは['password_hash()'](http://php.net/manual/en/function.password-hash.php) と['password_verify()' ](http://php.net/manual/en/function.password-verify.php)それらを使用してください。 次に、[パスワードに関する良いアイデア](https://www.owasp.org/index)を紹介します。php/Password_Storage_Cheat_Sheet) 5.5より前のバージョンのPHPを使用している場合は(互換性パックがあります)(https://github.com/ircmaxell/password_compat) – RiggsFolly
@RiggsFolly - 出力を送信した後にセッションを初期化しようとしています。ポストからの直接入力がSQLクエリに渡されるようにし、ユーザーを明らかにしてリダイレクトを渡します。ユーザーのサーバー側(.html)などを検証できないページにリダイレクトするなど。それで、なぜ私はotp-thingを推奨しました。なぜなら、それは役割を含む厄介なセキュリティのすべてを処理するからです。 –