denich » 2008.08.09 22:48

хотелось бы поговорить и узнать больше инфы о глобальных переменных и register globals)

вобщем то я знаю что register globals(если ON) то это большая дыра в безопасноти,
что переменные вида $_GET['opa'] или $_SERVER['QUERY_STRING'] при включенном register globals, будут иметь вид $opa и $QUERY_STRING

Вообщем то это всё..

Gemorroj » 2008.08.09 23:49

не только $_GET и $_SERVER, но и $_POST, $_SESSION, $_COOKIES, $_REQUEST.

denich » 2008.08.11 17:34

хм

Писюн » 2008.08.16 12:29

Ну регистер глобал снетакая уж дыра если прогер не криворукий, но за его использование руки отрывать надо. А про глобальные переменные, то phpinfo(); напиши. Там все $_СЕРВЕР переменные будут

kot » 2008.08.20 09:40

Мастера объясните для чего нужны эти глобальные переменные и что они дают ? И вообщечто это такое ? У меня не работал скрипт форума на беспл.хосте(НЕВОЗМОЖНО БЫЛО СОЗДАТЬ ТЕМУ) http://wapf.ru и на форуме вен.ру кто-то посоветовал мне включить  эти глобальные переменные прописав в .htaccess следующую строку

Код:

1
php_flag register_globals On

и о чудо,всё заработало!Второй случай уже был на платном хосте.Я установил скрипт сервиса чатов и он тоже не хотел работать(НЕВОЗМОЖНО БЫЛО ЗАРЕГАТЬ ЧАТ).Тогда я вспомнив,что мне посоветовали на форуме вен.ру год назад включил в .htaccess эту строку и всё заработало. Обьясните какую функцию на сервере или в скрипте эта строка включила.

Helqg » 2008.08.20 17:18

не функцию включила, а разрешила обрабатывать переменные по их именам без указания откуда они приперлись.

Gemorroj » 2008.08.20 19:13

Вообще по этим глобальным переменным можно судить о качестве скрипта, если он работает только на включенных, то можно судить о его низком качестве.
Если глобальные переменные включены, то все что введет пользователь, становится одноименными переменными в скрипте. Т.е. если у нас $_SESSION['id'] = 1;, то при включенных глобальных переменных, если пользователь введет http://link.ru/?id=2, $_SESSION['id'] станет равна 2. И вообще так можно подменить любую явно не обьявленную переменную.

ПеревозЧЕГ » 2008.12.07 23:21

вот много читал про регистр глобалс но так до конца и не понял когда он а когда оф. Понял то что при он данные передаются в ссылке а при оф нет.
Вот я на данный момент понял так:
<input type=text name=login value="name">
Если регистр глобалс он то когда данные идут из формы  то можно сразу при обработке данных писать  $login, при регистр глобалс оф надо явно объявить $login=$_POST['login']
Я верно понимаю?

denich » 2008.12.07 23:35

верно мыслишь)

Gemorroj » 2008.12.08 01:02

Ну как, не обязательно делать ее $login, вполне можно пользоваться и переменной в массиве. Просто надо понимать, что при отключенных глоб переменных все данные попадают в соответствующие им массивы ($_GET, $_POST, $_COOKIES, $_SESSION).

Alaya » 2008.12.08 08:56

при выключенном, переменные сразу передаются, куда нужно. При включенном, сначала передаются в некий массив, потом уже куда нужно. Так? Разве не лучше, то что проще?

ПеревозЧЕГ » 2008.12.08 09:22

Gemorroj написал:

Ну как, не обязательно делать ее $login, вполне можно пользоваться и переменной в массиве. Просто надо понимать, что при отключенных глоб переменных вс� данные попадают в соответствующие им массивы ($_GET, $_POST, $_COOKIES, $_SESSION).

А при включенных?

НЕЗНАЙКА » 2008.12.08 10:21

При использовании $_Сервер это ничего не меняет, они автоматически глобальны т.е. доступны в любой области видимости. Поэтому лучше использовать их.

Gemorroj » 2008.12.08 11:41

они все суперглобальны) вообще правильно говорить суперглобальные массивы.

Alaya написал:

потом уже куда нужно

нет! они как раз попадают туда куда НЕ нужно!
вдумайся в эту строчку
$login = $_POST['login'];
правая и левая части равны! что заставляет приранивать их??? если кого-то это напрягает, то можно просто использовать $_POST['login'];
так же при откл глоб переменных сразу видно какая переменная откуда пришла. Лена, поверь, с отключенными глоб переменными код становится не только безопаснее, но и куда читабельнее.

Alaya » 2008.12.09 12:56

эллементарный скриптик, с автозаменой. С отключенными глобальными переменными не работает...
<?php
include 'head.php';
?>
<div class="g">Перевод:</div>
<form action = "result.php" method="get">
Ваше имя:<br>
<input type="text" name="name" value=""/><br>
Введите текст:<br>
<input type="text" name="msg" value=""/><br>
<input type="submit" value="Перевести"/>
</form>
<?php
include 'foot.php';
?>

<?php
include 'per.php';
$msg = htmlspecialchars(stripslashes($msg));
include 'head.php';
?>
<?php
$file = fopen("data/log/log.txt","a");
fputs($file,$msg."\n");
fclose($file);
chmod ("data/log/log.txt", 0666);
?>
<div class="zagolovok">Переводчик</div>
<div class="main">
<b>Результат перевода:</b><br>
<?php
echo $msg;
?>
<br>
<b>Так же Вы можете скопировать результат через форму:</b><br>
<input type="text" name="servis" value="<?php echo $msg; ?>"/>
<br>
<b>Или</b> <a href="send.php?msg=<?php echo $msg; ?>">отправить</a> <b>его на e-mail.</b>
</div>
<?php
include 'foot.php';
?>

Gemorroj » 2008.12.09 13:08

проблема в низком уровне кодинга, а не в глоб переменных.
неужели трудно понять что нужно поменять?
<input type="text" name="name" value=""/><br>
Введите текст:<br>
<input type="text" name="msg" value=""/><br>

ты тут передаешь 2 перменные name и msg
<form action = "result.php" method="get"> - явно указываешь метод GET
следовательно указанные тобой переменные попадают в массив GET, т.е. $_GET['msg'] и $_GET['name']