Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
netadmin.ws
Панель управления Регистрция свободна! Календарь Список пользователей Часто задаваемые вопросы Поиск по форуму Архив скриптов Главная   
Форум сетевых администраторов
Форум сетевых администраторов Форум сетевых администраторов » Программирование » PHP » GET vs. POST & register_globals...
Предыдущая тема     Следующая тема
Автор
Тема    Новая тема     Ответить на эту тему
he][es
Участник+
Средний рейтинг: 4.07 | Оценок: 30
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2003
Место проживания: Барнаул, Россия
Публикаций: 1169
Статус: he][es в оф-лайне
GET vs. POST & register_globals... [сообщение #50563]

Господа, я тут "позаимствовал" вот такой класс в IPB, как я понимаю, это то же самое что и register_globals? И я раздумываю о целесообразности применения сего кода...
(кто то писал, что register_globals = on "дурной тон", я согласен... Мне бы хотелось, что бы задавать переменные в скрипте можно было как GETом так и POSTом... Т.е. с одной стороны GET "некрасив" и не "безопасен" (строка браузера), но функционален, можно в любую ссылку запихнуть, а POST "красивее" и "немного безопаснее"...
Просто хотелось бы услышать мнения когда что использовать?..)

PHP:


class FUNC {
    function 
parse_incoming() {
    global 
$HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_CLIENT_IP, $REQUEST_METHOD, $REMOTE_ADDR, $HTTP_PROXY_USER, $HTTP_X_FORWARDED_FOR;
    
$return = array();
    if( 
is_array($HTTP_GET_VARS) ) {
        while( list(
$k, $v) = each($HTTP_GET_VARS) ) {
            if( 
is_array($HTTP_GET_VARS[$k]) ) {
                while( list(
$k2, $v2) = each($HTTP_GET_VARS[$k]) ) {
                    
$return[$k][ $this->clean_key($k2) ] = $this->clean_value($v2);
                }
            }
            else {
                
$return[$k] = $this->clean_value($v);
            }
        }
    }
    
// Overwrite GET data with post data
    
if( is_array($HTTP_POST_VARS) ) {
        while( list(
$k, $v) = each($HTTP_POST_VARS) ) {
            if ( 
is_array($HTTP_POST_VARS[$k]) ) {
                while( list(
$k2, $v2) = each($HTTP_POST_VARS[$k]) ) {
                    
$return[$k][ $this->clean_key($k2) ] = $this->clean_value($v2);
                }
            }
            else {
                
$return[$k] = $this->clean_value($v);
            }
        }
    }
    return 
$return;
    }
    
    function 
clean_key($key) {
        if (
$key == "") {
            return 
"";
        }
        
$key = preg_replace( "/../"           , ""  , $key );
        
$key = preg_replace( "/__(.+?)__/"  , ""  , $key );
        
$key = preg_replace( "/^([w.-_]+)$/", "$1", $key );
        return 
$key;
    }

    function 
clean_value($val) {
    
        if (
$val == "")
        {
            return 
"";
        }
        
$val = str_replace( " "       , " "             , $val );
        
$val = str_replace( "&"            , "&"         , $val );
        
$val = str_replace( "<!--"         , "&#60;&#33;--"  , $val );
        
$val = str_replace( "-->"          , "--&#62;"       , $val );
        
$val = preg_replace( "/<script/i"  , "&#60;script"   , $val );
        
$val = str_replace( ">"            , "&gt;"          , $val );
        
$val = str_replace( "<"            , "&lt;"          , $val );
        
$val = str_replace( "\""           , "&quot;"        , $val );
        
$val = preg_replace( "/|/"        , "&#124;"        , $val );
        
$val = preg_replace( "/\n/"        , "<br>"          , $val ); // Convert literal newlines
        
$val = preg_replace( "/\\$/"      , "&#036;"        , $val );
        
$val = preg_replace( "/\r/"        , ""              , $val ); // Remove literal carriage returns
        
$val = str_replace( "!"            , "&#33;"         , $val );
        
$val = str_replace( "'"            , "&#39;"         , $val ); // IMPORTANT: It helps to increase sql query safety.
        
$val = stripslashes($val);                                     // Swop PHP added backslashes
        
$val = preg_replace( "/\/"       , "&#092;"        , $val ); // Swop user inputted backslashes
        
return $val;
    }
}

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

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 23-08-2003 13:02
Нажмите сюда для просмотра профайла he][es Отправить Персональное сообщение he][es Найти сообщения от he][es Добавить he][es в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
burzum
Участник

Зарегистрирован: Mar 2004
Место проживания: Россия, Москва
Публикаций: 3
Статус: burzum в оф-лайне
[сообщение #61966]

Я, например, НИКОГДА не использую доступ к GET, POST и т.п. переменным через regisyer_globals, хотя бы потому, что если хостер отключит эту опцию, скрипты придется переписывать.

а если хочешь задавать переменные и get'ом и post'ом в одном скрипте - используй приведенный тобой код. Я напр. делаю так (значения берутся без проверки):

PHP:


function get_http_var($varname) {
    global 
$HTTP_GET_VARS,$HTTP_POST_VARS;
    if (isset(
$HTTP_GET_VARS[$varname]) && !isset($HTTP_POST_VARS[$varname])) {
        return 
$HTTP_GET_VARS[$varname];
    } else if (isset(
$HTTP_POST_VARS[$varname]) && !isset($HTTP_GET_VARS[$varname])) {
        return 
$HTTP_POST_VARS[$varname];
    } else {
        return 
false;
    }
}



Т.е. в одно время может быть прислана либо get, либо post переменная, причем если не пришло ничего или пришли сразу обе переменные возвращается false.

Ну а проверки правильности полученного значения уже произвожу потом, если же ф-ция вернула false, устанавливаю переменной значение по умолчанию

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 02-03-2004 17:48
Нажмите сюда для просмотра профайла burzum Отправить Персональное сообщение burzum Найти сообщения от burzum Добавить burzum в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
Zlomrak
кошмар программиста
Средний рейтинг: 5 | Оценок: 2

Зарегистрирован: Mar 2004
Место проживания: Russia, Saint-Petersburg
Публикаций: 98
Статус: Zlomrak в оф-лайне
[сообщение #63095]

собственно пока юзаю register_globals....хотя пора отучаться =)))

после версии PHP 4.1.0
можно не делить на HTTP_GET_VARS и HTTP_POST_VARS,
а просто писать _REQUEST['$varname']

длинные имена поговаривают в будущих версиях отомрут....

__________________
Верить никому нельзя....Даже себе...Мне - можно...

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 20-03-2004 20:51
Нажмите сюда для просмотра профайла Zlomrak Отправить Персональное сообщение Zlomrak Посетить домашнию страничку Zlomrak! Найти сообщения от Zlomrak Добавить Zlomrak в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
he][es
Участник+
Средний рейтинг: 4.07 | Оценок: 30
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2003
Место проживания: Барнаул, Россия
Публикаций: 1169
Статус: he][es в оф-лайне
[сообщение #63097]

Zlomrak угу... есть $_GET[] & $_POST[]

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

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 20-03-2004 21:05
Нажмите сюда для просмотра профайла he][es Отправить Персональное сообщение he][es Найти сообщения от he][es Добавить he][es в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
Zlomrak
кошмар программиста
Средний рейтинг: 5 | Оценок: 2

Зарегистрирован: Mar 2004
Место проживания: Russia, Saint-Petersburg
Публикаций: 98
Статус: Zlomrak в оф-лайне
[сообщение #63134]

да...оно тоже есть...
но по-моему проще писать $_REQUEST['$varname'] , чтобы не думать каждый раз как эта переменная была передана...

__________________
Верить никому нельзя....Даже себе...Мне - можно...

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 21-03-2004 01:36
Нажмите сюда для просмотра профайла Zlomrak Отправить Персональное сообщение Zlomrak Посетить домашнию страничку Zlomrak! Найти сообщения от Zlomrak Добавить Zlomrak в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
polo
Администратор
Средний рейтинг: 4.77 | Оценок: 106
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус: polo в оф-лайне
[сообщение #63140]

Зависит от случая, когда пофиг как данные были переданны то да, но часто бывает что данные должны поступить именно одним способом.

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

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 21-03-2004 02:12
Нажмите сюда для просмотра профайла polo Отправить Персональное сообщение polo Посетить домашнию страничку polo! Найти сообщения от polo Добавить polo в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
Zlomrak
кошмар программиста
Средний рейтинг: 5 | Оценок: 2

Зарегистрирован: Mar 2004
Место проживания: Russia, Saint-Petersburg
Публикаций: 98
Статус: Zlomrak в оф-лайне
[сообщение #63148]

а...ну в этом случае безусловно юзать надо _ГЕТ или _ПОСТ

__________________
Верить никому нельзя....Даже себе...Мне - можно...

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 21-03-2004 02:59
Нажмите сюда для просмотра профайла Zlomrak Отправить Персональное сообщение Zlomrak Посетить домашнию страничку Zlomrak! Найти сообщения от Zlomrak Добавить Zlomrak в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
Silencer
Участник+
Средний рейтинг: 4.08 | Оценок: 12
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2003
Место проживания: Санкт-Петербург
Публикаций: 152
Статус: Silencer в оф-лайне
[сообщение #63160]

И шо вы так import_request_variables() не любите?

__________________
Типа спициялист по елехтронной комэрцыи. Крут не по децки.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 21-03-2004 06:41
Нажмите сюда для просмотра профайла Silencer Отправить Персональное сообщение Silencer Посетить домашнию страничку Silencer! Найти сообщения от Silencer Добавить Silencer в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
Denveroid
SiteMaker
Средний рейтинг: 4.33 | Оценок: 9
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Jun 2002
Место проживания: Israel
Публикаций: 220
Статус: Denveroid в оф-лайне
[сообщение #63273]

Секьюрнее использовать $_GET и $_POST для обработки юзер-инпута.

__________________
`
SiteMaker.Ru - Академия сайтостроительства

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 22-03-2004 20:04
Нажмите сюда для просмотра профайла Denveroid Отправить Персональное сообщение Denveroid Посетить домашнию страничку Denveroid! Найти сообщения от Denveroid Добавить Denveroid в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
Silencer
Участник+
Средний рейтинг: 4.08 | Оценок: 12
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2003
Место проживания: Санкт-Петербург
Публикаций: 152
Статус: Silencer в оф-лайне
[сообщение #63290]

Чем это секурнее? Если использовать import_request_variables с префиксом - то в плане секурности разницы никакой. А вот удобства прибавляется.

__________________
Типа спициялист по елехтронной комэрцыи. Крут не по децки.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 23-03-2004 00:41
Нажмите сюда для просмотра профайла Silencer Отправить Персональное сообщение Silencer Посетить домашнию страничку Silencer! Найти сообщения от Silencer Добавить Silencer в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
burzum
Участник

Зарегистрирован: Mar 2004
Место проживания: Россия, Москва
Публикаций: 3
Статус: burzum в оф-лайне
[сообщение #63314]

Однако так кушаются лишние ресурсы, т.к. мало-ли какие переменные пришлет пользователь,
а через $_GET и $_POST имеется доступ только к нужным скрипту переменным.
При регистрации и импорте ведь создаются глобальные КОПИИ переменных а не ссылки на $_GET, etc...
Впрочем, если register_globals включен (как это обычно бывает), то разницы почти нет, т.к. все равно будут иметься глобальные копии переменных.

Пример:
Вызываем приведенный ниже скрипт: http://localhost/test.php?a=111

PHP:


<?php

import_request_variables
("gP", "g_");
echo 
'global : '.$a.'<br />';
echo 
'$_GET: '.$_GET['a'].'<br />';
echo 
'imported global: '.$g_a."<br />";
echo 
'Присваиваем $_GET новое значение: '.($_GET['a']='GET').'<br />';
echo 
'новое значение импортированной глобальной переменной: '.$g_a.'<br />';
echo 
'новое значение глобальной переменной: '.$a.'<br />';
echo 
'Как видно глобальные переменные не меняются, значит они не ссылки на $_GET<br />';
echo 
'новое значение $_GET: '.$_GET['a'].'<br />';
echo 
'Поменяем значения глобальных переменных<br />';
$g_a='импортированная';
echo 
'новое значение импортированной глобальной переменной: '.$g_a.'<br />';
$a='глобальная';
echo 
'новое значение глобальной переменной: '.$a.'<br />';
echo 
'новое значение $_GET: '.$_GET['a'].'<br />';

?>



Ð_езультат:
global : 111
$_GET: 111
imported global: 111
Присваиваем $_GET новое значение: GET
новое значение импортированной глобальной переменной: 111
новое значение глобальной переменной: 111
Как видно глобальные переменные не меняются, значит они не ссылки на $_GET
новое значение $_GET: GET
Поменяем значения глобальных переменных
новое значение импортированной глобальной переменной: импортированная
новое значение глобальной переменной: глобальная
новое значение $_GET: GET

Из него видно, что если у нас включен register_globals и мы выполняем import_request_variables, то получим три переменных с одинаковыми значениями. Теперь представьте что мы пользуемся не GET'ом а POST'ом и мерзкий хакер прислал нам переменную с 2-х - 3-х меговым значением.
Скрипт тогда получит 6-9 мегов данных...

Поправьте меня если я не прав...

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 23-03-2004 11:51
Нажмите сюда для просмотра профайла burzum Отправить Персональное сообщение burzum Найти сообщения от burzum Добавить burzum в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
he][es
Участник+
Средний рейтинг: 4.07 | Оценок: 30
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2003
Место проживания: Барнаул, Россия
Публикаций: 1169
Статус: he][es в оф-лайне
[сообщение #63334]

quote:

Поправьте меня если я не прав...


В настройках (кажется) PHP выставляется сколько он будет инф-ии принимать...

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

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 23-03-2004 14:12
Нажмите сюда для просмотра профайла he][es Отправить Персональное сообщение he][es Найти сообщения от he][es Добавить he][es в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
burzum
Участник

Зарегистрирован: Mar 2004
Место проживания: Россия, Москва
Публикаций: 3
Статус: burzum в оф-лайне
[сообщение #63338]

Да, но там обычно стоит от 8 до 16 мегов макс. размер POST запроса, а это достаточно немало, чтобы ещё копии плодить... учитывая что напр. на хостинге одного моего проекта стоит ограничение на использование памяти скриптом <8 Мб.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 23-03-2004 14:36
Нажмите сюда для просмотра профайла burzum Отправить Персональное сообщение burzum Найти сообщения от burzum Добавить burzum в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя



Формат времени GMT. Текущее время 13:19.
Новая тема   Ответить на эту тему [ Версия для печати Печать | Отправить эту страницу другу/знакомому! Отправить | Получать уведомления об обновлении этой темы Подписка ] Предыдущая тема     Следующая тема
Навигация по форуму:
Оценка темы:

Правила форума:
Вы не можете создавать новые темы.
Вы не можете отвечать на существующие темы.
Вы не можете прикреплять файлы.
Вы не можете редактировать свои сообщения.
HTML теги выкл.
Спец. код вкл.
Смайлики вкл.
[IMG] тег выкл.
 

Page generated in 1.58522511 seconds (99.59% PHP - 0.41% MySQL) with 26 queries.


  Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
©NetAdmin.ws, 2001-2026.
Powered by: vBulletin
Copyright ©2000, 2001, Jelsoft Enterprises Limited.