2017-12-30 34 views
2

私は、ユーザ名とパスワードを使ってユーザの認証をチェックするログインフォームを持っているphpのウェブサイトを開発しました。 認証されたユーザーのみがアクセスできるページは、セッション変数をtrueまたはfalseのいずれかでチェックします。これらの変数は、ユーザーのユーザー名とパスワードが真で、ログイン時に設定しているため、URLにページ名を直接書き込んでWebページにアクセスすることはできません。 phpログイン認証はlocalhost上で動作していますが、私がサーバーにホストされているときに認証が機能していません。私はこの問題を解決するために助けてくださいサーバのホストでphpログイン認証が機能していない

<!DOCTYPE html> 
<html> 
<head> 
    <title>Admin</title> 
    <link rel="icon" href="../images/logo.png"> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width,initial-scale=1.0"> 

    <!-- CSS STYLES --> 
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"> 
    <link rel="stylesheet" type="text/css" href="css/font-awesome.min.css"> 
    <link rel="stylesheet" type="text/css" href="css/login.css"> 

    <!-- JS SCRIPT --> 

    <script type="text/javascript" src="js/respond.js"></script> 
    <script type="text/javascript" src="js/jquery.js"></script> 
</head> 
<body> 


<div class="login-page"> 
    <div class="login-section"> 
    <div class="login-heading"> 
     <img src="../images/logo.png"> 
     <h2>Department Of Business Administration</h2> 
     <div class="border"><div class="line"></div></div> 
     <div class="border1"><div class="line"></div></div> 
     <h5>Please, <span class="text2"></span></h5> 
    </div> 
    <?php 
      session_start(); 
      include '../inc/db.php'; 
      if (isset($_POST['submit'])) { 
       $username = mysqli_real_escape_string($conn,$_POST['username']); 
       $password = mysqli_real_escape_string($conn,md5($_POST['password'])); 
       $_SESSION['login'] = false; 

       $query = "SELECT * FROM admin_user WHERE username='$username' AND password='$password' "; 
       $rslt = mysqli_query($conn,$query); 
       if (mysqli_num_rows($rslt)>0) { 
        $_SESSION['login'] = true; 
        $_SESSION['username'] = $username; 
        header('location:index.php'); 
       }else{ 
        echo "<div class='alert alert-danger inputmsg-txt'>Username or Password does not matched</div>"; 
       } 
      } 
     ?> 
    <form method="POST" class="form-horizontal" action=""> 
     <div class="form-group"> 
     <label for="Username" class="col-sm-2 control-label">Username</label> 
     <div class="col-sm-10"> 
      <input type="text" class="form-control" name="username" id="Username" placeholder="Username"> 
     </div> 
     </div> 
     <div class="form-group"> 
     <label for="Password" class="col-sm-2 control-label">Password</label> 
     <div class="col-sm-10"> 
      <input type="password" class="form-control" name="password" id="Password" placeholder="Password"> 
     </div> 
     </div> 
     <div class="form-group"> 
     <div class="col-sm-offset-2 col-sm-10"> 
      <button type="submit" name="submit" class="btn btn-success">Sign in</button> 
      <a href="" class="btn btn-info">Forgot Password</a> 
     </div> 
     </div> 
    </form> 
</div> 
</div> 
<script type="text/javascript" src="js/bootstrap.min.js"></script> 
<script type="text/javascript" src="js/typed.min.js"></script> 
<script type="text/javascript" src="js/main.js"></script> 
</body> 
</html> 
+0

http://php.net/manual/en/function.password-verify.php

http://php.net/manual/en/function.password-hash.phpない答えが、セキュリティ警告。あなたのコードには2つの主要なセキュリティホールがあります。 1)md5ハッシングの使用を中止し、破損していない実際のハッシュアルゴリズムを使用する必要があります.2)SQLインジェクション攻撃を避けるためにパラメータ化クエリを使用する必要があります(https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)を使用します。 –

+0

問題は何ですか?セッションが開始されたかどうかクエリでtrueまたはfalseを返すかどうかを確認します。 –

答えて

0

は、私はこのコードをテストし、ローカルホストとサーバーの両方に取り組んこの

を試してみてください。

パスワードにMD5を使用しないでください。

私はあなたが確認すると、パスワードのハッシュパスワードを使用することをお勧めします

if (isset($_POST['submit'])) { 
    $username = $conn->real_escape_string($_POST['username']); 
    $password = $conn->real_escape_string(md5($_POST['password'])); 

    $_SESSION['login'] = false; 
    $query = "SELECT * FROM admin_user WHERE username='$username' AND password='$password' "; 
    $rslt = mysqli_query($conn,$query); 
    $check_user = mysqli_num_rows($rslt); 
    if($check_user>0){ 
    echo "<script>window.open('index.php','_self')</script>"; 
    }else{ 

    echo "<div class='alert alert-danger inputmsg-txt'>Username or Password does not matched</div>"; 
     } 
     $conn->close(); 
    } 
関連する問題