|
| |
|
|
| |
для: 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 | |
| |
|
|
| |
|
|
| |
для: 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'] остаётся. | |
| |
|
|
| |
|
|
| | Добрый день!
У меня возникли вопросы, ответьте, пожалуйста.
Цитирую книгу "PHP5 на примерах" стр 274, глава 9 "Безопасное программирование web сайтов"
Замечание. Возможна безопасная работа и при вкличенной директиве register_globals, однако в этом случае необходима явная инициализация всех переменных.
Таким образом, необходимо помнить, что следует либо отключитьдирективу register_globals, либо обеспечить явную инициализацию всех переменных. Это делает невозможным 95% всех возможных атак.
Вопросы:
1. Как производится явная инициализация переменных? Пример, если можно.
2. Если директива отключена:
- сохраняется ли возможность передавать переменные методами "EGPCS"?
- можно ли к этим переменным обращаться $_GET['val'], $_POST['val'] ? | |
| |
|
|
|