Форум сетевых администраторов
Показаны 12 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- Передача параметра ??? (http://netadmin.ws/forum/showthread.php?threadid=11083)


Помещено Revolution 28-09-2005 в 15:19:

Передача параметра ???

Установил PHP 5 ! В скрипте 000.php следующий код:


PHP:

<?
include ("config.inc.php"); #Там $adminpass = "123";
if ($password != "$adminpass") 
{ print 
"<BR><BR>Введите пароль администратора!

<br><br><form>
<br><input type=password name=password>
<br><input type=submit>
</form>"
; exit; }
?>


Короче скромная проверка пароля :). Но прикол в том, что переменная отображает значение в адресной строке, но скрипт никак не реагирует. Как то я чето менял в php.ini , а че забыл. Что надо сделать, чтобы значение передоваемой переменной передавался?
Пример - http://localhost/000.php?password=123

__________________
Media Commander - это новый медиа гигант в истории!!! Заходи на http://skynet.hut1.ru


Помещено he][es 28-09-2005 в 19:50:

quote:
#Там $adminpass = "123";

А может бы быть должно быть:
а)

PHP:

<?php
$adminpass 
= "123";
?>


б) ЗАПАÐ_ИЛИ УЖЕ! Вы чё все такие трудные а?.. Чё то я не вижу где ты переменную из запроса принял? а???
Я вижу несовсем корректное сравнение

PHP:

$password 
!= "$adminpass"


строки с переменной неизвестно где и откуда появившейся...
Откуда ты взял $password???
(предвкушая глупое "Из GETа", а ты её оттуда как взял? А никак!)
Книжки почитай!!!
(И Ð_то привыкай писать правильно!)

PHP:

<?php
require("config.inc.php"); //Там $adminpass = "123";
$password = (string) $_GET['password '];
if (
$password !== $adminpass) {
    print 
'<BR><BR>Введите пароль администратора!
          <br><br><form>
          <br><input type=password name=password>
          <br><input type=submit>
          </form>'
;
    exit;
}
?>


quote:
require() and include() are identical in every way except how they handle failure. include() produces a Warning while require() results in a Fatal Error. In other words, don't hesitate to use require() if you want a missing file to halt processing of the page. include() does not behave this way, the script will continue regardless. Be sure to have an appropriate include_path setting as well.

__________________
Админ - вождь Апачей...


Помещено Falcon 29-09-2005 в 09:15:

если в php.ini стоит register_globals=off то такой способ не катит - нужно забирать переменную из глобальных массивов (в твоем случае $_GET[password]). Лучше привыкать сразу использовать $_GET, $_POST - потому что не везде включены register_globals


Помещено Revolution 29-09-2005 в 09:53:

he][es
Не ругайся Просто я хотел привести пример вроде передачи значения как в адресной строке http://localhost/000.php?password=123
Код у меня правильный (не первый раз работаю с PHP), просто я его чисто кусок взял из примера (не полный)!!!

А тебе Falcon спасибо. Проблема решена. Я же говорил, что это при первой установке PHP ни один параметр не передается через "?" (вопросительный знак). Я же писал, что "Как то я чето менял в php.ini , а че забыл".
Еще раз спасибо Falcon

__________________
Media Commander - это новый медиа гигант в истории!!! Заходи на http://skynet.hut1.ru


Помещено he][es 29-09-2005 в 13:18:

Revolution ЕЩЁ Ð_АЗ ГОВОÐ_Ю ЧТО ТЫ НЕПÐ_АВИЛЬНО ДЕЛАЕШЬ!

quote:
Лучше привыкать сразу использовать $_GET, $_POST - потому что не везде включены register_globals

Я бы даже сказал ВЕЗДЕ выключены!
quote:
не первый раз работаю с PHP

не похоже... Ð_то самая детская и распространенная ошибка...

__________________
Админ - вождь Апачей...


Помещено Revolution 29-09-2005 в 14:40:

Спасибо за совет

__________________
Media Commander - это новый медиа гигант в истории!!! Заходи на http://skynet.hut1.ru


Помещено Xel'[Naga] 30-09-2005 в 20:42:

А ещё можно так, берёшь массив $_GET например.
И пишешь чо-нить типа этого:

PHP:


foreach ($_GET AS $par => $val)
{
$
$par = $val;
}


Примерно такая схема сделано у вб форумов. Очень удобно.
Но тут надо всё тонко сделать.
Например перед внесением в какой-нить массив инфы, нужно его очистить, чтобы нельзя было добавить переменную в массив из строки

__________________
Всего хорошего.


Помещено he][es 30-09-2005 в 22:21:

Xel'[Naga] а можно глупый вопрос: "А нафига?" Те же грабли - вид сбоку... + не секьюрибельно... Можно их кончно почистить... Но незная какие переменные придут, неизвестно как чистить...

PHP:


foreach ($_GET AS $par => $val) {
    $
$par = & $_GET[$par];
}


хоть память сэкономим...

__________________
Админ - вождь Апачей...


Помещено polo 30-09-2005 в 22:55:

extract($_GET)

__________________
Всегда есть решение.


Помещено Falcon 01-10-2005 в 11:41:

вот только при extract'е появляются все те же проблемы безопасности, из-за чего и выключают register_globals...


Помещено polo 01-10-2005 в 14:25:

quote:
те же проблемы безопасности, из-за чего и выключают register_globals
Конечно, это тоже самое.

Вариант с ручным извлечением удобен тем чтоможно контролировать все параметры и приводить к нужному типу.

__________________
Всегда есть решение.


Помещено Xel'[Naga] 01-10-2005 в 22:27:

he][es: А это для того, чтобы не писать $_GET $_POST $COOKIE и ещё всякой ботвы.
Меня вот напригает писать по 10 раз слово $_GET['123'] в одной строке + ещё другие.
По поводу безопасности, поверь, при умном подходе, никто ничего не сделает. Все массивы перед их созданием чистяться(после этой функции), поэтому внести что-то в них невозможно. Все переменные во время работы обрабатываются. Я же сказал, всё зависит от хотения + "register_globals(on)" будет работать ВСЕГДА.
А регистер глобалс выключают по умолчанию имхо потому, что развелось сильно много скриптов(не грамотно написанных), через которые можно поиметь доступ.

__________________
Всего хорошего.


Формат времени GMT. Текущее время 10:23.
Показаны 12 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.