|
|
|
| Вообщим есть такая ситуация. Вот важный участок кода:
function page ();
{
global $member;
if($member)
{
$user_status = mysql_query("select * from ibf_members where name='$member'");
$array = mysql_fetch_array($user_status);
}
.....
}
Вообщим переменная $member дается с другого файла с массива базы она берется и через global $member; я ее передаю в функцию страницы. В этой переменной храниться логин того, кто вошел на сайт. И если я просто напросто пропишу в адрес строке index.php?member=Ник_админа, то оно мне выдаст все права админа. Как мне сделать чтобы она работала только в файле, но не бралась в внешних источников, как в данном случае.... | |
|
|
|
|
|
|
|
для: B@cZ
(12.08.2005 в 15:16)
| | Как я понял, у вас переменная передается методом post. Вот и надо это конкретно прописать перед вызовом функции:
<?
function page ();
{
global $member;
if($member)
{
$user_status = mysql_query("select * from ibf_members where name='$member'");
$array = mysql_fetch_array($user_status);
}
.....
}
$member=$_post['member'];
page(); //вызов функции.
?>
|
И еще неплохо бы пароль проверять, раз уж доступ разграничивается. | |
|
|
|
|
|
|
|
для: Loki
(12.08.2005 в 15:33)
| | Нет мне наоборот нужно запретить чтобы она передаваль любыми методами кроме внтрифайлового. Чтобы я их дургого файла ее передал и изменить нельзя ее было таким образом index.php?member=ник_админа | |
|
|
|
|
|
|
|
для: B@cZ
(12.08.2005 в 15:53)
| | а что значит "из другог файла"? include?
и в приведенном примере, методом get изменить ее нельзя. | |
|
|
|
|
|
|
|
для: Loki
(12.08.2005 в 15:54)
| | Методом GET нельзя а POST можно. А мне надо чтобы она ничем не изменялась. Да я подключаю include ('auth.php');
Вот сам auth.php:
if ($member_id)
{
$user_name = mysql_query("select name from ibf_members where id='$member_id' and member_login_key = '$pass_hash'");
$array = mysql_fetch_array($user_name);
$member = $array[name];
}
$member_id - это кукис переменная, которая делается при входе человека на сайт.
Вот этот файл я подключаю и получается то что я писал раньше. Но $member - должна быть одна что дается этим файлом. Но ее можно изменить таким образом не любую (index.php?member=nick). А мне нужно запретить, чтобы не возможно было ее сменить, какую auth.php ее передал, такой она и осталась | |
|
|
|
|
|
|
|
для: B@cZ
(12.08.2005 в 15:59)
| | А register_globals у тебя отключены? | |
|
|
|
|
|
|
|
для: B@cZ
(12.08.2005 в 15:59)
| | Лучше поместить $member в сессию и использовать везде обращение к $_SESSION['member'] - это позволит избежать проблем с безопаснотью. | |
|
|
|
|
|
|
|
для: B@cZ
(12.08.2005 в 15:59)
| | надо register_globals = Off и использовать суперглобальные массивы | |
|
|
|
|
|
|
|
для: B@cZ
(12.08.2005 в 15:16)
| | Попробуйте использовать вместо переменной $member, суперглобальный массив $GLOBALS["member"]. | |
|
|
|
|
|
|
|
для: cheops
(12.08.2005 в 16:03)
| | И что $GLOBALS["member"] невозможно изменить из внешних источников?
P.S. Внешние источники это методы POST и GET. Я так называю =) | |
|
|
|
|
|
|
|
для: B@cZ
(12.08.2005 в 16:04)
| | А... нет наверное - лучше действительно использовать $_SESSION - переменные в сессии тоже являются глобальными и будут доступны вам из функций и других файлов и в тоже время этот способ более безопасный, так как содержимое массива $_SESSION нельзя изменить методами GET и POST, а сами данные хранятся на сервере. | |
|
|
|
|
|
|
|
для: cheops
(12.08.2005 в 16:07)
| | Зачем это вообще делать ведь файл скрипт инклудится и передавать $members никуда не надо надо сделать чтобы post и get не затирали $members, т.е. выключить register_globals. | |
|
|
|
|
|
|
|
для: cheops
(12.08.2005 в 16:03)
| | Помоему надо наоборот, не из вне. Переменная $members берется из БД и надо чтобы она же и передавалась, а она затирается если передать данные методом get или post. Я почему и стпросил про register_globals. Если они включены то тогда все понятно. | |
|
|
|
|
|
|
|
для: Евгений Петров
(12.08.2005 в 16:06)
| | Понимаешь, я купил хост, и у меня там нету доступа к Apache. Так что включить или выключить register_globals просто нет возможности. Я неверное сделаю так, как сказал cheops.
Всем спасибо за помощь. Еще бы несколько дней и мой сайт накрылся бы =(... Хорошо, что есть люди которые сообщили о баге, не воспользовавшись им. | |
|
|
|
|
|
|
|
для: B@cZ
(12.08.2005 в 16:31)
| | тут ничего и придумывать не надо, если файл подключается инклудом:
index.php:
<?
include "login.php";
echo $member;
?>
|
И, собственно login.php:
И все: все "внешние источники" - побоку. | |
|
|
|
|
|
|
|
для: Loki
(12.08.2005 в 17:07)
| | Вообще то да впринципе. Почему такое происходит непонятно. | |
|
|
|