Про register_globals. Как написать правильный скрипт

Статус
В этой теме нельзя размещать новые ответы.

Eredory

Новичок
Про register_globals. Как написать правильный скрипт

Вечер добрый.
Я прочитал статью в FAQ про "Не передаются переменные...". Суть проблемы в том, что на моем хостинге register_globals=on, и это ни в какой мере от меня не зависит. Тщательно поразмыслив, я понял, что мои скрипты вполне могут быть взломаны описанным в статье способом: т е после авторизации в следующую форму передается некая переменная, и "злоумышленник" вполне может сделать это сам, минуя собственно авторизацию. Как убрать эту дыру?
 

vw

Новичок
Проверяя все данные, которые передаются, в начале скрипта.
 

ksnk

прохожий
PHP:
if (isset($user)) unset($user);
if (isset($_GET['user'])) $user = $_GET['user'] ;
примерно - так...
 

Eredory

Новичок
в каком смысле проверяя?
Эта самая форма авторизации просит ввести логин и пароль, ищет соотвествующего юзера в БД, и - если находит- получает его user_id - как бы порядковый номер. И передает его в следующую форму - чтобы та в самом начале передала его в cookie юзверю. То есть я никак не могу в этой схеме отследить, как был получен этот user_id следующей формой. Ей самой до этого нет никакого дела, и я ума не приложу, как заставить, чтобы было ))

-~{}~ 02.12.05 20:40:

2KSNK
Я правильно понял: если установлена такая-то переменная, удалить ее и посмотреть, соответсвующую в массиве GET и потом переприсвоить?
Не очень, понял, обьясни плз, зачем первая строка?
 

Popoff

popoff.donetsk.ua
Eredory
То есть я никак не могу в этой схеме отследить, как был получен этот user_id следующей формой.
Право от обязанности отличается тем, что если ты имеешь право, то ты можешь делать или не делать, как тебе больше хочется. Если ты обязан, то у тебя нет выбора.

register_globals дает тебе право, но никак не обязывает.
 

ksnk

прохожий
Отличия в проверках с включенным register_globals в том, что некоторые переменые могут "неизвестно откуда появится" до реального исполнения скрипта. То есть достаточно все "критические" переменные явным образом определить...

Пример, у меня, конечно, несколько идиотский :)
 

Eredory

Новичок
2Popoff
я это прекрасно понимаю. Мне бы вот только дыру в скрипте убрать... )))
 

Popoff

popoff.donetsk.ua
ksnk
Хороший способ поставить заплатку и сделать видимость безопасности вместо того, чтобы избавиться от опасности.
 

Eredory

Новичок
Автор оригинала: ksnk
То есть достаточно все "критические" переменные явным образом определить...
То есть я явно проверяю, что эта переменная получена методом GET, а не просто в командной строке набрана?
 

Popoff

popoff.donetsk.ua
Eredory
Контрольный вопрос: как отличить переменную, переданную методом GET от переменной, набранной в командной строке?
 

Eredory

Новичок
способом, предложенным ksnk - удалить и проверить, осталась ли она в массиве GET?
 

ksnk

прохожий
Popoff
Переменная может "незаконно" приплыть и методом Post, и даже из Куков. Так что не придирайся :)
Eredory
Да! Удалить, и проверить, есть ли она в том месте, откуда она ДОЛЖНА придти...
 

Eredory

Новичок
KSNK
Последний небольшой вопросец.
Дело в том, что авторизация - одна форма, проверка авторизации - другая - и из нее-то в третью и передается эта злополучная переменная - обычной генерируемой ссылкой безо всяких методов. Мне конечно не сложно все изменить в соотвтествии с вышесказанным, но все-таки, может и в этом случае есть какой-то способ защиты?
 

Popoff

popoff.donetsk.ua
ksnk
1. Твой способ - специально для тех, кто никак не хочет инициализировать ВСЕ переменные и кому нравится, что использование таких переменных - возможно.

2. Твой способ - специально для тех, кто считает, что $_GET['login'] - это несравнимо тяжелее, непонятнее, ужаснее и тормознутее, чем $login. Дальше по уже много раз пройденной схеме я должен уговаривать писать $_GET['login'] вместо $login.

3. Если соблюдать предыдущие два пункта, то какое мне дело до того, откуда приплыла глобальная переменная $login?
 

Eredory

Новичок
Автор оригинала: kolobok
Eredory

а в файлик .htaccess если прописать:
Код:
php_value register_globals 0
что происходит?
Ух ты, какие интересные файлики бывают!!!
К сожалению, ничего не происходит. Наверное потому, что у меня к этому файлику доступа нет...
Да, определенно, нет.
 

ksnk

прохожий
Popoff
Если взять скрипт, исправно работающий при register_globals=off и перед использованием переменых сделать им unset. то мы получим столь-же исправно работающий скрипт, даже при при register_globals=on. Я в чем-то неправ?
 

Eredory

Новичок
2ksnk
Мне все-таки кажется, что в твоем способе первая строчка лишняя. Имхо, конечно. Вторая же ведь так и так переопределит переменную!
 

ksnk

прохожий
Eredory
есть еще [m]ini_set[/m]
>...лишняя...
если она обязательно есть в командной строке - то да, лишняя
 

Popoff

popoff.donetsk.ua
Если взять скрипт, исправно работающий при register_globals=off и перед использованием переменых сделать им unset. то мы получим столь-же исправно работающий скрипт, даже при при register_globals=on. Я в чем-то неправ?
Я не знаю, что можно ответить после того, что я уже ответил :)

Может быть ты и прав, но только это не имеет никакого значения. Почему - читай то, что я написал выше.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху