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

Форум PHP

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

 

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

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

тема: Помогите разобраться с глобальными массивами в PHP!!!!!!!!!!!!!
 
 автор: shtuchka   (28.12.2004 в 20:31)
 
 

Поясните кто-нибудь как глобальные массивы осуществляют функцию конфиденциальности? Как они не позволяют пользователю работать с GET, а только с POST? Очень на вас надеюсь.

   
 
 автор: cheops   (28.12.2004 в 21:24)   письмо автору
 
   для: 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

   
Rambler's Top100
вверх

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