Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите. Проблема с переменной.
 
 автор: B@cZ   (12.08.2005 в 15:16)   письмо автору
 
 

Вообщим есть такая ситуация. Вот важный участок кода:
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=Ник_админа, то оно мне выдаст все права админа. Как мне сделать чтобы она работала только в файле, но не бралась в внешних источников, как в данном случае....

   
 
 автор: Loki   (12.08.2005 в 15:33)   письмо автору
 
   для: 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(); //вызов функции.
?>

И еще неплохо бы пароль проверять, раз уж доступ разграничивается.

   
 
 автор: B@cZ   (12.08.2005 в 15:53)   письмо автору
 
   для: Loki   (12.08.2005 в 15:33)
 

Нет мне наоборот нужно запретить чтобы она передаваль любыми методами кроме внтрифайлового. Чтобы я их дургого файла ее передал и изменить нельзя ее было таким образом index.php?member=ник_админа

   
 
 автор: Loki   (12.08.2005 в 15:54)   письмо автору
 
   для: B@cZ   (12.08.2005 в 15:53)
 

а что значит "из другог файла"? include?
и в приведенном примере, методом get изменить ее нельзя.

   
 
 автор: B@cZ   (12.08.2005 в 15:59)   письмо автору
 
   для: 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 ее передал, такой она и осталась

   
 
 автор: Евгений Петров   (12.08.2005 в 16:04)   письмо автору
 
   для: B@cZ   (12.08.2005 в 15:59)
 

А register_globals у тебя отключены?

   
 
 автор: cheops   (12.08.2005 в 16:04)   письмо автору
 
   для: B@cZ   (12.08.2005 в 15:59)
 

Лучше поместить $member в сессию и использовать везде обращение к $_SESSION['member'] - это позволит избежать проблем с безопаснотью.

   
 
 автор: P@Sol   (12.08.2005 в 16:06)   письмо автору
 
   для: B@cZ   (12.08.2005 в 15:59)
 

надо register_globals = Off и использовать суперглобальные массивы

   
 
 автор: cheops   (12.08.2005 в 16:03)   письмо автору
 
   для: B@cZ   (12.08.2005 в 15:16)
 

Попробуйте использовать вместо переменной $member, суперглобальный массив $GLOBALS["member"].

   
 
 автор: B@cZ   (12.08.2005 в 16:04)   письмо автору
 
   для: cheops   (12.08.2005 в 16:03)
 

И что $GLOBALS["member"] невозможно изменить из внешних источников?
P.S. Внешние источники это методы POST и GET. Я так называю =)

   
 
 автор: cheops   (12.08.2005 в 16:07)   письмо автору
 
   для: B@cZ   (12.08.2005 в 16:04)
 

А... нет наверное - лучше действительно использовать $_SESSION - переменные в сессии тоже являются глобальными и будут доступны вам из функций и других файлов и в тоже время этот способ более безопасный, так как содержимое массива $_SESSION нельзя изменить методами GET и POST, а сами данные хранятся на сервере.

   
 
 автор: Евгений Петров   (12.08.2005 в 16:12)   письмо автору
 
   для: cheops   (12.08.2005 в 16:07)
 

Зачем это вообще делать ведь файл скрипт инклудится и передавать $members никуда не надо надо сделать чтобы post и get не затирали $members, т.е. выключить register_globals.

   
 
 автор: Евгений Петров   (12.08.2005 в 16:06)   письмо автору
 
   для: cheops   (12.08.2005 в 16:03)
 

Помоему надо наоборот, не из вне. Переменная $members берется из БД и надо чтобы она же и передавалась, а она затирается если передать данные методом get или post. Я почему и стпросил про register_globals. Если они включены то тогда все понятно.

   
 
 автор: B@cZ   (12.08.2005 в 16:31)   письмо автору
 
   для: Евгений Петров   (12.08.2005 в 16:06)
 

Понимаешь, я купил хост, и у меня там нету доступа к Apache. Так что включить или выключить register_globals просто нет возможности. Я неверное сделаю так, как сказал cheops.
Всем спасибо за помощь. Еще бы несколько дней и мой сайт накрылся бы =(... Хорошо, что есть люди которые сообщили о баге, не воспользовавшись им.

   
 
 автор: Loki   (12.08.2005 в 17:07)   письмо автору
 
   для: B@cZ   (12.08.2005 в 16:31)
 

тут ничего и придумывать не надо, если файл подключается инклудом:
index.php:

<?
include "login.php";
echo 
$member;
?>

И, собственно login.php:

<?
$member
="admin";
?>

И все: все "внешние источники" - побоку.

   
 
 автор: Евгений Петров   (12.08.2005 в 17:15)   письмо автору
 
   для: Loki   (12.08.2005 в 17:07)
 

Вообще то да впринципе. Почему такое происходит непонятно.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования