Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: php.ini register_globals=On
 
 автор: margol   (26.04.2007 в 12:29)   письмо автору
 
 

Добрый день!
У меня возникли вопросы, ответьте, пожалуйста.
Цитирую книгу "PHP5 на примерах" стр 274, глава 9 "Безопасное программирование web сайтов"

Замечание. Возможна безопасная работа и при вкличенной директиве register_globals, однако в этом случае необходима явная инициализация всех переменных.
Таким образом, необходимо помнить, что следует либо отключитьдирективу register_globals, либо обеспечить явную инициализацию всех переменных. Это делает невозможным 95% всех возможных атак.

Вопросы:
1. Как производится явная инициализация переменных? Пример, если можно.
2. Если директива отключена:
- сохраняется ли возможность передавать переменные методами "EGPCS"?
- можно ли к этим переменным обращаться $_GET['val'], $_POST['val'] ?

   
 
 автор: cheops   (26.04.2007 в 14:01)   письмо автору
 
   для: margol   (26.04.2007 в 12:29)
 

1) Вы можете просто назначить переменной значения
<?php
  $access 
0;
  
// ...
  // Использование переменной $access
?>

2) Да, можно обращаться при помощи $_GET['val'], $_POST['val'], $_COOKIE['val'], $_SESSION['val'] остаётся.

   
 
 автор: margol   (26.04.2007 в 15:08)   письмо автору
 
   для: cheops   (26.04.2007 в 14:01)
 

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

   
 
 автор: Trianon   (26.04.2007 в 15:09)   письмо автору
 
   для: margol   (26.04.2007 в 12:29)
 

1. простейший пример скрипта, в котором проявляется уязвимость:

<?   error_reporting(E_WARNING);

   
// $access = 0; // необходима явная инициализация переменных

   
if(md5($password) == '7ad638d57e2fa78328fc4cdb78b084f6')
      
$access 1;


   if(!
$access)
   {
      if(
$password" Пароль неверный. Кыш отюда! <br><br>";

      echo  
" Введите пароль <form method=post><input name=password><input type=submit><form method=post>";
   }
   else
   {
      echo  
"Вы вошли в пещеру";
   }
?>

Если строку // $access = 0; оставить отключенной, то на страницу можно попасть, не зная пароль, например так:
а) набрав index.php?access=1
б) создав форму с полем <input name=access value=1>
б) засунув access=1 в кукис


2.
а) возможность передавать переменные методами "EGPCS" есть всегда. Она не зависит от того, включен регистр_глобалс или нет.

б) получать значения полей ввода через массивы $_GET, $_POST, $_COOKIE, $_REQUEST можно всегда. Это тоже не зависит от того, включен регистр_глобалс или нет.


Определить, из какого конкретно источника (URL , cookie, или form post) пришла переменная через регистр-глобалс, не обращаясь к массивам $_GET, $_POST.. - невозможно.

На очень старых php (до 4.1) эти массивы есть, но под длинными именами HTTP_GET_VARS... и их можно переприсвоить. На php3 их нет, но на php3 не идет 80% современного кода, да и хостинг, где php3, нужно искать с огнем и собаками..

В php6 регистр глобалс невозможно включить, а длинные имена суперглобальных массивов окончательно умрут - единственным методом доступа будут массивы $_GET, $_POST, $_COOKIE, $_REQUEST

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования