Список форумов » Технический форум » Видеонаблюдение » Программные решения

 

Начать новую тему Ответить на тему
Автор Сообщение
Не в сети
 Заголовок сообщения: Безопасность WEB-вьювера
СообщениеДобавлено: 12 янв 2010, 14:30
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
Постановка задачи: Обеспечить доступ к некоторым страницам одному, максимум двум клиентам.
Вот что у меня получилось:
Вложение:
Access.tar.gz

1. Папку Access надо положить в корень апача и сделать ссылку на Access/index.php
2. Защищаемые страници main.php и show.php
3. Доступ к странице main.php - index.php?op=main или просто index.php т.к.это страница по умолчанию.
4. Доступ к странице show.php - index.php?op=show
5. Имя пользователя и пароль в файле access.php

Какие возможные уязвимости есть у этого метода защиты?
Что можно улучшить?

PS Прошу учесть, что я начинающий WEB-писатель и сильно не пинать... :smile:


У вас нет доступа для просмотра вложений в этом сообщении.


          Вернуться к началу  
 
 Заголовок сообщения: Re: Безопасность WEB-вьювера
СообщениеДобавлено: 12 янв 2010, 15:44
  


Зарегистрирован: 08 дек 2009, 12:44
Сообщения: 32
Откуда: Саратов
хм.... мысль интересная, качнул, вечером попробую домашний сервак прикрутить к dyndns и поиграть


          Вернуться к началу  
 
Не в сети
 Заголовок сообщения: Re: Безопасность WEB-вьювера
СообщениеДобавлено: 12 янв 2010, 19:35
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
Yujen писал(а):
...вечером попробую домашний сервак прикрутить к dyndns и поиграть
А не рано в интернет это дело запускать? У меня есть сомнения относительно надежности... :scratch_one-s_head:
Дело в том, что сессия не закрывается принудительно, после окончания работы и остается активной 20 минут. Никак не могу придумать как ее закрыть после закрытия последней защищенной страници...


          Вернуться к началу  
 
 Заголовок сообщения: Re: Безопасность WEB-вьювера
СообщениеДобавлено: 13 янв 2010, 10:26
  


Зарегистрирован: 08 дек 2009, 12:44
Сообщения: 32
Откуда: Саратов
THK писал(а):
Yujen писал(а):
...вечером попробую домашний сервак прикрутить к dyndns и поиграть
А не рано в интернет это дело запускать? У меня есть сомнения относительно надежности... :scratch_one-s_head:
Дело в том, что сессия не закрывается принудительно, после окончания работы и остается активной 20 минут. Никак не могу придумать как ее закрыть после закрытия последней защищенной страници...

может и рано, но у меня на работе статический адрес поэтому все левые ipы блокируются фаирволом
да, вроде как 15 минут точно сессия еще остается активной, скину сие дело знакомому пхпшнику, может он чего и придумает :)
и до меня не дойдет как это прикрутить к сайту так, чтобы нельзя было миновать авторизацию путем прямого набора адреса :suicide2:


          Вернуться к началу  
 
Не в сети
 Заголовок сообщения: Re: Безопасность WEB-вьювера
СообщениеДобавлено: 13 янв 2010, 22:07
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
Yujen писал(а):
...скину сие дело знакомому пхпшнику, может он чего и придумает :)

Будет интересно узнать мнение знающего человека! Хочется довести зашиту до ума, попробовал вникнуть в возможные уязвимости - голова идет кругом! :suicide2:
Yujen писал(а):
...и до меня не дойдет как это прикрутить к сайту так, чтобы нельзя было миновать авторизацию путем прямого набора адреса :suicide2:

В начале каждой защищенной страници должен присутствовать такой код:
Код:
<?php
// Данный файл всегда будит "включаться" в  файл index.php директивой include в селекторе switch ($op),
// поэтому следует запретить его самостоятельный вызов из строки запроса путём указания его имени.
//
// Если не определена константа IN_ADMIN – завершаем работу скрипта
if(!defined("IN_ADMIN")) die; ?>
Переменной IN_ADMIN присваивается TRUE только в файле index.php , соответственно при прямом вызове (не через index.php) скрипт завершает свою работу в строке if(!defined("IN_ADMIN")) die;
Переход на нужную страницу происходит в index.php вот в этом месте:
Код:
// Выбираем нужное нам действие
switch ($op)
{
        case 'main' : include "main.php"; break;
        case 'show' : include "show.php"; break;
        default :  include "main.php";
}
main и show - значение переменной "op", передаваемое index.php?op=... А main.php и show.php файлы к которым надо обратиться.


          Вернуться к началу  
 
