|
автор: shtuchka (28.12.2004 в 20:31) |
|
| Поясните кто-нибудь как глобальные массивы осуществляют функцию конфиденциальности? Как они не позволяют пользователю работать с GET, а только с POST? Очень на вас надеюсь. | |
|
|
|
|
|
|
|
для: shtuchka
(28.12.2004 в 20:31)
| | Если у нас имеется HTML-форма
<form action=handler.php action=post>
<input type=text name=user>
<input type=text name=password>
<input type="submit" name=edit value="Редактировать">
</form>
|
то мы можем в обработчике handler.php узнать текст, введённый посетителем в текстовые поля user и password, обратившись к переменным $user и $password
<?php
echo "пользователь - $user";
echo "пароль - $password";
?>
|
Это основная особенность PHP, именно за это он и любим всеми, но, если проверка имени пользователя user и его пароля password будет выполнена не совсем аккуратно, например, так
<?php
// Файл handler.php, принимающий от формы index.php два параметра
// $user и $password для имени пользователя и пароля, соответственно
if($user == "user1" && $password == "password1")
{
$access = 1;
}
if($access)
{
// Доступ к виртуальному счёту
}
?>
|
то логика работы скрипта может быть нарушена. Так если в строке запроса обратится по адресу handler.php?access=1 авторизация произойдет, минуя HTML-форму и части кода, ответственного за авторизацию. Разумеется, в данном случае защитить Web-приложени очень просто, но в больших Web-приложениях могут быть неочевидные ситуации. На фоне того, что злоумышленник может автоматически обращаться и ана-лизировать ответы, или коды выложены для всеобщего доступа, вероятность взлома возрастает значительно, так как отследить все такие ситуации сложно.
Поэтому в PHP 5 по умолчанию диретиву register_globals, ответственную на непосрдетсвенную передачу значений из форм и строки запроса в переменные скрипта стали отключать и для того чтобы обратится к данным переданных, например, методом POST следует обратится к суперглобальному массиву $_POST:
<?php
echo "пользователь - ".$_POST['user'];
echo "пароль - ".$_POST['password'];
?>
|
а методом GET, соответственно к массиву $_GET. Содержимое массивов $_GET и $_POST не пересекается и данные получаются разделёнными. Поэтому если мы передадим пароль и имя пльзователя методом POST и сравним оригинальные пароль и имя с элементами суперглобального массива $_POST, но методом GET передать скрипту пароль и имя уже не получится.
Даже если директива register_globals не отключена, всё-равно следует разрабатывать Web-приложения с использованием суперглобальных массивов, так как рано или поздно она будет включена везде, а потом её просто жёстко зафиксируют в языке. Об этой директиве так же можно почитать по ссылке.
http://www.softtime.ru/info/articlephp.php?id_article=13 | |
|
|
|