2017-08-15 48 views
2

我是新来的PHP,我想知道是否可以像这样安全地做...
我目前有一个登录系统来保护几页。这是安全的做到这一点在PHP?

  1. 黑客有可能改变$ logged_in的值吗?
  2. 这是安全吗?
  3. 如果不是。什么是最好的办法呢?

文件:
- 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页面只是升ogs和你不必输入密码,但这只是为了目前的测试...

感谢您的阅读!

+1

在test.php的:。变量'$ logged_in'不中exsist函数。它不在函数的作用范围内 –

+0

@ Louis-RochTessier哦,我现在只能看到......谢谢!!我该如何改变这种情况,因为我需要将veriable $ logged_in设置为false,并且我不知道其中 –

+0

虽然这不是一个很糟糕的问题,但很明显你已经开始学习PHP了,如果你不介意的话,我会建议你做一些课程来获得一个基本的理解,[比如作为这个](https:// ww w.codecademy.com/learn/php)和[也许这个](https://devzone.zend.com/6/php-101-php-for-the-absolute-beginner/)。由于这是一个问答网站,因此您可能会收到额外的信息,让您了解您遇到的大多数问题的“原因”。 – Nukeface

回答

3

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

我建议利用会议。

会话。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文件

+0

这工作!但有人关闭我的网站时有办法删除会话吗?因为如果我关闭并打开我的网站,它仍然会登录。 –

+1

会话使用Cookie。在第一次联系时,服务器将为浏览器提供一个具有某个长随机字符串值的cookie。每次浏览器联系服务器时,它都会显示cookie以及请求。您可以设置您的浏览器,以便即使关闭后也能保持该字符串。然而,经过一段空闲时间(通常20分钟)后,服务器自己会忘记该值。因此,如果浏览器在30分钟后出现旧cookie,服务器将无法识别他 –

+0

非常感谢!解决了! –

1

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

+0

由于test.php包含一个缺少var的函数,因此var将返回null。所以你永远不会登录。该页面将得到很好的保护,永远不会被看到... –

+0

@IvoP哦,我现在只能看到...谢谢!大声笑,我怎么能改变这一点,因为我需要将变量$ logged_in设置为false,我不知道在哪里。 –