Как переменные наследуются в функциях PHP (глобальные / локальные)? - PullRequest
0 голосов
/ 28 июня 2018

Мой основной язык программирования - python, но я унаследовал проект PHP для поддержки и пытаюсь исправить некоторые уязвимости, связанные с инъекцией SQL. У меня есть один файл, который сбил меня с толку. Это работает, но я понятия не имею, как. В строке 14 он вызывает $db, но я не понимаю, как $db доступен в этой функции. Он определен в других файлах php в рамках проекта, но, насколько я понимаю, глобальные переменные должны быть объявлены (как $tbl_users), чтобы быть доступными внутри функции. Где еще мне нужно посмотреть, чтобы узнать, откуда authValidateUser получает $db?

<?php
$user_list_link = "edit_users.php";

function authValidateUser($user, $pass)
{
   global $tbl_users;

   $user = strtolower($user);
   $pass = md5($pass);

   $user = preg_replace("/[^a-z0-9.]+/i","",$user);
   $pass = preg_replace("/[^a-z0-9.]+/i","",$pass);

   return sql_query1($db, "select count(*) from $tbl_users where name = '$user' and password = '$pass';");
}

function authGetUserLevel($user, $lev1_admin)
{
   // User not logged in, user level '0'
   if(!isset($user))
      return 0;

   // Check if the user is can modify
   for($i = 0; isset($lev1_admin[$i]); $i++)
   {
      if(strcasecmp($user, $lev1_admin[$i]) == 0)
     return 2;
   }

   // Everybody else is access level '1'
   return 1;
}
?>

sql_query1 является следующим:

function sql_query1 ($db, $sql)
{
        $r = mysqli_query($db, $sql);
        if (! $r) return -1;
        if (mysqli_num_rows($r) != 1 || mysqli_num_fields($r) != 1
                || ($result = mysqli_result($r, 0, 0)) == "") $result = -1;
        mysqli_free_result($r);
        return $result;
}
...