在php中这样做是否安全?

时间:2017-08-15 13:48:51

标签: php html

我是php的新手,我想知道这样做是否安全... ... 我目前有一个登录系统来保护几页。

  1. 黑客是否有可能更改$ logged_in的值?
  2. 这样安全吗?
  3. 如果不是。最好的方法是什么?
  4. 文件:
      - not_logged_in.php
      - test.php
      - login.php
      - logout.php
      - protected_pa​​ge_1
      - protected_pa​​ge_2
      - unprotected_pa​​ge_1

    代码:

    not_logged_in.php:

    <html>
        You are not logged in!
    </html>
    


    test.php的:

    <?php
    
    $logged_in = false;
    
    function protect_page() {
        if($logged_in == false) {
            header('Location: index.php');
            exit();
        }
    }
    
    
    ?>
    


    的login.php:

    <?php
    
    include "test.php";
    $logged_in = true;
    
    ?>
    


    logout.php:

    <?php
    
    include "test.php";
    $logged_in = false;
    
    ?>
    


    protected_pa​​ge_1.php:

    <?php
    
    include "test.php";
    protect_page();
    
    
    ?>
    
    
    <html>
    
        Content
    
    </html>
    


    protected_pa​​ge_2:

    <?php
    
    include "test.php";
    protect_page();
    
    
    ?>
    
    
    <html>
    
        Content
    
    </html>
    


    unprotected_pa​​ge_1:

    <html>
    
        Content
    
    </html>
    

    我完全理解login.php页面只是登录而你不必提供密码,但这仅用于当前的测试......

    感谢阅读!

2 个答案:

答案 0 :(得分:3)

我认为使用这个$ logged_in变量的方式太松了。

我建议使用会话。

session.php文件:

<?php
session_start();  // start on top of your page before any output

if(!isset($_SESSION['loggedin'])) {
  $_SESSION['loggedin'] = false;
}

function loggedin()
{
   return $_SESSION['loggedin'];
}

?>

以及包含受保护内容的任何页面。

<?php
    include 'session.php';

    if(!logged_in()) {
       include 'login.php';
       exit();
    }
    // some info
?>

login.php将有一个表单登录。(和$_SESSION['loggedin'] = true; 每个页面都可以包含session.php。

答案 1 :(得分:1)

是的,它受到了保护。也许您可以存储显示用户在会话存储中记录的天气的变量,以使其更加高效。