[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-general-bg
Subject:    [PHP]: manual: register_globals= on/off
From:       Martin Lazarov <lazcorp () digicom ! bg>(by way of Martin Lazarov <lazcorp () digicom ! bg
Date:       2004-03-27 1:21:48
Message-ID: 200403270321.48790 () lazcorp ! homelinux ! com
[Download RAW message or body]

[Attachment #2 (text/plain)]

Пускам тази тема за да не се налага всеки път тя да бъде обяснявана.
Първо ще дам един пример:
<!-- index.php //-->
<HTML>
<HEAD><TITLE>Register_Globals</TITLE></HEAD>
<BODY>
<FORM method="post">
Напишете нещо в полето и натиснете бутона "Прати" за да проверите<br>
състоянието на променливата register_blobals<br>
<INPUT TYPE="TEXT" NAME="txt">
<INPUT TYPE="HIDDEN" NAME="alt" VALUE="123">
<INPUT TYPE="SUBMIT" NAME="send" VALUE="Прати">
</FORM>
<?
if($send!="" || $_POST['send']!=""){
    if ($alt=="" && $_POST['alt'] != ""){
        echo "Register_blobals=off;<br>";
        echo " ие написахте:".$_POST['txt']."<br>";
    }
    else{
        echo "Register_blobals=on;<br>";
        echo " ие написахте:".$txt."<br>";
    }
}
?>
</BODY>
</HTML>
<!-- end index.php //-->
Този сктипт открива дали сте с register_blobals= on или off тази променлива
 се намира  php.ini конфигурационния файл.
А сега за самата променлива....
При register_globals=on се създава възможност за "хакване" на скриптовете ви.
Със следващия пример ще се опитам да ви обясня защо.

<?php
// Приемаме, че register_globals=on;
if (authenticated_user()) {
// функцията authenticated_user() проверява дали потребителят извикващ тази
// страница е идентифициран.
   $authorized = true;
}
if ($authorized) {
//ако потребителя е идентифициран, то се зареждат данните...
   include "/highly/sensitive/data.php";
}
// но ако извикаме скрипра така:
// scripts.php?authorized=true
// то извиканият скрипт ще зареди данните от /highly/sensitive/data.php
// това е недопостимо разбирасе..
// за да се избегне този пробив в началото на страницата трябва да се
// сложи само един ред:
// $authorized = false;
// Така се предефинира променливата ако тя е зададена предварително.
?>

 Много по-удобно е да се работи когато register_globals=on, но това крие
рискове, ако не познавате достатъчно добре кода си.
 Искам да спомена, че когато register_globals=off, то за да се извлекат
данните пратени от браузера трябва да се използва $_GET[promenliwa] или
$_POST[promenliwa]. Така няма начин потребителя да дефинира някаква
променлива която не желаем.
 Използването на register_globals=off е по-сигурно, но е свързано с писането
на повече код.
 Надявам се това да помогне на навлизащите в php, а да не ги обърка още
повече :-)

Мартин Лазаров



[Attachment #3 (text/plain)]

======================================
http://zvuk.net/mailman/listinfo/php
Bulgarskata PHP lista
Molia, pochistvaite suobshteniata si!
======================================

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic