2015-05-06 3 views
-2

Я работаю над веб-сайтом, и у меня проблема с моим скриптом входа в PHP. Код позволяет людям войти через кнопку входа без имени пользователя и пароля. Вот мой код:PHP Login Site, войдите без информации пользователя

<?php 
    $indexPage = true; 
    require_once 'libs/Config.php'; 
    if (secureSession($mysqli) == true) { 
    header('Location: dashboard.php'); 
    } 
    if (isset($_POST['username'], $_POST['login'])) { 
    if ($stmt = $mysqli->prepare("SELECT uid, username, password FROM admins WHERE username = ?")) { 
     $stmt->bind_param('s', $_POST['username']); 
     $stmt->execute(); 
     $stmt->store_result(); 
     $stmt->bind_result($uid, $username, $password); 
     $stmt->fetch(); 
     if ($stmt->num_rows == 1) { 
     if (password_verify($_POST['password'], $password)) { 
      $_SESSION['uid'] = $uid; 
      $_SESSION['username'] = $_POST['username']; 
      $_SESSION['secure'] = password_hash($password.$_SERVER['REMOTE_ADDR'], PASSWORD_BCRYPT); 
      header('Location: dashboard.php'); 
      exit; 
     } else { 
      echo 'Username and password don\'t match.<br/>'; 
     } 
     } else { 
     echo 'No user exist with this username.'; 
     } 
    } 
    } 
?> 

Я использую базу данных, в которой хранятся имя пользователя и пароль.

Как я могу исправить это, так что пользователь будет подписан только с действительным именем пользователя и паролем?

+1

Пожалуйста, разместите функцию 'password_verify'. – GHugo

+0

if (secureSession ($ mysqli) == true) { header ('Местоположение: dashboard.php'); } // Думаю, что это может быть здесь, следовательно, оно всегда верно, поэтому вы попадете на панель управления, сделайте ложь и попробуете ее посмотреть, все еще ли она – Careen

+0

Все еще ничего не работает, кто-нибудь знает, как исправить? –

ответ

-1

Попробуйте подтвердить имя пользователя и пароль с самой стороны клиента перед отправкой. и попробуйте следующий код:

<?php 
     $indexPage = true; 
     require_once 'libs/Config.php'; 
     if (secureSession($mysqli) == true) { 
     header('Location: dashboard.php'); 
     } 
     $flag = 1; 
     if (isset($_POST['username'], $_POST['login'])) { 
     if ($stmt = $mysqli->prepare("SELECT uid, username, password FROM admins WHERE username = ?")) { 
      $stmt->bind_param('s', $_POST['username']); 
      $stmt->execute(); 
      $stmt->store_result(); 
      $stmt->bind_result($uid, $username, $password); 
      $stmt->fetch(); 
      if ($stmt->num_rows == 1) { 
      if (password_verify($_POST['password'], $password)) { 
       $_SESSION['uid'] = $uid; 
       $_SESSION['username'] = $_POST['username']; 
       $_SESSION['secure'] = password_hash($password.$_SERVER['REMOTE_ADDR'], PASSWORD_BCRYPT); 
       $flag = 2; 
      } else { 
       $flag = 3; 
      } 
      } else { 
       $flag = 4; 
      } 
     } 
     } 
     switch ($flag) { 
      case 2: 
       header('Location: dashboard.php'); 
       break; 
      case 3: 
       echo 'Username and password don\'t match.<br/>'; 
       break; 
      case 4: 
       echo 'No user exist with this username.'; 
       break; 
      default : 
       // do your default action may be 
       echo 'Username and password is required'; 
     } 

    ?> 
+0

Спасибо за быстрый ответ! Но это не работало, я просто получил «Имя пользователя и пароль», но я все еще могу щелкнуть логин без имени пользователя и пароля и попасть на панель управления –

+0

Сделать поля обязательными в html –

+1

Этот ответ противоречит нескольким рекомендациям по безопасности; для начала, это означает, что пароль хранится в ящике в базе данных без хеширования, что, безусловно, очень плохая идея. Затем он также возвращает слишком много информации, позволяя использовать список имен пользователей, что является хорошим началом для учета учетных записей пользователей, просто путем грубого принуждения. –

0

нормально, то сделать это

if (isset($_POST['submit'])) { 
    if ($stmt = $mysqli->prepare("SELECT uid, username, password FROM admins WHERE username = '$_POST['username']' and password='$_POST['password']'")) { 
     $stmt->bind_param('s', $_POST['username']); 
     $stmt->execute(); 
     $stmt->store_result(); 
     $stmt->bind_result($uid, $username, $password); 
     $stmt->fetch(); 
      $_SESSION['uid'] = $uid; 
      $_SESSION['username'] = $_POST['username']; 
      $_SESSION['secure'] = password_hash($password.$_SERVER['REMOTE_ADDR'], PASSWORD_BCRYPT); 
      header('Location: dashboard.php'); 
      exit; 
     } else { 
      echo 'Username and password don\'t match.<br/>'; 
     } 
     } 
    } 
    } 
?> 
+0

Я пробовал это, но это просто привело к тому, что моя страница входа была белой. –

+0

вы можете сказать мне точную проблему, почему страница входа в систему является белой, так как она должна что-то повторять или отправлять полный код, что означает вашу страницу входа в систему (страница дизайна), пожалуйста ... я постараюсь работать над этим и позволяю вам в течение половины час ... – Abbas

+0

Я не знаю, после того как я добавил этот код, сайт получил белый экран. –

0

Я обычно использую MySQL следующим образом. дайте мне знать, если это вам поможет

<?php 
include_once "libs/Config.php"; // hope this file will initialized $con, connection to database 
if(isset($_REQUEST['username'])) 
{ 
$username=$_REQUEST['username']; 
$password=$_REQUEST['password']; 

$query= "SELECT * FROM admins WHERE username='".$username."' AND password='".$password."'"; 
$result=mysql_query($query,$con); 
if(mysql_num_rows($result)>0) 
{ 
//sucess 
header('Location: dashboard.php'); 
} 
else 
{ 
echo 'Username and password don\'t match.<br/>'; 
} 
} 
else 
{ 
// form not submitted 
} 

?> 
Смежные вопросы