PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Как скрыть от скриптов подключенную БД
neolinux
Отправлено: 16 Декабря, 2013 - 08:59:26
Post Id


Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




Есть следующий скрипт
CODE (htmlphp):
скопировать код в буфер обмена
  1. /* Функции взаимодействия с системным массивом */
  2. /* setsys()
  3. Записывает данные в элемент системпого массива */
  4. function setsys($element, $data)
  5. {
  6.    GLOBAL $SYS_NW;
  7.    $el=explode('.',$element);
  8.    $i=count($el);
  9.    if($i==1)$SYS_NW[$element]=$data;
  10.    elseif($i==2)$SYS_NW[$el[0]][$el[1]]=$data;
  11.    elseif($i==3)$SYS_NW[$el[0]][$el[1]][$el[2]]=$data;
  12.    elseif($i==4)$SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]]=$data;
  13.    elseif($i==5)$SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]][$el[4]]=$data;
  14.    else return false;
  15.    return true;
  16. }
  17.  
  18. /* getsys()
  19. Возвращает значение элемента массива */
  20. function getsys($element)
  21. {
  22.    GLOBAL $SYS_NW;
  23.    $el=explode('.',$element);
  24.    $i=count($el);
  25.    if($i==1)return $SYS_NW[$element];
  26.    elseif($i==2)return $SYS_NW[$el[0]][$el[1]];
  27.    elseif($i==3)return $SYS_NW[$el[0]][$el[1]][$el[2]];
  28.    elseif($i==4)return $SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]];
  29.    elseif($i==5)return $SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]][$el[4]];
  30.    else return false;
  31. }
  32. function mysqlc_db_connect($server,$user,$password,$database)
  33.    {
  34.       setsys('app.mysql.other.server',mysql_connect($server, $user, $password)); // подключение к серверу
  35.       if(getsys('app.mysql.other.server'))
  36.       {
  37.          $dbselect=mysql_select_db($database); // активация БД
  38.          if(!$dbselect)
  39.          {
  40.             mysql_close(getsys('app.mysql.other.server'));
  41.             setsys('app.mysql.other.server','');
  42.             setsys('app.mysql.error',56);
  43.             return false;
  44.          }
  45.          else
  46.          {
  47.             setsys('app.mysql.other.dbselect',$database);
  48.             return true;
  49.          }
  50.       }
  51.       else
  52.       {
  53.          setsys('app.mysql.error',55);
  54.          return false;
  55.       }
  56.    }
  57.  
  58.  
  59.    /* закрывает соединение с базой данных */
  60.    function mysqlc_db_close()
  61.    {
  62.       getsys('app.mysql.other.server');
  63.       if(func_num_args()>0) return mysql_close(func_get_arg(0));
  64.       else return mysql_close(getsys('app.mysql.other.server'));
  65.    }
  66.  
  67.    /* отправляет запрос активной БД */
  68.    function mysqlc_query_db($query="")
  69.    {
  70.       setsys('app.mysql.result',mysql_query($query));
  71.  
  72.       if(getsys('app.mysql.result'))
  73.       {
  74.          return getsys('app.mysql.result');
  75.       }
  76.       else
  77.       {
  78.          setsys('app.mysql.error',57);
  79.          return false;
  80.       }
  81.    }

Еще не реализовал, но функции setsys() и getsys() будут запрещать доступ приложений к массиву, соответственно, сторонние скрипты не смогут получить параметры подключения. Но они смогут обращаться напрямую к активной БД.
Возможно ли запретить им такое действие? Или, как иначе можно скрыть от них подключение к БД?
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Декабря, 2013 - 12:01:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 10378
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




neolinux пишет:
как иначе можно скрыть от них подключение к БД
Инкапсуляцией
 
 Top
DelphinPRO
Отправлено: 16 Декабря, 2013 - 12:07:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 7190
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Имеется ввиду что ваш скрипт будет использоваться как библиотека?

Использование БД никак не запретить. Всегда можно самому поключится, зная параметры доступа.
Запретить доступ к текущему подлючению, вероятно можно, реализовав синглтон


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
neolinux
Отправлено: 16 Декабря, 2013 - 13:57:09
Post Id


Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
Имеется ввиду что ваш скрипт будет использоваться как библиотека?

Да.
DelphinPRO пишет:
Всегда можно самому поключится, зная параметры доступа

Сторонние скрипты не смогут получить параметров подключения
DeepVarvar пишет:
Инкапсуляцией
и
DelphinPRO пишет:
Запретить доступ к текущему подлючению, вероятно можно, реализовав синглтон

