Мой основной язык программирования - 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;
}