PHP: Безопасная аутентификация пользователя? - PullRequest
0 голосов
/ 05 сентября 2011

Код ниже проверяет, вошел ли администратор в систему, и показывает специальные поля редактирования на веб-сайте.Для этого во всем скрипте будет использоваться $ show_tools.

 if (isset($user)){
        if($user->logincheck($_SESSION["loggedin"], "users", "user_password", "user_email")){
            $show_tools = true;
        }else{
            $show_tools = false;
        }
    }

Безопасно ли впоследствии использовать $ show_tools?Например:

<?php
  if ($show_tools){
    ?>
    <h1> Hello, administrator! </h1>
  <?php
  }
?>

1 Ответ

0 голосов
/ 05 сентября 2011

Использование сырых $show_tools не хватает инкапсуляции. Каждый может перезаписать его, даже вы по ошибке, не говоря уже о том, что злоумышленник внедрил код в вашу программу. Кроме того, вы должны сделать его глобальным по мере роста вашей программы. Рассмотрим следующий подход:

function show_tools($flag = null) {
    static $value = false;
    if (is_bool($flag)) {
        // you can run other checks here too
        $value = $flag;
    }
    return $value;
}

Использование:

// authenticate
show_tools(true);

if (show_tools()) { // if authenticated
    // show the tools
}

// deauthenticate
show_tools(false);

Функции предназначены для того, чтобы их нельзя было переопределить, поэтому никто не может перезаписать функцию и изменить то, что вы не хотите изменять без вашей воли. При таком подходе вы в безопасности. Без этого все может произойти:

<?php
$show_tools = true;
include("your_insecure_script.php");
// Cool! I can see special editing boxes!
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...