Не в сети
 Заголовок сообщения: Re: Безопасность WEB-вьювера
СообщениеДобавлено: 14 янв 2010, 16:02
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
Добавил проверку IP.
Вложение:
auth.php.gz
Скорее всего этого достаточно, т.к. введенные пользователем данные нигде на формах не выводятся (нет возможности выполнить произвольный код) и кража кука ничего не даст...


У вас нет доступа для просмотра вложений в этом сообщении.


          Вернуться к началу  
 
 Заголовок сообщения: Re: Безопасность WEB-вьювера
СообщениеДобавлено: 17 янв 2010, 15:26
  

Аватара пользователя
Участник

Зарегистрирован: 21 апр 2009, 16:38
Сообщения: 1218
Откуда: СССР
Витя, коды просмотрел, но нужно еще время для изучения. Предложения непременно будут. :smile:
з.ы. Извини, но со временем действительно напряг жесткий... кошмар какой-тов последние дни... :w00tmesalia: :sorry:


          Вернуться к началу  
 
Не в сети
 Заголовок сообщения: Re: Безопасность WEB-вьювера
СообщениеДобавлено: 17 янв 2010, 15:34
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
Цитата:
Предложения непременно будут. :smile:
Жду с нетерпением!
Цитата:
Извини, но со временем действительно напряг жесткий... кошмар какой-тов последние дни... :w00tmesalia: :sorry:
Бывает, у меня перед новым годом было... :suicide2:


          Вернуться к началу  
 
 Заголовок сообщения: Re: Безопасность WEB-вьювера
СообщениеДобавлено: 18 янв 2010, 11:25
  


Зарегистрирован: 08 дек 2009, 12:44
Сообщения: 32
Откуда: Саратов
как-то так, сессия умирает сразу после закрытия
config.php
Код:
<?
$max_cnt = 3; //максимальное количество попыток при вводе имени и пароля
$f_con = 120; //время (в секундах), на которое система отказывает в доступе пользователю, неправильно вводившему логин или пароль $max_cnt раз
$as_html_block = true; //разрешить включать в страницы с auth.php Auth Script HTML Block ? Обратное значение- false
?>


pass.php
Код:
<?*\\
admin=>admin
\\*?>


auth.php
Код:
<?

#конфигурация

error_reporting (0); //способ показа ошибок PHP

include ("config.php");

###

$file_pass = file ("pass.php");

$cnt_pass = count ($file_pass);

list($l,$p,$k)=explode("=>",$pass);

list($l_f,$p_f,$k_f)=explode("=>",$file_pass[$k]);

#condition (anti-hack)

if (isset($pass) and isset($exit) and !empty($l_f) and !empty($p_f) and !empty($k))

{

   $exit_id = "php_empty=>php_empty=>0";

   setcookie("pass",$exit_id);   

   header("Location: $PHP_SELF");

   exit;

}

if (isset($auth) and !empty($login) and !empty($password))

{

      $auth_f = file("pass.php");

      $cnt_af = count ($auth_f);

      for ($i=1; $i<($cnt_af-1); $i++)

   {

      if (trim($auth_f[$i]) == "".$login."=>".$password."")

      {

      $uniq_id = "".$login."=>".$password."=>".$i."";

      setcookie("pass",$uniq_id);

      header("Location: $PHP_SELF");

      exit;

      }

   }

      if (!isset($cnt))

   {

      $cnt = 0;

   }

      $cnt = $failed_id+1;

      if ($cnt == $max_cnt)

      {

      setcookie("failed_id", $max_cnt, time()+$f_con);

      header ("Location: $PHP_SELF?goodbye");

      exit;

      }

      setcookie("failed_id",$cnt);

      header ("Location: $PHP_SELF?die");

      exit;

}