Здесь можно чуть подробнее. Хотя бы - куда копать?
(Добавление)
DeepVarvar
У меня уже возникала неприятная ситуация из-за отсутствия отображения значка модератора в IE8 (на заметку)
 
 Top
Toxa
Отправлено: 16 Декабря, 2013 - 14:18:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


инкапсуляция и синглтон - это термины ООП, на эту тему есть сотни статей в интернете.
В двух словах на форуме вам никто не объяснит.


-----
Удобный сервис для хранения файлов
 
 Top
esterio
Отправлено: 16 Декабря, 2013 - 14:39:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 5027
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




neolinux пишет:
GLOBAL $SYS_NW;

Уже только по этому такое не получиться сделать. А учитивая предидущие топикы ТС, он не хочет использовать ООП. Так что думаю никак. Еще в добавок скажу, что в mysql_* последний коннект активный и если не передать явно коннект в функции mysql_*, то будет использован активный коннект. в данном случае:
neolinux пишет:
setsys('app.mysql.other.server',mysql_connect($server, $user, $password));


Также хочу предупредить ТС, о том что нужно проверять на isset елементы массива
neolinux пишет:
if($i==1)$SYS_NW[$element]=$data;
elseif($i==2)$SYS_NW[$el[0]][$el[1]]=$data;
elseif($i==3)$SYS_NW[$el[0]][$el[1]][$el[2]]=$data;
elseif($i==4)$SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]]=$data;
elseif($i==5)$SYS_NW[$el[0]][$el[1]][$el[2]][$el[3]][$el[4]]=$data;


Инакше можно схопить ошыбку undefined offset

(Отредактировано автором: 16 Декабря, 2013 - 14:40:02)

 
 Top
neolinux
Отправлено: 16 Декабря, 2013 - 21:00:09
Post Id


Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




esterio пишет:
А учитивая предидущие топикы ТС, он не хочет использовать ООП

Как это реализовать на ООП?
 
 Top
caballero
Отправлено: 16 Декабря, 2013 - 21:06:39
Post Id


Активный участник


Покинул форум
Сообщений всего: 6001
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




при чем тут вообще ООП? никакое ООп не помешает скрипту вызвать mysql_query и обратится к БД


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
esterio
Отправлено: 17 Декабря, 2013 - 00:20:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 5027
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




инкапсуляция + mysqli или pdo
 
 Top
neolinux
Отправлено: 17 Декабря, 2013 - 14:40:12
Post Id


Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




caballero пишет:
никакое ООп не помешает скрипту вызвать mysql_query и обратится к БД

Я тоже так считаю
была мысль: в самой программе удалить код подключения к БД. Перед передачей ей управления выполнить mysqlc_db_connect() (см. в начале), по возврату - mysqlc_db_close(). Это бы свело к минимуму изменения в самой программе. Но если одна БД на сайт, нужно контролировать в какую таблицу лезет скрипт, а менять все mysqlc_query() на mysqlc_query_db - это уже мутатень.
(Добавление)
Может парсер PHP какой существует? Чтобы скрипты ставить не копированием, а через инсталятор. Заотно и include() заменить.
 
 Top
caballero
Отправлено: 17 Декабря, 2013 - 15:05:22
Post Id


Активный участник


Покинул форум
Сообщений всего: 6001
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




мутотень - твоя идея о чем тебе давно пытались втолковать.

Но как говорится ничто так не примиряет с реальностью как сама реальность


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DelphinPRO
Отправлено: 17 Декабря, 2013 - 15:47:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7190
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




neolinux пишет:
нужно контролировать в какую таблицу лезет скрипт, а менять все mysqlc_query() на mysqlc_query_db - это уже мутатень.

facepalm.jpg
Откуда такая паранойя? Зачем такой контроль? В каких библиотеках\фреймворках вы такое видели?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
neolinux
Отправлено: 17 Декабря, 2013 - 16:09:36
Post Id


Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




caballero пишет:
мутотень - твоя идея

Откуда такое стремление к оскорблениям?
И это те люди, что образуют контент форума!!!!
(Добавление)
DelphinPRO пишет:
Откуда такая паранойя?

Не скажу, заплюют
 
 Top
caballero
Отправлено: 17 Декабря, 2013 - 16:49:15
Post Id


Активный участник


Покинул форум
Сообщений всего: 6001
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Откуда такое стремление к оскорблениям?

это не оскорблене а констатация факта. Темы, подобные этой , только потверждают очевидное.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB