当所有页面都加载到index.php中时,如何防止php会话劫持

当所有页面都加载到index.php中时,如何防止php会话劫持,php,session,Php,Session,我正在尝试构建一个登录系统,在该系统中,我使用index.php?page=login作为登录页面,登录后该页面将重定向到index.php?page=dashboard。问题是我的系统很容易被会话劫持,所以我需要帮助来建立它的安全性 我的index.php页面 <?php include 'config.php'; $session = new session(); $session -> start_session($conn, '_h', false); $page =

我正在尝试构建一个登录系统,在该系统中,我使用index.php?page=login作为登录页面,登录后该页面将重定向到index.php?page=dashboard。问题是我的系统很容易被会话劫持,所以我需要帮助来建立它的安全性

我的index.php页面

<?php

include 'config.php';

$session = new session();
$session -> start_session($conn, '_h', false);

$page = $_GET['page'];

if($page != 'login' && $page != 'register'){
  if (admin_logged_in() == false) {
  header("Location:index.php?page=login");
  exit();
  }

}


if($page != 'dashboard' && $page != 'password' && $page != 'login') {

}else {

    include $include.'/header.php'; 


    if(in_array("$page", $hidedesign))
    {

    }else{
      include $include.'/breadcrumb.php';
    }


} 

?>

<?php include $view; ?>


<!-- footer -->
<?php 

if($page != 'dashboard' && $page != 'password' && $page != 'login') {

}else {

    include $include.'/footer.php';

} 


?>

视图中的登录页面代码


$msg = '';

if(isset($_POST['submit'])){

  // $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
  $myusername = post_value_check($conn,$_POST['email']);
  $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
  $mypassword = post_value_check($conn,$_POST['password']);

  $error_msg = array();
  $error = false;

  if($myusername  == ''){
    $error = true;
    $error_msg['myusername_error'] = 'Email is missing.';
  }else if(!preg_match($email_exp, $myusername)){
    $error = true;
    $error_msg['myusername_error'] = 'Enter a valid Email.';
  }

  if($mypassword  == ''){
    $error = true;
    $error_msg['mypassword_error'] = 'Password is missing.';
  }


  if($error == true ){

  }else{
    $q="select * from $tb_admin where email='$myusername'";
    $r=mysqli_query($conn,$q);
    if($r){
      $count = mysqli_num_rows($r);
      if($count > 0)
      {
        $ro = mysqli_fetch_array($r);
        $passm = $ro['password'];
        // $hashmpassword = 
        // if($passm==$mypassword){
        if(password_verify($mypassword, $passm)){

          // $session = new session();
          // $session -> start_session($conn, '_h', false);
          // session_regenerate_id(true);
          $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
          $_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
          $_SESSION['admin_logged_in'] = 0;
          $_SESSION['id']=$ro['id'];
          $_SESSION['name']=$ro['name'];
          $_SESSION['email']=$ro['email'];

          echo"<script>location.replace('index.php?page=dashboard')</script>";
          exit();

          

        }else{

          $msg.='Password didnot match.';
        }
      }else{

        $msg.= 'No Email exist.';
      }
    }

  }

  extract($error_msg);
}


因此,temp文件夹中只生成一个会话文件,每次页面重新加载该文件时,该文件都会发生更改,但当我尝试以匿名模式访问URL时,会生成一个不同的文件,因此,我如何才能防止这种情况发生?会话劫持也是如此。

我认为您无法阻止其他浏览器停止使用您编写的代码生成会话文件,因为每次重新加载页面时,都会在现有会话文件上创建一个会话文件,就像以前的会话一样当您重新加载文件时,文件再次被
sess_98765eryu
,它将通过替换第一个文件生成
sess_324yiuyui
。因此,现在,当您在不同浏览器中打开链接时,将生成一个新的会话文件,但如果您使用凭据登录,则该文件将为空,然后数据将填充到该新会话文件中,但您的会话文件名将再次更改,尽管其中的数据不会更改。我认为这是一个真正的过程


对于你的会话劫持,你已经实现了什么代码,我认为这是真实的,也是很正常的,你也可以学习更多关于使用这些代码的知识,你也可以在这里学习一些好的例子。我希望这能对你有所帮助。:)

所以你是想说我所做的是正确的我不会说你不正确但是你的代码是很自然的,如果你能想到一些能防止暴力攻击和SQL注入的代码,那么在某种程度上,我可以认为它是好的。好的,谢谢,我一定会注意它。如果我的建议对你有帮助,请不要忘记标记。当然我会这么做。

$msg = '';

if(isset($_POST['submit'])){

  // $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
  $myusername = post_value_check($conn,$_POST['email']);
  $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
  $mypassword = post_value_check($conn,$_POST['password']);

  $error_msg = array();
  $error = false;

  if($myusername  == ''){
    $error = true;
    $error_msg['myusername_error'] = 'Email is missing.';
  }else if(!preg_match($email_exp, $myusername)){
    $error = true;
    $error_msg['myusername_error'] = 'Enter a valid Email.';
  }

  if($mypassword  == ''){
    $error = true;
    $error_msg['mypassword_error'] = 'Password is missing.';
  }


  if($error == true ){

  }else{
    $q="select * from $tb_admin where email='$myusername'";
    $r=mysqli_query($conn,$q);
    if($r){
      $count = mysqli_num_rows($r);
      if($count > 0)
      {
        $ro = mysqli_fetch_array($r);
        $passm = $ro['password'];
        // $hashmpassword = 
        // if($passm==$mypassword){
        if(password_verify($mypassword, $passm)){

          // $session = new session();
          // $session -> start_session($conn, '_h', false);
          // session_regenerate_id(true);
          $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
          $_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
          $_SESSION['admin_logged_in'] = 0;
          $_SESSION['id']=$ro['id'];
          $_SESSION['name']=$ro['name'];
          $_SESSION['email']=$ro['email'];

          echo"<script>location.replace('index.php?page=dashboard')</script>";
          exit();

          

        }else{

          $msg.='Password didnot match.';
        }
      }else{

        $msg.= 'No Email exist.';
      }
    }

  }

  extract($error_msg);
}

require 'config.php';
$session = new session();
$session -> start_session($conn, '_h', false);

session_destroy();

header('location:index.php?page=login');
exit();