?>

<?

if ($as_html_block == true)

{

?>

<!--Auth Script HTML-Block-->

<html>

<head>

<title>Auth Script v 0.3 [Powered by SPG]</title>

<style>

BODY {

   FONT-SIZE: 9pt; COLOR:black;  FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica, sans-serif

}

TD {

   FONT-SIZE: 9pt; COLOR:black;  FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica, sans-serif

}

A:link {

   FONT-WEIGHT: normal; FONT-SIZE: 9pt; COLOR:Royalblue; FONT-FAMILY: Verdana; TEXT-DECORATION: none

}

A:active {

   FONT-WEIGHT: normal; FONT-SIZE: 9pt; FONT-FAMILY: Verdana; TEXT-DECORATION: none

}

A:visited {

   FONT-WEIGHT: normal; FONT-SIZE: 9pt; COLOR:Royalblue; FONT-FAMILY: Verdana; TEXT-DECORATION: underline

}

</style>

</head>

<body>

<?

}

?>

<?

#condition (anti-hack)

if (!isset($pass) or $l != $l_f or $p != trim($p_f) or empty($l_f) or empty($p_f) or empty($k))

{

   if ((isset($goodbye) or $failed_id == $max_cnt) and isset($failed_id))

   {

      die ("<h3><font color=red>Внимание:</font> доступ к системе заблокирован на $f_con секунд</h3>");

   }

print "<h3 align=center>Вход в систему</h3>

<table align=center><tr><td align=right>

<form action=$PHP_SELF?auth method=post>Логин: <input type=text name=login></td></tr><tr><td align=right>Пароль: <input type=password name=password></td></tr><tr><td align=center><input type=submit value=Войти style=\"background-color:  Gainsboro; border-width: 1px; font-weight: bolder; border-color: black\"></td></tr></form></table></center>";

if ($as_html_block == true)

{

   print "</body></html>";

}

   if (isset($die) and isset($failed_id))

   {print "<h3><font color=red>Ошибка:</font> неверный логин или пароль. $failed_id из $max_cnt попыток.</h3>";}

exit;

}

#condition (anti-hack)

if (isset ($pass) and $l == $l_f and $p == trim($p_f) and !empty($l_f) and !empty($p_f) and !empty($k))

{

?>

<div title=version style="FONT-SIZE: 8pt; COLOR:gray;  FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica, sans-serif">Version of Auth Script: 0,3</div>

<div style="FONT-SIZE: 8pt; COLOR:gray;  FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica, sans-serif">Visit our Web-Site: <a target=_blank href=http://www.spg.arbse.net style="FONT-SIZE: 8pt; COLOR:gray;  FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica, sans-serif">http://www.spg.arbse.net</a></div>

<br>

<table align=center style="border-style:solid; border-color:black; border-width: 1px" width=95%><tr><td align=center>CP: <b><?=$l?> (id=<?=$k?>)</b> | <a href=<?=$PHP_SELF?>?do=add>добавить пользователя</a> | <a href=<?=$PHP_SELF?>?do=chp>сменить пароль</a> | <a href=<?=$PHP_SELF?>?do=del>удалить пользователя</a> | <a href=<?=$PHP_SELF?>?exit>выход (<?=$l?>)</a></td></tr></table><br>

<?

   if (isset($do))

   {

print "<table align=center style=\"border-style:solid; border-color:black; border-width: 1px\" width=95%><tr><td align=center><div title=info align=left>[DO] command: <b>$do</b></div>";

   }

#block: add

if ($do == "add")

{

print "<form action=$PHP_SELF?do=add&done method=post>

      Введите логин: <input type=text name=nl><br>

      Введите пароль: <input type=password name=np><br>

      <input type=submit value=Готово style=\"background-color:  Gainsboro; border-width: 1px; font-weight: bolder; border-color: black\">

      </form>";

if (isset($done))

   {

   if (!empty($nl) and !empty($np))

      {

         if (!ereg("[^а-яА-Я0-9a-zA-Z]",$np) and !ereg("[^а-яА-Я0-9a-zA-Z]",$nl))

   {}

   else {$failed++;}

   if ($failed != 1)

   {

   $filename = "pass.php";

   $f = file ("pass.php");

   $fd = fopen ($filename, 'r');

   $contents = fread ($fd, filesize ($filename));

   fclose ($fd);

   $Search = "".$f[$cnt_pass-1]."";

   $Replace = "".$nl."=>".$np."\r\n\\\*?>";

   $contents = str_replace($Search,$Replace,$contents);

   $fd = fopen ($filename, 'w');

   fwrite ($fd, $contents);

   fclose ($fd);

   print "<hr width=70% size=2 color=black>Пользователь <b>$nl</b> успешно создан<br><a href=$PHP_SELF>назад</a>";

   }

   else

         {print "<hr width=70% size=2 color=black>Недопустимый формат записи! Используйте только буквы и цифры. Пробелов не оставлять.";}

      }

      else

      {

         print "<hr width=70% size=2 color=black>Заполнены не все поля формы!";

      }

   }

}

###

#block: chp

if ($do == "chp")

   {

   print "<form action=$PHP_SELF?do=chp&done method=post>

      Введите старый пароль: <input type=password name=op><br>

      Введите новый пароль: <input type=password name=np><br>

      <input type=submit value=Готово style=\"background-color:  Gainsboro; border-width: 1px; font-weight: bolder; border-color: black\">

      </form>";

   if (isset($done))

   {

   if (!ereg("[^а-яА-Я0-9a-zA-Z]",$np))

   {}

   else {$failed++;}

   if ($failed != 1)

   {

      if ($op == $p)

      {

      $file=file("pass.php");

      for($i=0;$i<sizeof($file);$i++)

      if($i==$k) $file[$k]=ereg_replace("".$l."=>".$op."", "".$l."=>".$np."", $file[$k]);

      $fp=fopen("pass.php","w");

      fputs($fp,implode("",$file));

      fclose($fp);

   print "<hr width=70% size=2 color=black><br>Пароль текущего пользователя изменен.<br> Необходимо пройти повторную авторизацию.<br><a href=$PHP_SELF>выйти</a>";

      }

      else

      {

         print "<hr width=70% size=2 color=black>Старый пароль подтвержден неверно !";

      }

   }

      else

      {

      print "<hr width=70% size=2 color=black>Недопустимый формат записи! Используйте только буквы и цифры. Пробелов не оставлять.";

      }

   }

   }

###

#block: del

if ($do == "del")

{



print "<form action=$PHP_SELF?do=del&done method=post><select name=uid>";

for ($i=1; $i<($cnt_pass-1); $i++)

{

   list ($ln, $pw)=explode("=>",$file_pass[$i]);

   if ($ln != $l)

   {

   print "<option value=$i>$ln</option>";

   }

}

print "</select><br><br><input type=submit value=Удалить style=\"background-color:  Gainsboro; border-width: 1px; font-weight: bolder; border-color: black\"></form>";

if (isset($done) and !empty($uid))

   {

      $file=file("pass.php");

      list ($du, $pdu)=explode("=>", $file[$uid]);

      for($i=0;$i<sizeof($file);$i++)

      if($i==$uid) unset($file[$uid]);

      $fp=fopen("pass.php","w");

      fputs($fp,implode("",$file));

      fclose($fp);

      print "<hr width=70% size=2 color=black>Пользователь <b>$du</b> успешно удален<br><a href=$PHP_SELF>назад</a>";

   }

}

###

print "</td></tr></table><br><br>";

?>

<?}?>

<?

if ($as_html_block == true)

{

?>

</body>

</html>

<!--end-->

<?

}

?>


          Вернуться к началу  
 
Не в сети
 Заголовок сообщения: Re: Безопасность WEB-вьювера
СообщениеДобавлено: 18 янв 2010, 23:15
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
Цитата:
как-то так, сессия умирает сразу после закрытия

Спасибо! :good:
Как я понял - это готовое, обкатанное решение?
Буду разбираться... :scratch_one-s_head:


          Вернуться к началу  
 
 
Начать новую тему Ответить на тему



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Показать сообщения за:  Поле сортировки  
Перейти:  

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения


Яндекс цитирования Словенск