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

Форум PHP

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

 

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

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

тема: Как защитить include?
 
 автор: Shorr Kan   (18.02.2005 в 02:37)   письмо автору
 
 

Мой скрипт использует инклуды. Инклудные файлы имеют всегда такую конструкцию:

if(переменная==значение){
...
}else{
ошибка
}

Все бы ничего, но и сам этот инклуд - когда работает - строит формы... и в них хидденом - эта переменная... т.е., посмотреть html-исходник - все видно. Так что можно подделать переменную, и передать ее самостоятельно. Как мне от этого защититься? Возможно, как-то так?

if(переменная==значение и прислана она от этого же файла){
...
}else{
ошибка
}

Но как это сделать - я не знаю....

   
 
 автор: cheops   (18.02.2005 в 12:25)   письмо автору
 
   для: Shorr Kan   (18.02.2005 в 02:37)
 

Переменную можно передать при помощи сессий, в этом случае само значение будет храниться на сервере, а идентификатор сессий передаваться от страницы к странице. http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=298

   
 
 автор: Shorr Kan   (18.02.2005 в 17:19)   письмо автору
 
   для: cheops   (18.02.2005 в 12:25)
 

Я что-то не понял, как сессии работают... ВОт я вставил в начале файла:


<? 
  session_start
(); 
  
$_SESSION['number'] = rand(1,100); 

  print 
$_SESSION['number']; 
?>  


И что? Теперь при каждой перезагрузке $_SESSION['number'] - всегда одно и то же число, до тех пор, пока человек не закроет браузер? А если браузер закрыл, и заново зашел на эту страничку - тогда уже сработает rand() ? Так? Или нужно что-то вроде:

<?
 
if(empty($_SESSION['number'])){$_SESSION['number'] = rand(1,100);}

 print 
$_SESSION['number'];
?>


?

   
 
 автор: cheops   (18.02.2005 в 17:39)   письмо автору
 
   для: Shorr Kan   (18.02.2005 в 17:19)
 

Да всё верно, небольшое уточнение области применения сессий. Пусть имеется страница index.php
<? 
  session_start
(); 
  
$_SESSION['number'] = rand(1,100); 
?>

При каждой загрузке этой странице элемент $_SESSION['number'] будет получать новое значение в интервале от 0 до 100. При загрузке страницы page.php, которая имеет следующее содержимое
<?php
  session_start
(); 
  print 
$_SESSION['number']; 
?>

Будет выведено последнее значение присвоенное на странице index.php. Суть в том, что таким способом можно передать значения переменных из одного файла в другие, не помещая их в параметры строки запросов, cookie и т.п.

   
 
 автор: Shorr Kan   (18.02.2005 в 17:43)   письмо автору
 
   для: cheops   (18.02.2005 в 17:39)
 

У меня задача именно такая... Человек заходит на страницу. Если он просто поновенькому зашел на нее - делает rand(). Если же он дергает на одну из submit на этой странице, и она, естественно, перегружается - rand() делаться НЕ должен...
Это как реализуется?

И еще... Значение этой переменной в сессии - строго индивидуально для каждого человека?

   
 
 автор: cheops   (18.02.2005 в 17:51)   письмо автору
 
   для: Shorr Kan   (18.02.2005 в 17:43)
 

Ну тогда, так как вы описали вполне подойдёт
<?php
if(!isset($_SESSION['number']))
{
  
$_SESSION['number'] = rand(1,100);
}
?>

Да, сессии уникальны в пределах сервера. Вам наверное так же будет интересно почитать тему (с середины про время жизни) http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=773

   
 
 автор: Shorr Kan   (18.02.2005 в 18:53)   письмо автору
 
   для: cheops   (18.02.2005 в 17:51)
 

Да действительно. Это интересно.

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

   
 
 автор: Sfinks   (18.02.2005 в 22:49)   письмо автору
 
   для: Shorr Kan   (18.02.2005 в 18:53)
 

Это конечно интересно, но я так понимаю инклюды инклюдятся с этого же хоста, следовательно самое простое и наименее ёмкое написать
<?php
  
if($_SERVER["REMOTE_ADDR"] == $_SERVER["SERVER_ADDR"]){
    ...
  }else{
    
ошибка
  
}
?>

   
 
 автор: Sfinks   (18.02.2005 в 23:25)   письмо автору
 
   для: Sfinks   (18.02.2005 в 22:49)
 

Sorri, ошибся..... Для include это не подойдет =((

   
Rambler's Top100
вверх

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