![]() |
Показаны 13 сообщений на этой странице |
Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- GET vs. POST & register_globals... (http://netadmin.ws/forum/showthread.php?threadid=6330)
GET vs. POST & register_globals...
Господа, я тут "позаимствовал" вот такой класс в IPB, как я понимаю, это то же самое что и register_globals? И я раздумываю о целесообразности применения сего кода...
(кто то писал, что register_globals = on "дурной тон", я согласен... Мне бы хотелось, что бы задавать переменные в скрипте можно было как GETом так и POSTом... Т.е. с одной стороны GET "некрасив" и не "безопасен" (строка браузера), но функционален, можно в любую ссылку запихнуть, а POST "красивее" и "немного безопаснее"...
Просто хотелось бы услышать мнения когда что использовать?..)
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( "<!--" , "<!--" , $val );
$val = str_replace( "-->" , "-->" , $val );
$val = preg_replace( "/<script/i" , "<script" , $val );
$val = str_replace( ">" , ">" , $val );
$val = str_replace( "<" , "<" , $val );
$val = str_replace( "\"" , """ , $val );
$val = preg_replace( "/|/" , "|" , $val );
$val = preg_replace( "/\n/" , "<br>" , $val ); // Convert literal newlines
$val = preg_replace( "/\\$/" , "$" , $val );
$val = preg_replace( "/\r/" , "" , $val ); // Remove literal carriage returns
$val = str_replace( "!" , "!" , $val );
$val = str_replace( "'" , "'" , $val ); // IMPORTANT: It helps to increase sql query safety.
$val = stripslashes($val); // Swop PHP added backslashes
$val = preg_replace( "/\/" , "\" , $val ); // Swop user inputted backslashes
return $val;
}
}
__________________
Админ - вождь Апачей...
Я, например, НИКОГДА не использую доступ к GET, POST и т.п. переменным через regisyer_globals, хотя бы потому, что если хостер отключит эту опцию, скрипты придется переписывать.
а если хочешь задавать переменные и get'ом и post'ом в одном скрипте - используй приведенный тобой код. Я напр. делаю так (значения берутся без проверки):
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;
}
}
собственно пока юзаю register_globals....хотя пора отучаться =)))
после версии PHP 4.1.0
можно не делить на HTTP_GET_VARS и HTTP_POST_VARS,
а просто писать _REQUEST['$varname']
длинные имена поговаривают в будущих версиях отомрут....
__________________
Верить никому нельзя....Даже себе...Мне - можно...
Zlomrak угу... есть $_GET[] & $_POST[]
__________________
Админ - вождь Апачей...
да...оно тоже есть...
но по-моему проще писать $_REQUEST['$varname'] , чтобы не думать каждый раз как эта переменная была передана...
__________________
Верить никому нельзя....Даже себе...Мне - можно...
Зависит от случая, когда пофиг как данные были переданны то да, но часто бывает что данные должны поступить именно одним способом.
__________________
Всегда есть решение.
а...ну в этом случае безусловно юзать надо _ГЕТ или _ПОСТ
__________________
Верить никому нельзя....Даже себе...Мне - можно...
И шо вы так import_request_variables() не любите?
__________________
Типа спициялист по елехтронной комэрцыи. Крут не по децки.
Секьюрнее использовать $_GET и $_POST для обработки юзер-инпута.
__________________
`
SiteMaker.Ru - Академия сайтостроительства
Чем это секурнее? Если использовать import_request_variables с префиксом - то в плане секурности разницы никакой. А вот удобства прибавляется.
__________________
Типа спициялист по елехтронной комэрцыи. Крут не по децки.
Однако так кушаются лишние ресурсы, т.к. мало-ли какие переменные пришлет пользователь,
а через $_GET и $_POST имеется доступ только к нужным скрипту переменным.
При регистрации и импорте ведь создаются глобальные КОПИИ переменных а не ссылки на $_GET, etc...
Впрочем, если register_globals включен (как это обычно бывает), то разницы почти нет, т.к. все равно будут иметься глобальные копии переменных.
Пример:
Вызываем приведенный ниже скрипт: http://localhost/test.php?a=111
<?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 />';
?>
quote:
Поправьте меня если я не прав...
__________________
Админ - вождь Апачей...
Да, но там обычно стоит от 8 до 16 мегов макс. размер POST запроса, а это достаточно немало, чтобы ещё копии плодить... учитывая что напр. на хостинге одного моего проекта стоит ограничение на использование памяти скриптом <8 Мб.
| Формат времени GMT. Текущее время 13:18. | Показаны 13 сообщений на этой странице |
Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.